MediaWiki  master
MainConfigSchema.php
Go to the documentation of this file.
1 <?php
10 // phpcs:disable Generic.NamingConventions.UpperCaseConstantName.ClassConstantNotUpperCase
11 // phpcs:disable Generic.Files.LineLength.TooLong
12 namespace MediaWiki;
13 
16 use APCUBagOStuff;
17 use Argon2Password;
19 use BcryptPassword;
22 use CdnPurgeJob;
27 use DateTime;
28 use DateTimeZone;
29 use DeleteLinksJob;
31 use DeletePageJob;
33 use EmaillingJob;
34 use EmptyBagOStuff;
35 use EnotifNotifyJob;
38 use Generator;
39 use HashBagOStuff;
42 use InvalidArgumentException;
44 use JobQueueDB;
47 use LocalIdLookup;
49 use LocalRepo;
50 use LogFormatter;
51 use MediaWiki\Settings\Source\JsonSchemaTrait;
52 use MediaWikiSite;
57 use MWOldPassword;
59 use NamespaceInfo;
60 use NullJob;
67 use ReflectionClass;
68 use RefreshLinksJob;
69 use RenameUserJob;
74 use SiteStatsUpdate;
75 use SqlBagOStuff;
76 use TagLogFormatter;
79 use UDPRCFeedEngine;
85 use WebRequest;
88 
121  use JsonSchemaTrait;
122 
144  public static function listDefaultValues( string $prefix = '' ): Generator {
145  $class = new ReflectionClass( self::class );
146  foreach ( $class->getReflectionConstants() as $const ) {
147  if ( !$const->isPublic() ) {
148  continue;
149  }
150 
151  $value = $const->getValue();
152 
153  if ( !is_array( $value ) ) {
154  // Just in case we end up having some other kind of constant on this class.
155  continue;
156  }
157 
158  if ( isset( $value['obsolete'] ) ) {
159  continue;
160  }
161 
162  $name = $const->getName();
163  yield "$prefix$name" => self::getDefaultFromJsonSchema( $value );
164  }
165  }
166 
179  public static function getDefaultValue( string $name ) {
180  $class = new ReflectionClass( self::class );
181  if ( !$class->hasConstant( $name ) ) {
182  throw new InvalidArgumentException( "Unknown setting: $name" );
183  }
184  $value = $class->getConstant( $name );
185 
186  if ( !is_array( $value ) ) {
187  // Might happen if we end up having other kinds of constants on this class.
188  throw new InvalidArgumentException( "Unknown setting: $name" );
189  }
190 
191  return self::getDefaultFromJsonSchema( $value );
192  }
193 
194  /***************************************************************************/
202  public const ConfigRegistry = [
203  'default' => [
204  'main' => 'GlobalVarConfig::newInstance',
205  ],
206  'type' => 'map',
207  ];
208 
212  public const Sitename = [
213  'default' => 'MediaWiki',
214  ];
215 
216  /***************************************************************************/
217  // region Server URLs and file paths
242  public const Server = [
243  'default' => false,
244  ];
245 
255  public const CanonicalServer = [
256  'default' => false,
257  ];
258 
265  public const ServerName = [
266  'default' => false,
267  ];
268 
275  public const AssumeProxiesUseDefaultProtocolPorts = [
276  'default' => true,
277  'type' => 'boolean',
278  ];
279 
290  public const HttpsPort = [
291  'default' => 443,
292  ];
293 
311  public const ForceHTTPS = [
312  'default' => false,
313  'type' => 'boolean',
314  ];
315 
326  public const ScriptPath = [
327  'default' => '/wiki',
328  ];
329 
344  public const UsePathInfo = [
345  'dynamicDefault' => true,
346  ];
347 
351  public static function getDefaultUsePathInfo(): bool {
352  // These often break when PHP is set up in CGI mode.
353  // PATH_INFO *may* be correct if cgi.fix_pathinfo is set, but then again it may not;
354  // lighttpd converts incoming path data to lowercase on systems
355  // with case-insensitive filesystems, and there have been reports of
356  // problems on Apache as well.
357  return !str_contains( PHP_SAPI, 'cgi' ) && !str_contains( PHP_SAPI, 'apache2filter' ) &&
358  !str_contains( PHP_SAPI, 'isapi' );
359  }
360 
366  public const Script = [
367  'default' => false,
368  'dynamicDefault' => [ 'use' => [ 'ScriptPath' ] ]
369  ];
370 
375  public static function getDefaultScript( $scriptPath ): string {
376  return "$scriptPath/index.php";
377  }
378 
386  public const LoadScript = [
387  'default' => false,
388  'dynamicDefault' => [ 'use' => [ 'ScriptPath' ] ]
389  ];
390 
395  public static function getDefaultLoadScript( $scriptPath ): string {
396  return "$scriptPath/load.php";
397  }
398 
405  public const RestPath = [
406  'default' => false,
407  'dynamicDefault' => [ 'use' => [ 'ScriptPath' ] ]
408  ];
409 
414  public static function getDefaultRestPath( $scriptPath ): string {
415  return "$scriptPath/rest.php";
416  }
417 
425  public const StylePath = [
426  'default' => false,
427  'dynamicDefault' => [ 'use' => [ 'ResourceBasePath' ] ]
428  ];
429 
434  public static function getDefaultStylePath( $resourceBasePath ): string {
435  return "$resourceBasePath/skins";
436  }
437 
445  public const LocalStylePath = [
446  'default' => false,
447  'dynamicDefault' => [ 'use' => [ 'ScriptPath' ] ]
448  ];
449 
454  public static function getDefaultLocalStylePath( $scriptPath ): string {
455  // Avoid ResourceBasePath here since that may point to a different domain (e.g. CDN)
456  return "$scriptPath/skins";
457  }
458 
466  public const ExtensionAssetsPath = [
467  'default' => false,
468  'dynamicDefault' => [ 'use' => [ 'ResourceBasePath' ] ]
469  ];
470 
475  public static function getDefaultExtensionAssetsPath( $resourceBasePath ): string {
476  return "$resourceBasePath/extensions";
477  }
478 
486  public const ExtensionDirectory = [
487  'default' => null,
488  'type' => '?string',
489  ];
490 
498  public const StyleDirectory = [
499  'default' => null,
500  'type' => '?string',
501  ];
502 
512  public const BaseDirectory = [
513  'default' => null,
514  ];
515 
523  public const ArticlePath = [
524  'default' => false,
525  'dynamicDefault' => [ 'use' => [ 'Script', 'UsePathInfo' ] ]
526  ];
527 
533  public static function getDefaultArticlePath( string $script, $usePathInfo ): string {
534  if ( $usePathInfo ) {
535  return "$script/$1";
536  }
537  return "$script?title=$1";
538  }
539 
545  public const UploadPath = [
546  'default' => false,
547  'dynamicDefault' => [ 'use' => [ 'ScriptPath' ] ]
548  ];
549 
554  public static function getDefaultUploadPath( $scriptPath ): string {
555  return "$scriptPath/images";
556  }
557 
570  public const ImgAuthPath = [
571  'default' => false,
572  ];
573 
580  public const ThumbPath = [
581  'default' => false,
582  ];
583 
587  public const UploadDirectory = [
588  'default' => false,
589  'dynamicDefault' => [ 'use' => [ 'BaseDirectory' ] ]
590  ];
591 
596  public static function getDefaultUploadDirectory( $baseDirectory ): string {
597  return "$baseDirectory/images";
598  }
599 
605  public const FileCacheDirectory = [
606  'default' => false,
607  'dynamicDefault' => [ 'use' => [ 'UploadDirectory' ] ]
608  ];
609 
614  public static function getDefaultFileCacheDirectory( $uploadDirectory ): string {
615  return "$uploadDirectory/cache";
616  }
617 
626  public const Logo = [
627  'default' => false,
628  'dynamicDefault' => [ 'use' => [ 'ResourceBasePath' ] ]
629  ];
630 
635  public static function getDefaultLogo( $resourceBasePath ): string {
636  return "$resourceBasePath/resources/assets/change-your-logo.svg";
637  }
638 
688  public const Logos = [
689  'default' => false,
690  'type' => 'map|false',
691  ];
692 
722  public const LogoHD = [
723  'default' => false,
724  'type' => 'map|false',
725  'deprecated' => 'since 1.35. Developers should retrieve this logo (and other variants) ' .
726  'using the static function MediaWiki\ResourceLoader\SkinModule::getAvailableLogos. $wgLogos ' .
727  'should be used instead.',
728  ];
729 
735  public const Favicon = [
736  'default' => '/favicon.ico',
737  ];
738 
746  public const AppleTouchIcon = [
747  'default' => false,
748  ];
749 
768  public const ReferrerPolicy = [
769  'default' => false,
770  'type' => 'list|string|false',
771  ];
772 
794  public const TmpDirectory = [
795  'default' => false,
796  ];
797 
804  public const UploadBaseUrl = [
805  'default' => '',
806  ];
807 
820  public const UploadStashScalerBaseUrl = [
821  'default' => false,
822  'deprecated' => 'since 1.36 Use thumbProxyUrl in $wgLocalFileRepo',
823  ];
824 
839  public const ActionPaths = [
840  'default' => [],
841  'type' => 'map',
842  ];
843 
850  public const MainPageIsDomainRoot = [
851  'default' => false,
852  'type' => 'boolean',
853  ];
854 
855  // endregion -- end of server URLs and file paths
856 
857  /***************************************************************************/
858  // region Files and file uploads
870  public const EnableUploads = [
871  'default' => false,
872  ];
873 
877  public const UploadStashMaxAge = [
878  'default' => 6 * 3600, // 6 hours
879  ];
880 
887  public const EnableAsyncUploads = [
888  'default' => false,
889  ];
890 
894  public const UploadMaintenance = [
895  'default' => false,
896  ];
897 
905  public const IllegalFileChars = [
906  'default' => ':\\/\\\\',
907  ];
908 
914  public const DeletedDirectory = [
915  'default' => false,
916  'dynamicDefault' => [ 'use' => [ 'UploadDirectory' ] ]
917  ];
918 
923  public static function getDefaultDeletedDirectory( $uploadDirectory ): string {
924  return "$uploadDirectory/deleted";
925  }
926 
930  public const ImgAuthDetails = [
931  'default' => false,
932  ];
933 
949  public const ImgAuthUrlPathMap = [
950  'default' => [],
951  'type' => 'map',
952  ];
953 
1088  public const LocalFileRepo = [
1089  'default' => false,
1090  'type' => 'map|false',
1091  'dynamicDefault' => [ 'use' => [ 'UploadDirectory', 'ScriptPath', 'Favicon', 'UploadBaseUrl',
1092  'UploadPath', 'HashedUploadDirectory', 'ThumbnailScriptPath',
1093  'GenerateThumbnailOnParse', 'DeletedDirectory', 'UpdateCompatibleMetadata' ] ],
1094  ];
1095 
1096  public static function getDefaultLocalFileRepo(
1097  $uploadDirectory, $scriptPath, $favicon, $uploadBaseUrl, $uploadPath,
1098  $hashedUploadDirectory, $thumbnailScriptPath, $generateThumbnailOnParse, $deletedDirectory,
1099  $updateCompatibleMetadata
1100  ) {
1101  return [
1102  'class' => LocalRepo::class,
1103  'name' => 'local',
1104  'directory' => $uploadDirectory,
1105  'scriptDirUrl' => $scriptPath,
1106  'favicon' => $favicon,
1107  'url' => $uploadBaseUrl ? $uploadBaseUrl . $uploadPath : $uploadPath,
1108  'hashLevels' => $hashedUploadDirectory ? 2 : 0,
1109  'thumbScriptUrl' => $thumbnailScriptPath,
1110  'transformVia404' => !$generateThumbnailOnParse,
1111  'deletedDir' => $deletedDirectory,
1112  'deletedHashLevels' => $hashedUploadDirectory ? 3 : 0,
1113  'updateCompatibleMetadata' => $updateCompatibleMetadata,
1114  'reserializeMetadata' => $updateCompatibleMetadata,
1115  ];
1116  }
1117 
1131  public const ForeignFileRepos = [
1132  'default' => [],
1133  'type' => 'list',
1134  ];
1135 
1145  public const UseInstantCommons = [
1146  'default' => false,
1147  ];
1148 
1176  public const UseSharedUploads = [
1177  'default' => false,
1178  'type' => 'boolean',
1179  ];
1180 
1188  public const SharedUploadDirectory = [
1189  'default' => null,
1190  'type' => '?string',
1191  ];
1192 
1200  public const SharedUploadPath = [
1201  'default' => null,
1202  'type' => '?string',
1203  ];
1204 
1212  public const HashedSharedUploadDirectory = [
1213  'default' => true,
1214  'type' => 'boolean',
1215  ];
1216 
1224  public const RepositoryBaseUrl = [
1225  'default' => 'https://commons.wikimedia.org/wiki/File:',
1226  ];
1227 
1235  public const FetchCommonsDescriptions = [
1236  'default' => false,
1237  'type' => 'boolean',
1238  ];
1239 
1248  public const SharedUploadDBname = [
1249  'default' => false,
1250  'type' => 'false|string',
1251  ];
1252 
1260  public const SharedUploadDBprefix = [
1261  'default' => '',
1262  'type' => 'string',
1263  ];
1264 
1272  public const CacheSharedUploads = [
1273  'default' => true,
1274  'type' => 'boolean',
1275  ];
1276 
1287  public const ForeignUploadTargets = [
1288  'default' => [ 'local', ],
1289  'type' => 'list',
1290  ];
1291 
1301  public const UploadDialog = [
1302  'default' =>
1303  [
1304  'fields' =>
1305  [
1306  'description' => true,
1307  'date' => false,
1308  'categories' => false,
1309  ],
1310  'licensemessages' =>
1311  [
1312  'local' => 'generic-local',
1313  'foreign' => 'generic-foreign',
1314  ],
1315  'comment' =>
1316  [
1317  'local' => '',
1318  'foreign' => '',
1319  ],
1320  'format' =>
1321  [
1322  'filepage' => '$DESCRIPTION',
1323  'description' => '$TEXT',
1324  'ownwork' => '',
1325  'license' => '',
1326  'uncategorized' => '',
1327  ],
1328  ],
1329  'type' => 'map',
1330  ];
1331 
1368  public const FileBackends = [
1369  'default' => [],
1370  'type' => 'map',
1371  ];
1372 
1384  public const LockManagers = [
1385  'default' => [],
1386  'type' => 'list',
1387  ];
1388 
1404  public const ShowEXIF = [
1405  'dynamicDefault' => [ 'callback' => [ self::class, 'getDefaultShowEXIF' ] ],
1406  ];
1407 
1411  public static function getDefaultShowEXIF(): bool {
1412  return function_exists( 'exif_read_data' );
1413  }
1414 
1418  public const UpdateCompatibleMetadata = [
1419  'default' => false,
1420  ];
1421 
1428  public const AllowCopyUploads = [
1429  'default' => false,
1430  ];
1431 
1437  public const CopyUploadsDomains = [
1438  'default' => [],
1439  'type' => 'list',
1440  ];
1441 
1447  public const CopyUploadsFromSpecialUpload = [
1448  'default' => false,
1449  ];
1450 
1456  public const CopyUploadProxy = [
1457  'default' => false,
1458  ];
1459 
1468  public const CopyUploadTimeout = [
1469  'default' => false,
1470  'type' => 'false|integer',
1471  ];
1472 
1479  public const CopyUploadAllowOnWikiDomainConfig = [
1480  'default' => false,
1481  ];
1482 
1503  public const MaxUploadSize = [
1504  'default' => 1024 * 1024 * 100,
1505  ];
1506 
1521  public const MinUploadChunkSize = [
1522  'default' => 1024,
1523  ];
1524 
1536  public const UploadNavigationUrl = [
1537  'default' => false,
1538  ];
1539 
1545  public const UploadMissingFileUrl = [
1546  'default' => false,
1547  ];
1548 
1562  public const ThumbnailScriptPath = [
1563  'default' => false,
1564  ];
1565 
1573  public const SharedThumbnailScriptPath = [
1574  'default' => false,
1575  'type' => 'string|false',
1576  ];
1577 
1583  public const HashedUploadDirectory = [
1584  'default' => true,
1585  'type' => 'boolean',
1586  ];
1587 
1596  public const FileExtensions = [
1597  'default' => [ 'png', 'gif', 'jpg', 'jpeg', 'webp', ],
1598  'type' => 'list',
1599  ];
1600 
1609  public const ProhibitedFileExtensions = [
1610  'default' => [
1611  # HTML may contain cookie-stealing JavaScript and web bugs
1612  'html', 'htm', 'js', 'jsb', 'mhtml', 'mht', 'xhtml', 'xht',
1613  # PHP scripts may execute arbitrary code on the server
1614  'php', 'phtml', 'php3', 'php4', 'php5', 'phps', 'phar',
1615  # Other types that may be interpreted by some servers
1616  'shtml', 'jhtml', 'pl', 'py', 'cgi',
1617  # May contain harmful executables for Windows victims
1618  'exe', 'scr', 'dll', 'msi', 'vbs', 'bat', 'com', 'pif', 'cmd', 'vxd', 'cpl'
1619  ],
1620  'type' => 'list',
1621  ];
1622 
1629  public const MimeTypeExclusions = [
1630  'default' => [
1631  # HTML may contain cookie-stealing JavaScript and web bugs
1632  'text/html',
1633  # Similarly with JavaScript itself
1634  'application/javascript', 'text/javascript', 'text/x-javascript', 'application/x-shellscript',
1635  # PHP scripts may execute arbitrary code on the server
1636  'application/x-php', 'text/x-php',
1637  # Other types that may be interpreted by some servers
1638  'text/x-python', 'text/x-perl', 'text/x-bash', 'text/x-sh', 'text/x-csh',
1639  # Client-side hazards on Internet Explorer
1640  'text/scriptlet', 'application/x-msdownload',
1641  # Windows metafile, client-side vulnerability on some systems
1642  'application/x-msmetafile',
1643  # Files that look like java files
1644  'application/java'
1645  ],
1646  'type' => 'list',
1647  ];
1648 
1654  public const CheckFileExtensions = [
1655  'default' => true,
1656  ];
1657 
1664  public const StrictFileExtensions = [
1665  'default' => true,
1666  ];
1667 
1674  public const DisableUploadScriptChecks = [
1675  'default' => false,
1676  ];
1677 
1681  public const UploadSizeWarning = [
1682  'default' => false,
1683  ];
1684 
1696  public const TrustedMediaFormats = [
1697  'default' => [
1698  MEDIATYPE_BITMAP, // all bitmap formats
1699  MEDIATYPE_AUDIO, // all audio formats
1700  MEDIATYPE_VIDEO, // all plain video formats
1701  "image/svg+xml", // svg (only needed if inline rendering of svg is not supported)
1702  "application/pdf", // PDF files
1703  # "application/x-shockwave-flash", //flash/shockwave movie
1704  ],
1705  'type' => 'list',
1706  ];
1707 
1716  public const MediaHandlers = [
1717  'default' => [],
1718  'type' => 'map',
1719  ];
1720 
1727  public const NativeImageLazyLoading = [
1728  'default' => false,
1729  'type' => 'boolean',
1730  ];
1731 
1736  public const ParserTestMediaHandlers = [
1737  'default' => [
1738  'image/jpeg' => 'MockBitmapHandler',
1739  'image/png' => 'MockBitmapHandler',
1740  'image/gif' => 'MockBitmapHandler',
1741  'image/tiff' => 'MockBitmapHandler',
1742  'image/webp' => 'MockBitmapHandler',
1743  'image/x-ms-bmp' => 'MockBitmapHandler',
1744  'image/x-bmp' => 'MockBitmapHandler',
1745  'image/x-xcf' => 'MockBitmapHandler',
1746  'image/svg+xml' => 'MockSvgHandler',
1747  'image/vnd.djvu' => 'MockDjVuHandler',
1748  ],
1749  'type' => 'map',
1750  ];
1751 
1757  public const UseImageResize = [
1758  'default' => true,
1759  ];
1760 
1770  public const UseImageMagick = [
1771  'default' => false,
1772  ];
1773 
1777  public const ImageMagickConvertCommand = [
1778  'default' => '/usr/bin/convert',
1779  ];
1780 
1786  public const MaxInterlacingAreas = [
1787  'default' => [],
1788  'type' => 'map',
1789  ];
1790 
1794  public const SharpenParameter = [
1795  'default' => '0x0.4',
1796  ];
1797 
1801  public const SharpenReductionThreshold = [
1802  'default' => 0.85,
1803  ];
1804 
1809  public const ImageMagickTempDir = [
1810  'default' => false,
1811  ];
1812 
1825  public const CustomConvertCommand = [
1826  'default' => false,
1827  ];
1828 
1834  public const JpegTran = [
1835  'default' => '/usr/bin/jpegtran',
1836  ];
1837 
1857  public const JpegPixelFormat = [
1858  'default' => 'yuv420',
1859  ];
1860 
1868  public const JpegQuality = [
1869  'default' => 80,
1870  ];
1871 
1876  public const Exiv2Command = [
1877  'default' => '/usr/bin/exiv2',
1878  ];
1879 
1885  public const Exiftool = [
1886  'default' => '/usr/bin/exiftool',
1887  ];
1888 
1899  public const SVGConverters = [
1900  'default' => [
1901  'ImageMagick' => '$path/convert -background "#ffffff00" -thumbnail $widthx$height\\! $input PNG:$output',
1902  'sodipodi' => '$path/sodipodi -z -w $width -f $input -e $output',
1903  'inkscape' => '$path/inkscape -z -w $width -f $input -e $output',
1904  'batik' => 'java -Djava.awt.headless=true -jar $path/batik-rasterizer.jar -w $width -d $output $input',
1905  'rsvg' => '$path/rsvg-convert -w $width -h $height -o $output $input',
1906  'imgserv' => '$path/imgserv-wrapper -i svg -o png -w$width $input $output',
1907  'ImagickExt' => [ 'SvgHandler::rasterizeImagickExt', ],
1908  ],
1909  'type' => 'map',
1910  ];
1911 
1915  public const SVGConverter = [
1916  'default' => 'ImageMagick',
1917  ];
1918 
1922  public const SVGConverterPath = [
1923  'default' => '',
1924  ];
1925 
1929  public const SVGMaxSize = [
1930  'default' => 5120,
1931  ];
1932 
1938  public const SVGMetadataCutoff = [
1939  'default' => 262144,
1940  ];
1941 
1952  public const SVGNativeRendering = [
1953  'default' => false,
1954  'type' => 'string|boolean',
1955  ];
1956 
1964  public const SVGNativeRenderingSizeLimit = [
1965  'default' => 50 * 1024,
1966  ];
1967 
1977  public const MediaInTargetLanguage = [
1978  'default' => true,
1979  ];
1980 
1998  public const MaxImageArea = [
1999  'default' => 12500000,
2000  'type' => 'string|integer|false',
2001  ];
2002 
2011  public const MaxAnimatedGifArea = [
2012  'default' => 12500000,
2013  ];
2014 
2030  public const TiffThumbnailType = [
2031  'default' => [],
2032  'type' => 'list',
2033  'mergeStrategy' => 'replace',
2034  ];
2035 
2043  public const ThumbnailEpoch = [
2044  'default' => '20030516000000',
2045  ];
2046 
2054  public const AttemptFailureEpoch = [
2055  'default' => 1,
2056  ];
2057 
2069  public const IgnoreImageErrors = [
2070  'default' => false,
2071  ];
2072 
2093  public const GenerateThumbnailOnParse = [
2094  'default' => true,
2095  'type' => 'boolean',
2096  ];
2097 
2101  public const ShowArchiveThumbnails = [
2102  'default' => true,
2103  ];
2104 
2110  public const EnableAutoRotation = [
2111  'default' => null,
2112  'type' => '?boolean',
2113  ];
2114 
2120  public const Antivirus = [
2121  'default' => null,
2122  'type' => '?string',
2123  ];
2124 
2160  public const AntivirusSetup = [
2161  'default' => [
2162  # setup for clamav
2163  'clamav' => [
2164  'command' => 'clamscan --no-summary ',
2165  'codemap' => [
2166  "0" => AV_NO_VIRUS, # no virus
2167  "1" => AV_VIRUS_FOUND, # virus found
2168  "52" => AV_SCAN_ABORTED, # unsupported file format (probably immune)
2169  "*" => AV_SCAN_FAILED, # else scan failed
2170  ],
2171  'messagepattern' => '/.*?:(.*)/sim',
2172  ],
2173  ],
2174  'type' => 'map',
2175  ];
2176 
2180  public const AntivirusRequired = [
2181  'default' => true,
2182  ];
2183 
2187  public const VerifyMimeType = [
2188  'default' => true,
2189  ];
2190 
2201  public const MimeTypeFile = [
2202  'default' => 'internal',
2203  ];
2204 
2210  public const MimeInfoFile = [
2211  'default' => 'internal',
2212  ];
2213 
2227  public const MimeDetectorCommand = [
2228  'default' => null,
2229  'type' => '?string',
2230  ];
2231 
2237  public const TrivialMimeDetection = [
2238  'default' => false,
2239  ];
2240 
2246  public const XMLMimeTypes = [
2247  'default' => [
2248  'http://www.w3.org/2000/svg:svg' => 'image/svg+xml',
2249  'svg' => 'image/svg+xml',
2250  'http://www.lysator.liu.se/~alla/dia/:diagram' => 'application/x-dia-diagram',
2251  'http://www.w3.org/1999/xhtml:html' => 'text/html',
2252  'html' => 'text/html',
2253  ],
2254  'type' => 'map',
2255  ];
2256 
2267  public const ImageLimits = [
2268  'default' => [
2269  [ 320, 240 ],
2270  [ 640, 480 ],
2271  [ 800, 600 ],
2272  [ 1024, 768 ],
2273  [ 1280, 1024 ],
2274  [ 2560, 2048 ],
2275  ],
2276  'type' => 'list',
2277  ];
2278 
2284  public const ThumbLimits = [
2285  'default' => [
2286  120,
2287  150,
2288  180,
2289  200,
2290  250,
2291  300
2292  ],
2293  'type' => 'list',
2294  ];
2295 
2301  public const ThumbnailNamespaces = [
2302  'default' => [ NS_FILE ],
2303  'type' => 'list',
2304  'items' => [ 'type' => 'integer', ],
2305  ];
2306 
2317  public const ThumbnailBuckets = [
2318  'default' => null,
2319  'type' => '?list',
2320  ];
2321 
2337  public const ThumbnailMinimumBucketDistance = [
2338  'default' => 50,
2339  ];
2340 
2350  public const UploadThumbnailRenderMap = [
2351  'default' => [],
2352  'type' => 'map',
2353  ];
2354 
2366  public const UploadThumbnailRenderMethod = [
2367  'default' => 'jobqueue',
2368  ];
2369 
2376  public const UploadThumbnailRenderHttpCustomHost = [
2377  'default' => false,
2378  ];
2379 
2386  public const UploadThumbnailRenderHttpCustomDomain = [
2387  'default' => false,
2388  ];
2389 
2397  public const UseTinyRGBForJPGThumbnails = [
2398  'default' => false,
2399  ];
2400 
2416  public const GalleryOptions = [
2417  'default' => [],
2418  'type' => 'map',
2419  ];
2420 
2426  public const ThumbUpright = [
2427  'default' => 0.75,
2428  ];
2429 
2433  public const DirectoryMode = [
2434  'default' => 0777, // octal!
2435  ];
2436 
2443  public const ResponsiveImages = [
2444  'default' => true,
2445  ];
2446 
2463  public const ImagePreconnect = [
2464  'default' => false,
2465  ];
2466 
2467  /***************************************************************************/
2468  // region DJVU settings
2476  public const DjvuDump = [
2477  'default' => null,
2478  'type' => '?string',
2479  ];
2480 
2486  public const DjvuRenderer = [
2487  'default' => null,
2488  'type' => '?string',
2489  ];
2490 
2496  public const DjvuTxt = [
2497  'default' => null,
2498  'type' => '?string',
2499  ];
2500 
2506  public const DjvuPostProcessor = [
2507  'default' => 'pnmtojpeg',
2508  'type' => '?string',
2509  ];
2510 
2514  public const DjvuOutputExtension = [
2515  'default' => 'jpg',
2516  ];
2517 
2518  // endregion -- end of DJvu
2519 
2520  // endregion -- end of file uploads
2521 
2522  /***************************************************************************/
2523  // region Email settings
2531  public const EmergencyContact = [
2532  'default' => false,
2533  ];
2534 
2543  public const PasswordSender = [
2544  'default' => false,
2545  ];
2546 
2552  public const NoReplyAddress = [
2553  'default' => false,
2554  ];
2555 
2561  public const EnableEmail = [
2562  'default' => true,
2563  ];
2564 
2570  public const EnableUserEmail = [
2571  'default' => true,
2572  ];
2573 
2581  public const EnableSpecialMute = [
2582  'default' => false,
2583  ];
2584 
2590  public const EnableUserEmailMuteList = [
2591  'default' => false,
2592  ];
2593 
2603  public const UserEmailUseReplyTo = [
2604  'default' => true,
2605  ];
2606 
2611  public const PasswordReminderResendTime = [
2612  'default' => 24,
2613  ];
2614 
2618  public const NewPasswordExpiry = [
2619  'default' => 3600 * 24 * 7,
2620  ];
2621 
2625  public const UserEmailConfirmationTokenExpiry = [
2626  'default' => 7 * 24 * 60 * 60,
2627  ];
2628 
2633  public const PasswordExpirationDays = [
2634  'default' => false,
2635  ];
2636 
2641  public const PasswordExpireGrace = [
2642  'default' => 3600 * 24 * 7,
2643  ];
2644 
2662  public const SMTP = [
2663  'default' => false,
2664  'type' => 'false|map',
2665  ];
2666 
2670  public const AdditionalMailParams = [
2671  'default' => null,
2672  ];
2673 
2678  public const AllowHTMLEmail = [
2679  'default' => false,
2680  ];
2681 
2691  public const EnotifFromEditor = [
2692  'default' => false,
2693  'type' => 'boolean',
2694  ];
2695 
2702  public const EmailAuthentication = [
2703  'default' => true,
2704  ];
2705 
2709  public const EnotifWatchlist = [
2710  'default' => false,
2711  ];
2712 
2720  public const EnotifUserTalk = [
2721  'default' => false,
2722  ];
2723 
2736  public const EnotifRevealEditorAddress = [
2737  'default' => false,
2738  'type' => 'boolean',
2739  ];
2740 
2754  public const EnotifMinorEdits = [
2755  'default' => true,
2756  ];
2757 
2765  public const EnotifImpersonal = [
2766  'default' => false,
2767  ];
2768 
2773  public const EnotifMaxRecips = [
2774  'default' => 500,
2775  ];
2776 
2780  public const EnotifUseRealName = [
2781  'default' => false,
2782  ];
2783 
2788  public const UsersNotifiedOnAllChanges = [
2789  'default' => [],
2790  'type' => 'map',
2791  ];
2792 
2793  // endregion -- end of email settings
2794 
2795  /***************************************************************************/
2796  // region Database settings
2807  public const DBname = [
2808  'default' => 'my_wiki',
2809  ];
2810 
2819  public const DBmwschema = [
2820  'default' => null,
2821  'type' => '?string',
2822  ];
2823 
2832  public const DBprefix = [
2833  'default' => '',
2834  ];
2835 
2839  public const DBserver = [
2840  'default' => 'localhost',
2841  ];
2842 
2846  public const DBport = [
2847  'default' => 5432,
2848  ];
2849 
2853  public const DBuser = [
2854  'default' => 'wikiuser',
2855  ];
2856 
2860  public const DBpassword = [
2861  'default' => '',
2862  ];
2863 
2867  public const DBtype = [
2868  'default' => 'mysql',
2869  ];
2870 
2878  public const DBssl = [
2879  'default' => false,
2880  ];
2881 
2890  public const DBcompress = [
2891  'default' => false,
2892  ];
2893 
2897  public const DBadminuser = [
2898  'default' => null,
2899  ];
2900 
2904  public const DBadminpassword = [
2905  'default' => null,
2906  ];
2907 
2919  public const SearchType = [
2920  'default' => null,
2921  ];
2922 
2935  public const SearchTypeAlternatives = [
2936  'default' => null,
2937  ];
2938 
2942  public const DBTableOptions = [
2943  'default' => 'ENGINE=InnoDB, DEFAULT CHARSET=binary',
2944  ];
2945 
2953  public const SQLMode = [
2954  'default' => '',
2955  ];
2956 
2964  public const DBDefaultGroup = [
2965  'default' => null,
2966  ];
2967 
2971  public const SQLiteDataDir = [
2972  'default' => '',
2973  ];
2974 
2995  public const SharedDB = [
2996  'default' => null,
2997  ];
2998 
3002  public const SharedPrefix = [
3003  'default' => false,
3004  'dynamicDefault' => [ 'use' => [ 'DBprefix' ] ]
3005  ];
3006 
3011  public static function getDefaultSharedPrefix( $dbPrefix ) {
3012  return $dbPrefix;
3013  }
3014 
3019  public const SharedTables = [
3020  'default' => [
3021  'user',
3022  'user_properties',
3023  'user_autocreate_serial',
3024  ],
3025  'type' => 'list',
3026  ];
3027 
3032  public const SharedSchema = [
3033  'default' => false,
3034  'dynamicDefault' => [ 'use' => [ 'DBmwschema' ] ]
3035  ];
3036 
3041  public static function getDefaultSharedSchema( $dbMwschema ) {
3042  return $dbMwschema;
3043  }
3044 
3099  public const DBservers = [
3100  'default' => false,
3101  'type' => 'false|list',
3102  ];
3103 
3114  public const LBFactoryConf = [
3115  'default' => [
3116  'class' => 'Wikimedia\\Rdbms\\LBFactorySimple',
3117  ],
3118  'type' => 'map',
3119  'mergeStrategy' => 'replace',
3120  ];
3121 
3133  public const DataCenterUpdateStickTTL = [
3134  'default' => 10,
3135  ];
3136 
3140  public const DBerrorLog = [
3141  'default' => false,
3142  ];
3143 
3164  public const DBerrorLogTZ = [
3165  'default' => false,
3166  'dynamicDefault' => [ 'use' => [ 'Localtimezone' ] ]
3167  ];
3168 
3169  public static function getDefaultDBerrorLogTZ( $localtimezone ) {
3170  // NOTE: Extra fallback, in case $localtimezone is ''.
3171  // Many extsing LocalSettings files have $wgLocaltimezone = ''
3172  // in them, erroneously generated by the installer.
3173  return $localtimezone ?: self::getDefaultLocaltimezone();
3174  }
3175 
3189  public const LocalDatabases = [
3190  'default' => [],
3191  'type' => 'list',
3192  'items' => [ 'type' => 'string', ],
3193  ];
3194 
3202  public const DatabaseReplicaLagWarning = [
3203  'default' => 10,
3204  ];
3205 
3210  public const DatabaseReplicaLagCritical = [
3211  'default' => 30,
3212  ];
3213 
3220  public const MaxExecutionTimeForExpensiveQueries = [
3221  'default' => 0,
3222  ];
3223 
3238  public const TemplateLinksSchemaMigrationStage = [
3240  'type' => 'integer',
3241  ];
3242 
3254  public const ExternalLinksSchemaMigrationStage = [
3255  'default' => SCHEMA_COMPAT_OLD,
3256  'type' => 'integer',
3257  ];
3258 
3267  public const CommentTempTableSchemaMigrationStage = [
3268  'default' => [],
3269  'type' => 'map',
3270  ];
3271 
3272  // endregion -- End of DB settings
3273 
3274  /***************************************************************************/
3275  // region Content handlers and storage
3286  public const ContentHandlers = [
3287  'default' =>
3288  [
3289  // the usual case
3291  'class' => WikitextContentHandler::class,
3292  'services' => [
3293  'TitleFactory',
3294  'ParserFactory',
3295  'GlobalIdGenerator',
3296  'LanguageNameUtils',
3297  'MagicWordFactory',
3298  'ParsoidParserFactory',
3299  ],
3300  ],
3301  // dumb version, no syntax highlighting
3302  CONTENT_MODEL_JAVASCRIPT => JavaScriptContentHandler::class,
3303  // simple implementation, for use by extensions, etc.
3304  CONTENT_MODEL_JSON => JsonContentHandler::class,
3305  // dumb version, no syntax highlighting
3306  CONTENT_MODEL_CSS => CssContentHandler::class,
3307  // plain text, for use by extensions, etc.
3308  CONTENT_MODEL_TEXT => TextContentHandler::class,
3309  // fallback for unknown models, from imports or extensions that were removed
3310  CONTENT_MODEL_UNKNOWN => FallbackContentHandler::class,
3311  ],
3312  'type' => 'map',
3313  ];
3314 
3326  public const NamespaceContentModels = [
3327  'default' => [],
3328  'type' => 'map',
3329  ];
3330 
3342  public const ContentHandlerTextFallback = [
3343  'default' => 'ignore',
3344  'deprecated' => 'since 1.37',
3345  ];
3346 
3362  public const TextModelsToParse = [
3363  'default' => [
3364  CONTENT_MODEL_WIKITEXT, // Just for completeness, wikitext will always be parsed.
3365  CONTENT_MODEL_JAVASCRIPT, // Make categories etc work, people put them into comments.
3366  CONTENT_MODEL_CSS, // Make categories etc work, people put them into comments.
3367  ],
3368  'type' => 'list',
3369  ];
3370 
3377  public const CompressRevisions = [
3378  'default' => false,
3379  ];
3380 
3390  public const ExternalStores = [
3391  'default' => [],
3392  'type' => 'list',
3393  ];
3394 
3414  public const ExternalServers = [
3415  'default' => [],
3416  'type' => 'map',
3417  ];
3418 
3431  public const DefaultExternalStore = [
3432  'default' => false,
3433  'type' => 'list|false',
3434  ];
3435 
3442  public const RevisionCacheExpiry = [
3443  'default' => 86400 * 7,
3444  'type' => 'integer',
3445  ];
3446 
3453  public const PageLanguageUseDB = [
3454  'default' => false,
3455  'type' => 'boolean',
3456  ];
3457 
3470  public const DiffEngine = [
3471  'default' => null,
3472  'type' => '?string',
3473  ];
3474 
3478  public const ExternalDiffEngine = [
3479  'default' => false,
3480  'type' => 'string|false',
3481  ];
3482 
3483  // endregion -- end of Content handlers and storage
3484 
3485  /***************************************************************************/
3486  // region Performance hacks and limits
3498  public const RequestTimeLimit = [
3499  'default' => null,
3500  'type' => '?integer',
3501  ];
3502 
3512  public const TransactionalTimeLimit = [
3513  'default' => 120,
3514  ];
3515 
3530  public const CriticalSectionTimeLimit = [
3531  'default' => 180.0,
3532  'type' => 'float',
3533  ];
3534 
3538  public const MiserMode = [
3539  'default' => false,
3540  ];
3541 
3545  public const DisableQueryPages = [
3546  'default' => false,
3547  ];
3548 
3552  public const QueryCacheLimit = [
3553  'default' => 1000,
3554  ];
3555 
3559  public const WantedPagesThreshold = [
3560  'default' => 1,
3561  ];
3562 
3566  public const AllowSlowParserFunctions = [
3567  'default' => false,
3568  ];
3569 
3573  public const AllowSchemaUpdates = [
3574  'default' => true,
3575  ];
3576 
3580  public const MaxArticleSize = [
3581  'default' => 2048,
3582  ];
3583 
3588  public const MemoryLimit = [
3589  'default' => '50M',
3590  ];
3591 
3635  public const PoolCounterConf = [
3636  'default' => null,
3637  'type' => '?map',
3638  ];
3639 
3652  public const PoolCountClientConf = [
3653  'default' => [
3654  'servers' => [
3655  '127.0.0.1'
3656  ],
3657  'timeout' => 0.1,
3658  ],
3659  'type' => 'map',
3660  ];
3661 
3669  public const MaxUserDBWriteDuration = [
3670  'default' => false,
3671  'type' => 'integer|false',
3672  ];
3673 
3681  public const MaxJobDBWriteDuration = [
3682  'default' => false,
3683  'type' => 'integer|false',
3684  ];
3685 
3690  public const LinkHolderBatchSize = [
3691  'default' => 1000,
3692  ];
3693 
3697  public const MaximumMovedPages = [
3698  'default' => 100,
3699  ];
3700 
3713  public const ForceDeferredUpdatesPreSend = [
3714  'default' => false,
3715  ];
3716 
3726  public const MultiShardSiteStats = [
3727  'default' => false,
3728  'type' => 'boolean',
3729  ];
3730 
3731  // endregion -- end performance hacks
3732 
3733  /***************************************************************************/
3734  // region Cache settings
3745  public const CacheDirectory = [
3746  'default' => false,
3747  ];
3748 
3772  public const MainCacheType = [
3773  'default' => CACHE_NONE,
3774  ];
3775 
3782  public const MessageCacheType = [
3783  'default' => CACHE_ANYTHING,
3784  ];
3785 
3811  public const ParserCacheType = [
3812  'default' => CACHE_ANYTHING,
3813  ];
3814 
3822  public const SessionCacheType = [
3823  'default' => CACHE_ANYTHING,
3824  ];
3825 
3834  public const LanguageConverterCacheType = [
3835  'default' => CACHE_ANYTHING,
3836  ];
3837 
3842  public const StatsCacheType = [
3843  'default' => CACHE_ANYTHING,
3844  ];
3845 
3910  public const ObjectCaches = [
3911  'default' => [
3912  CACHE_NONE => [ 'class' => EmptyBagOStuff::class, 'reportDupes' => false ],
3913  CACHE_DB => [ 'class' => SqlBagOStuff::class, 'loggroup' => 'SQLBagOStuff' ],
3914 
3915  CACHE_ANYTHING => [ 'factory' => 'ObjectCache::newAnything' ],
3916  CACHE_ACCEL => [ 'factory' => 'ObjectCache::getLocalServerInstance' ],
3917 
3918  'db-replicated' => [
3919  'class' => ReplicatedBagOStuff::class,
3920  'readFactory' => [
3921  'factory' => 'ObjectCache::newFromParams',
3922  'args' => [ [ 'class' => SqlBagOStuff::class, 'replicaOnly' => true ] ]
3923  ],
3924  'writeFactory' => [
3925  'factory' => 'ObjectCache::newFromParams',
3926  'args' => [ [ 'class' => SqlBagOStuff::class, 'replicaOnly' => false ] ]
3927  ],
3928  'loggroup' => 'SQLBagOStuff',
3929  'reportDupes' => false
3930  ],
3931  'memcached-php' => [ 'class' => MemcachedPhpBagOStuff::class, 'loggroup' => 'memcached' ],
3932  'memcached-pecl' => [ 'class' => MemcachedPeclBagOStuff::class, 'loggroup' => 'memcached' ],
3933  'hash' => [ 'class' => HashBagOStuff::class, 'reportDupes' => false ],
3934 
3935  // Deprecated since 1.35.
3936  // - To configure a wg*CacheType variable to use the local server cache,
3937  // use CACHE_ACCEL instead, which will select these automatically.
3938  // - To access the object for the local server cache at run-time,
3939  // use MediaWikiServices::getLocalServerObjectCache()
3940  // instead of e.g. ObjectCache::getInstance( 'apcu' ).
3941  // - To instantiate a new one of these explicitly, do so directly
3942  // by using `new APCUBagOStuff( [ … ] )`
3943  // - To instantiate a new one of these including auto-detection and fallback,
3944  // use ObjectCache::makeLocalServerCache().
3945  'apc' => [ 'class' => APCUBagOStuff::class, 'reportDupes' => false ],
3946  'apcu' => [ 'class' => APCUBagOStuff::class, 'reportDupes' => false ],
3947  'wincache' => [ 'class' => WinCacheBagOStuff::class, 'reportDupes' => false ],
3948  ],
3949  'type' => 'map',
3950  ];
3951 
3959  public const WANObjectCache = [
3960  'default' => [],
3961  'type' => 'map',
3962  ];
3963 
3992  public const MainStash = [
3993  'default' => 'db-replicated',
3994  ];
3995 
4024  public const ParsoidCacheConfig = [
4025  'type' => 'object',
4026  'properties' => [
4027  'StashType' => [ 'type' => 'int|string|null', 'default' => null ],
4028  'StashDuration' => [ 'type' => 'int', 'default' => 24 * 60 * 60 ],
4029  'CacheThresholdTime' => [ 'type' => 'float', 'default' => 0.0 ],
4030  'WarmParsoidParserCache' => [ 'type' => 'bool', 'default' => false ],
4031  ]
4032  ];
4033 
4049  public const ChronologyProtectorStash = [
4050  'default' => null,
4051  'type' => '?string',
4052  ];
4053 
4059  public const ParserCacheExpireTime = [
4060  'default' => 60 * 60 * 24,
4061  ];
4062 
4068  public const OldRevisionParserCacheExpireTime = [
4069  'default' => 60 * 60,
4070  ];
4071 
4075  public const ObjectCacheSessionExpiry = [
4076  'default' => 60 * 60,
4077  ];
4078 
4091  public const PHPSessionHandling = [
4092  'default' => 'enable',
4093  'type' => 'string',
4094  ];
4095 
4103  public const SuspiciousIpExpiry = [
4104  'default' => false,
4105  'type' => 'integer|false',
4106  ];
4107 
4113  public const SessionPbkdf2Iterations = [
4114  'default' => 10001,
4115  ];
4116 
4120  public const MemCachedServers = [
4121  'default' => [ '127.0.0.1:11211', ],
4122  'type' => 'list',
4123  ];
4124 
4129  public const MemCachedPersistent = [
4130  'default' => false,
4131  ];
4132 
4136  public const MemCachedTimeout = [
4137  'default' => 500000,
4138  ];
4139 
4151  public const UseLocalMessageCache = [
4152  'default' => false,
4153  ];
4154 
4162  public const AdaptiveMessageCache = [
4163  'default' => false,
4164  ];
4165 
4197  public const LocalisationCacheConf = [
4198  'properties' => [
4199  'class' => [ 'type' => 'string', 'default' => LocalisationCache::class ],
4200  'store' => [ 'type' => 'string', 'default' => 'detect' ],
4201  'storeClass' => [ 'type' => 'false|string', 'default' => false ],
4202  'storeDirectory' => [ 'type' => 'false|string', 'default' => false ],
4203  'storeServer' => [ 'type' => 'object', 'default' => [] ],
4204  'forceRecache' => [ 'type' => 'bool', 'default' => false ],
4205  'manualRecache' => [ 'type' => 'bool', 'default' => false ],
4206  ],
4207  'type' => 'object',
4208  ];
4209 
4213  public const CachePages = [
4214  'default' => true,
4215  ];
4216 
4226  public const CacheEpoch = [
4227  'default' => '20030516000000',
4228  ];
4229 
4234  public const GitInfoCacheDirectory = [
4235  'default' => false,
4236  ];
4237 
4243  public const UseFileCache = [
4244  'default' => false,
4245  ];
4246 
4253  public const FileCacheDepth = [
4254  'default' => 2,
4255  ];
4256 
4261  public const RenderHashAppend = [
4262  'default' => '',
4263  ];
4264 
4274  public const EnableSidebarCache = [
4275  'default' => false,
4276  ];
4277 
4281  public const SidebarCacheExpiry = [
4282  'default' => 86400,
4283  ];
4284 
4291  public const UseGzip = [
4292  'default' => false,
4293  ];
4294 
4304  public const InvalidateCacheOnLocalSettingsChange = [
4305  'default' => true,
4306  ];
4307 
4322  public const ExtensionInfoMTime = [
4323  'default' => false,
4324  'type' => 'integer|false',
4325  ];
4326 
4333  public const EnableRemoteBagOStuffTests = [
4334  'default' => false,
4335  ];
4336 
4337  // endregion -- end of cache settings
4338 
4339  /***************************************************************************/
4340  // region HTTP proxy (CDN) settings
4359  public const UseCdn = [
4360  'default' => false,
4361  ];
4362 
4371  public const VaryOnXFP = [
4372  'default' => false,
4373  ];
4374 
4384  public const InternalServer = [
4385  'default' => false,
4386  ];
4387 
4397  public const CdnMaxAge = [
4398  'default' => 18000,
4399  ];
4400 
4407  public const CdnMaxageLagged = [
4408  'default' => 30,
4409  ];
4410 
4417  public const CdnMaxageStale = [
4418  'default' => 10,
4419  ];
4420 
4436  public const CdnReboundPurgeDelay = [
4437  'default' => 0,
4438  ];
4439 
4446  public const CdnMaxageSubstitute = [
4447  'default' => 60,
4448  ];
4449 
4455  public const ForcedRawSMaxage = [
4456  'default' => 300,
4457  ];
4458 
4469  public const CdnServers = [
4470  'default' => [],
4471  'type' => 'map',
4472  ];
4473 
4482  public const CdnServersNoPurge = [
4483  'default' => [],
4484  'type' => 'map',
4485  ];
4486 
4507  public const SquidPurgeUseHostHeader = [
4508  'default' => true,
4509  'deprecated' => 'since 1.33',
4510  ];
4511 
4560  public const HTCPRouting = [
4561  'default' => [],
4562  'type' => 'map',
4563  ];
4564 
4570  public const HTCPMulticastTTL = [
4571  'default' => 1,
4572  ];
4573 
4577  public const UsePrivateIPs = [
4578  'default' => false,
4579  ];
4580 
4592  public const CdnMatchParameterOrder = [
4593  'default' => true,
4594  ];
4595 
4596  // endregion -- end of HTTP proxy settings
4597 
4598  /***************************************************************************/
4599  // region Language, regional and character encoding settings
4619  public const LanguageCode = [
4620  'default' => 'en',
4621  ];
4622 
4634  public const GrammarForms = [
4635  'default' => [],
4636  'type' => 'map',
4637  ];
4638 
4642  public const InterwikiMagic = [
4643  'default' => true,
4644  ];
4645 
4649  public const HideInterlanguageLinks = [
4650  'default' => false,
4651  ];
4652 
4673  public const ExtraInterlanguageLinkPrefixes = [
4674  'default' => [],
4675  'type' => 'list',
4676  ];
4677 
4685  public const InterlanguageLinkCodeMap = [
4686  'default' => [],
4687  'type' => 'map',
4688  ];
4689 
4693  public const ExtraLanguageNames = [
4694  'default' => [],
4695  'type' => 'map',
4696  ];
4697 
4712  public const ExtraLanguageCodes = [
4713  'default' => [
4714  'bh' => 'bho',
4715  'no' => 'nb',
4716  'simple' => 'en',
4717  ],
4718  'type' => 'map',
4719  ];
4720 
4729  public const DummyLanguageCodes = [
4730  'default' => [],
4731  'type' => 'map',
4732  ];
4733 
4741  public const AllUnicodeFixes = [
4742  'default' => false,
4743  ];
4744 
4755  public const LegacyEncoding = [
4756  'default' => false,
4757  ];
4758 
4763  public const AmericanDates = [
4764  'default' => false,
4765  ];
4766 
4771  public const TranslateNumerals = [
4772  'default' => true,
4773  ];
4774 
4780  public const UseDatabaseMessages = [
4781  'default' => true,
4782  ];
4783 
4787  public const MaxMsgCacheEntrySize = [
4788  'default' => 10000,
4789  ];
4790 
4794  public const DisableLangConversion = [
4795  'default' => false,
4796  ];
4797 
4801  public const DisableTitleConversion = [
4802  'default' => false,
4803  ];
4804 
4809  public const DefaultLanguageVariant = [
4810  'default' => false,
4811  ];
4812 
4817  public const UsePigLatinVariant = [
4818  'default' => false,
4819  ];
4820 
4831  public const DisabledVariants = [
4832  'default' => [],
4833  'type' => 'map',
4834  ];
4835 
4854  public const VariantArticlePath = [
4855  'default' => false,
4856  ];
4857 
4863  public const LoginLanguageSelector = [
4864  'default' => false,
4865  ];
4866 
4887  public const ForceUIMsgAsContentMsg = [
4888  'default' => [],
4889  'type' => 'map',
4890  ];
4891 
4904  public const RawHtmlMessages = [
4905  'default' => [
4906  'copyright',
4907  'history_copyright',
4908  'googlesearch',
4909  'feedback-terms',
4910  'feedback-termsofuse',
4911  ],
4912  'type' => 'list',
4913  'items' => [ 'type' => 'string', ],
4914  ];
4915 
4940  public const Localtimezone = [
4941  'dynamicDefault' => true,
4942  ];
4943 
4944  public static function getDefaultLocaltimezone(): string {
4945  // This defaults to the `date.timezone` value of the PHP INI option. If this option is not set,
4946  // it falls back to UTC.
4947  $localtimezone = date_default_timezone_get();
4948  if ( !$localtimezone ) {
4949  // Make doubly sure we have a valid time zone, even if date_default_timezone_get()
4950  // returned garbage.
4951  $localtimezone = 'UTC';
4952  }
4953 
4954  return $localtimezone;
4955  }
4956 
4966  public const LocalTZoffset = [
4967  'dynamicDefault' => [ 'use' => [ 'Localtimezone' ] ]
4968  ];
4969 
4970  public static function getDefaultLocalTZoffset( $localtimezone ): int {
4971  // NOTE: Extra fallback, in case $localtimezone is ''.
4972  // Many extsing LocalSettings files have $wgLocaltimezone = ''
4973  // in them, erroneously generated by the installer.
4974  $localtimezone = $localtimezone ?: self::getDefaultLocaltimezone();
4975 
4976  $offset = ( new DateTimeZone( $localtimezone ) )->getOffset( new DateTime() );
4977  return (int)( $offset / 60 );
4978  }
4979 
4988  public const OverrideUcfirstCharacters = [
4989  'default' => [],
4990  'type' => 'map',
4991  ];
4992 
4993  // endregion -- End of language/charset settings
4994 
4995  /***************************************************************************/
4996  // region Output format and skin settings
5002  public const MimeType = [
5003  'default' => 'text/html',
5004  ];
5005 
5015  public const Html5Version = [
5016  'default' => null,
5017  ];
5018 
5028  public const HTMLFormAllowTableFormat = [
5029  'default' => true,
5030  ];
5031 
5040  public const UseMediaWikiUIEverywhere = [
5041  'default' => false,
5042  ];
5043 
5051  public const EditSubmitButtonLabelPublish = [
5052  'default' => false,
5053  ];
5054 
5071  public const XhtmlNamespaces = [
5072  'default' => [],
5073  'type' => 'map',
5074  ];
5075 
5083  public const SiteNotice = [
5084  'default' => '',
5085  ];
5086 
5099  public const BrowserFormatDetection = [
5100  'default' => 'telephone=no',
5101  'type' => 'string',
5102  ];
5103 
5112  public const SkinMetaTags = [
5113  'default' => [],
5114  'type' => 'map',
5115  ];
5116 
5121  public const DefaultSkin = [
5122  'default' => 'vector-2022',
5123  ];
5124 
5130  public const FallbackSkin = [
5131  'default' => 'fallback',
5132  ];
5133 
5144  public const SkipSkins = [
5145  'default' => [],
5146  'type' => 'map',
5147  ];
5148 
5160  public const ResourceLoaderClientPreferences = [
5161  'default' => false,
5162  ];
5163 
5167  public const DisableOutputCompression = [
5168  'default' => false,
5169  ];
5170 
5200  public const FragmentMode = [
5201  'default' => [ 'html5', 'legacy', ],
5202  'type' => 'list',
5203  ];
5204 
5213  public const ExternalInterwikiFragmentMode = [
5214  'default' => 'legacy',
5215  ];
5216 
5248  public const FooterIcons = [
5249  'default' => [
5250  "copyright" => [
5251  "copyright" => [], // placeholder for the built in copyright icon
5252  ],
5253  "poweredby" => [
5254  "mediawiki" => [
5255  // Defaults to point at
5256  // "$wgResourceBasePath/resources/assets/poweredby_mediawiki_88x31.png"
5257  // plus srcset for 1.5x, 2x resolution variants.
5258  "src" => null,
5259  "url" => "https://www.mediawiki.org/",
5260  "alt" => "Powered by MediaWiki",
5261  ]
5262  ],
5263  ],
5264  'type' => 'map',
5265  ];
5266 
5274  public const UseCombinedLoginLink = [
5275  'default' => false,
5276  ];
5277 
5281  public const Edititis = [
5282  'default' => false,
5283  ];
5284 
5296  public const Send404Code = [
5297  'default' => true,
5298  ];
5299 
5310  public const ShowRollbackEditCount = [
5311  'default' => 10,
5312  ];
5313 
5320  public const EnableCanonicalServerLink = [
5321  'default' => false,
5322  ];
5323 
5337  public const InterwikiLogoOverride = [
5338  'default' => [],
5339  'type' => 'list',
5340  'items' => [ 'type' => 'string', ],
5341  ];
5342 
5343  // endregion -- End of output format settings
5344 
5345  /***************************************************************************/
5346  // region ResourceLoader settings
5356  public const MangleFlashPolicy = [
5357  'default' => true,
5358  'obsolete' => 'Since 1.39; no longer has any effect.',
5359  'description' => 'Has been emitting warnings since 1.39 (LTS). ' .
5360  'Can be removed completely in 1.44, assuming 1.43 is an LTS release.'
5361  ];
5362 
5682  public const ResourceModules = [
5683  'default' => [],
5684  'type' => 'map',
5685  ];
5686 
5781  public const ResourceModuleSkinStyles = [
5782  'default' => [],
5783  'type' => 'map',
5784  ];
5785 
5797  public const ResourceLoaderSources = [
5798  'default' => [],
5799  'type' => 'map',
5800  ];
5801 
5807  public const ResourceBasePath = [
5808  'default' => null,
5809  'dynamicDefault' => [ 'use' => [ 'ScriptPath' ] ]
5810  ];
5811 
5816  public static function getDefaultResourceBasePath( $scriptPath ): string {
5817  return $scriptPath;
5818  }
5819 
5832  public const ResourceLoaderMaxage = [
5833  'default' => [],
5834  'type' => 'map',
5835  ];
5836 
5843  public const ResourceLoaderUseObjectCacheForDeps = [
5844  'default' => false,
5845  ];
5846 
5852  public const ResourceLoaderDebug = [
5853  'default' => false,
5854  ];
5855 
5868  public const ResourceLoaderMaxQueryLength = [
5869  'default' => false,
5870  'type' => 'integer|false',
5871  ];
5872 
5880  public const ResourceLoaderValidateJS = [
5881  'default' => true,
5882  ];
5883 
5892  public const ResourceLoaderEnableJSProfiler = [
5893  'default' => false,
5894  ];
5895 
5900  public const ResourceLoaderStorageEnabled = [
5901  'default' => true,
5902  ];
5903 
5910  public const ResourceLoaderStorageVersion = [
5911  'default' => 1,
5912  ];
5913 
5925  public const AllowSiteCSSOnRestrictedPages = [
5926  'default' => false,
5927  ];
5928 
5939  public const VueDevelopmentMode = [
5940  'default' => false,
5941  ];
5942 
5943  // endregion -- End of ResourceLoader settings
5944 
5945  /***************************************************************************/
5946  // region Page titles and redirects
5953  public const MetaNamespace = [
5954  'default' => false,
5955  'dynamicDefault' => [ 'use' => [ 'Sitename' ] ]
5956  ];
5957 
5962  public static function getDefaultMetaNamespace( $sitename ): string {
5963  return str_replace( ' ', '_', $sitename );
5964  }
5965 
5973  public const MetaNamespaceTalk = [
5974  'default' => false,
5975  ];
5976 
5983  public const CanonicalNamespaceNames = [
5984  'default' => NamespaceInfo::CANONICAL_NAMES,
5985  'type' => 'map',
5986  ];
5987 
6014  public const ExtraNamespaces = [
6015  'default' => [],
6016  'type' => 'map',
6017  ];
6018 
6027  public const ExtraGenderNamespaces = [
6028  'default' => [],
6029  'type' => 'map',
6030  ];
6031 
6054  public const NamespaceAliases = [
6055  'default' => [],
6056  'type' => 'map',
6057  ];
6058 
6083  public const LegalTitleChars = [
6084  'default' => ' %!"$&\'()*,\\-.\\/0-9:;=?@A-Z\\\\^_`a-z~\\x80-\\xFF+',
6085  ];
6086 
6094  public const CapitalLinks = [
6095  'default' => true,
6096  ];
6097 
6112  public const CapitalLinkOverrides = [
6113  'default' => [],
6114  'type' => 'map',
6115  ];
6116 
6121  public const NamespacesWithSubpages = [
6122  'default' => [
6123  NS_TALK => true,
6124  NS_USER => true,
6125  NS_USER_TALK => true,
6126  NS_PROJECT => true,
6127  NS_PROJECT_TALK => true,
6128  NS_FILE_TALK => true,
6129  NS_MEDIAWIKI => true,
6130  NS_MEDIAWIKI_TALK => true,
6131  NS_TEMPLATE => true,
6132  NS_TEMPLATE_TALK => true,
6133  NS_HELP => true,
6134  NS_HELP_TALK => true,
6136  ],
6137  'type' => 'map',
6138  ];
6139 
6146  public const ContentNamespaces = [
6147  'default' => [ NS_MAIN ],
6148  'type' => 'list',
6149  ];
6150 
6159  public const ShortPagesNamespaceExclusions = [
6160  'default' => [],
6161  'type' => 'list',
6162  ];
6163 
6172  public const ExtraSignatureNamespaces = [
6173  'default' => [],
6174  'type' => 'list',
6175  ];
6176 
6188  public const InvalidRedirectTargets = [
6189  'default' => [ 'Filepath', 'Mypage', 'Mytalk', 'Redirect', 'Mylog' ],
6190  'type' => 'list',
6191  ];
6192 
6201  public const DisableHardRedirects = [
6202  'default' => false,
6203  ];
6204 
6210  public const FixDoubleRedirects = [
6211  'default' => false,
6212  ];
6213 
6214  // endregion -- End of title and interwiki settings
6215 
6216  /***************************************************************************/
6217  // region Interwiki links and sites
6226  public const LocalInterwikis = [
6227  'default' => [],
6228  'type' => 'list',
6229  ];
6230 
6234  public const InterwikiExpiry = [
6235  'default' => 10800,
6236  ];
6237 
6258  public const InterwikiCache = [
6259  'default' => false,
6260  'type' => 'false|map',
6261  'mergeStrategy' => 'replace',
6262  ];
6263 
6271  public const InterwikiScopes = [
6272  'default' => 3,
6273  ];
6274 
6278  public const InterwikiFallbackSite = [
6279  'default' => 'wiki',
6280  ];
6281 
6298  public const RedirectSources = [
6299  'default' => false,
6300  ];
6301 
6307  public const SiteTypes = [
6308  'default' => [ 'mediawiki' => MediaWikiSite::class, ],
6309  'type' => 'map',
6310  ];
6311 
6312  // endregion -- Interwiki links and sites
6313 
6314  /***************************************************************************/
6315  // region Parser settings
6323  public const MaxTocLevel = [
6324  'default' => 999,
6325  ];
6326 
6331  public const MaxPPNodeCount = [
6332  'default' => 1000000,
6333  ];
6334 
6342  public const MaxTemplateDepth = [
6343  'default' => 100,
6344  ];
6345 
6349  public const MaxPPExpandDepth = [
6350  'default' => 100,
6351  ];
6352 
6363  public const UrlProtocols = [
6364  'default' => [
6365  'bitcoin:', 'ftp://', 'ftps://', 'geo:', 'git://', 'gopher://', 'http://',
6366  'https://', 'irc://', 'ircs://', 'magnet:', 'mailto:', 'matrix:', 'mms://',
6367  'news:', 'nntp://', 'redis://', 'sftp://', 'sip:', 'sips:', 'sms:',
6368  'ssh://', 'svn://', 'tel:', 'telnet://', 'urn:', 'worldwind://', 'xmpp:',
6369  '//',
6370  ],
6371  'type' => 'list',
6372  ];
6373 
6377  public const CleanSignatures = [
6378  'default' => true,
6379  ];
6380 
6384  public const AllowExternalImages = [
6385  'default' => false,
6386  ];
6387 
6402  public const AllowExternalImagesFrom = [
6403  'default' => '',
6404  ];
6405 
6417  public const EnableImageWhitelist = [
6418  'default' => false,
6419  ];
6420 
6432  public const AllowImageTag = [
6433  'default' => false,
6434  'deprecated' => 'since 1.35; register an extension tag named <img> instead.',
6435  ];
6436 
6455  public const TidyConfig = [
6456  'default' => [],
6457  'type' => 'map',
6458  ];
6459 
6468  public const ParsoidSettings = [
6469  'default' => [
6470  'useSelser' => true,
6471  ],
6472  'type' => 'map',
6473  ];
6474 
6482  public const ParserEnableLegacyMediaDOM = [
6483  'default' => false,
6484  ];
6485 
6494  public const UseContentMediaStyles = [
6495  'default' => false,
6496  ];
6497 
6504  public const RawHtml = [
6505  'default' => false,
6506  ];
6507 
6517  public const ExternalLinkTarget = [
6518  'default' => false,
6519  ];
6520 
6527  public const NoFollowLinks = [
6528  'default' => true,
6529  ];
6530 
6536  public const NoFollowNsExceptions = [
6537  'default' => [],
6538  'type' => 'list',
6539  ];
6540 
6554  public const NoFollowDomainExceptions = [
6555  'default' => [ 'mediawiki.org', ],
6556  'type' => 'list',
6557  ];
6558 
6563  public const RegisterInternalExternals = [
6564  'default' => false,
6565  ];
6566 
6570  public const AllowDisplayTitle = [
6571  'default' => true,
6572  ];
6573 
6579  public const RestrictDisplayTitle = [
6580  'default' => true,
6581  ];
6582 
6587  public const ExpensiveParserFunctionLimit = [
6588  'default' => 100,
6589  ];
6590 
6595  public const PreprocessorCacheThreshold = [
6596  'default' => 1000,
6597  ];
6598 
6602  public const EnableScaryTranscluding = [
6603  'default' => false,
6604  ];
6605 
6611  public const TranscludeCacheExpiry = [
6612  'default' => 3600,
6613  ];
6614 
6621  public const EnableMagicLinks = [
6622  'default' => [
6623  'ISBN' => false,
6624  'PMID' => false,
6625  'RFC' => false,
6626  ],
6627  'type' => 'map',
6628  ];
6629 
6630  // endregion -- end of parser settings
6631 
6632  /***************************************************************************/
6633  // region Statistics and content analysis
6652  public const ArticleCountMethod = [
6653  'default' => 'link',
6654  ];
6655 
6664  public const ActiveUserDays = [
6665  'default' => 30,
6666  ];
6667 
6680  public const LearnerEdits = [
6681  'default' => 10,
6682  ];
6683 
6689  public const LearnerMemberSince = [
6690  'default' => 4,
6691  ];
6692 
6698  public const ExperiencedUserEdits = [
6699  'default' => 500,
6700  ];
6701 
6707  public const ExperiencedUserMemberSince = [
6708  'default' => 30,
6709  ];
6710 
6729  public const ManualRevertSearchRadius = [
6730  'default' => 15,
6731  'type' => 'integer',
6732  ];
6733 
6746  public const RevertedTagMaxDepth = [
6747  'default' => 15,
6748  'type' => 'integer',
6749  ];
6750 
6751  // endregion -- End of statistics and content analysis
6752 
6753  /***************************************************************************/
6754  // region User accounts, authentication
6763  public const CentralIdLookupProviders = [
6764  'default' => [
6765  'local' => [
6766  'class' => LocalIdLookup::class,
6767  'services' => [
6768  'MainConfig',
6769  'DBLoadBalancer',
6770  ]
6771  ]
6772  ],
6773  'type' => 'map',
6774  ];
6775 
6779  public const CentralIdLookupProvider = [
6780  'default' => 'local',
6781  'type' => 'string',
6782  ];
6783 
6849  public const PasswordPolicy = [
6850  'default' => [
6851  'policies' => [
6852  'bureaucrat' => [
6853  'MinimalPasswordLength' => 10,
6854  'MinimumPasswordLengthToLogin' => 1,
6855  ],
6856  'sysop' => [
6857  'MinimalPasswordLength' => 10,
6858  'MinimumPasswordLengthToLogin' => 1,
6859  ],
6860  'interface-admin' => [
6861  'MinimalPasswordLength' => 10,
6862  'MinimumPasswordLengthToLogin' => 1,
6863  ],
6864  'bot' => [
6865  'MinimalPasswordLength' => 10,
6866  'MinimumPasswordLengthToLogin' => 1,
6867  ],
6868  'default' => [
6869  'MinimalPasswordLength' => [ 'value' => 8, 'suggestChangeOnLogin' => true ],
6870  'PasswordCannotBeSubstringInUsername' => [
6871  'value' => true,
6872  'suggestChangeOnLogin' => true
6873  ],
6874  'PasswordCannotMatchDefaults' => [ 'value' => true, 'suggestChangeOnLogin' => true ],
6875  'MaximalPasswordLength' => [ 'value' => 4096, 'suggestChangeOnLogin' => true ],
6876  'PasswordNotInCommonList' => [ 'value' => true, 'suggestChangeOnLogin' => true ],
6877  ],
6878  ],
6879  'checks' => [
6880  'MinimalPasswordLength' => 'PasswordPolicyChecks::checkMinimalPasswordLength',
6881  'MinimumPasswordLengthToLogin' => 'PasswordPolicyChecks::checkMinimumPasswordLengthToLogin',
6882  'PasswordCannotBeSubstringInUsername' =>
6883  'PasswordPolicyChecks::checkPasswordCannotBeSubstringInUsername',
6884  'PasswordCannotMatchDefaults' => 'PasswordPolicyChecks::checkPasswordCannotMatchDefaults',
6885  'MaximalPasswordLength' => 'PasswordPolicyChecks::checkMaximalPasswordLength',
6886  'PasswordNotInCommonList' => 'PasswordPolicyChecks::checkPasswordNotInCommonList',
6887  ],
6888  ],
6889  'type' => 'map',
6890  'mergeStrategy' => 'array_replace_recursive',
6891  ];
6892 
6912  public const AuthManagerConfig = [
6913  'default' => null,
6914  'type' => '?map',
6915  ];
6916 
6921  public const AuthManagerAutoConfig = [
6922  'default' => [
6923  'preauth' => [
6924  \MediaWiki\Auth\ThrottlePreAuthenticationProvider::class => [
6925  'class' => \MediaWiki\Auth\ThrottlePreAuthenticationProvider::class,
6926  'sort' => 0,
6927  ],
6928  ],
6929  'primaryauth' => [
6930  // TemporaryPasswordPrimaryAuthenticationProvider should come before
6931  // any other PasswordAuthenticationRequest-based
6932  // PrimaryAuthenticationProvider (or at least any that might return
6933  // FAIL rather than ABSTAIN for a wrong password), or password reset
6934  // won't work right. Do not remove this (or change the key) or
6935  // auto-configuration of other such providers in extensions will
6936  // probably auto-insert themselves in the wrong place.
6937  \MediaWiki\Auth\TemporaryPasswordPrimaryAuthenticationProvider::class => [
6938  'class' => \MediaWiki\Auth\TemporaryPasswordPrimaryAuthenticationProvider::class,
6939  'services' => [
6940  'DBLoadBalancerFactory',
6941  'UserOptionsLookup',
6942  ],
6943  'args' => [ [
6944  // Fall through to LocalPasswordPrimaryAuthenticationProvider
6945  'authoritative' => false,
6946  ] ],
6947  'sort' => 0,
6948  ],
6949  \MediaWiki\Auth\LocalPasswordPrimaryAuthenticationProvider::class => [
6950  'class' => \MediaWiki\Auth\LocalPasswordPrimaryAuthenticationProvider::class,
6951  'services' => [
6952  'DBLoadBalancerFactory',
6953  ],
6954  'args' => [ [
6955  // Last one should be authoritative, or else the user will get
6956  // a less-than-helpful error message (something like "supplied
6957  // authentication info not supported" rather than "wrong
6958  // password") if it too fails.
6959  'authoritative' => true,
6960  ] ],
6961  'sort' => 100,
6962  ],
6963  ],
6964  'secondaryauth' => [
6965  \MediaWiki\Auth\CheckBlocksSecondaryAuthenticationProvider::class => [
6966  'class' => \MediaWiki\Auth\CheckBlocksSecondaryAuthenticationProvider::class,
6967  'sort' => 0,
6968  ],
6969  \MediaWiki\Auth\ResetPasswordSecondaryAuthenticationProvider::class => [
6970  'class' => \MediaWiki\Auth\ResetPasswordSecondaryAuthenticationProvider::class,
6971  'sort' => 100,
6972  ],
6973  // Linking during login is experimental, enable at your own risk - T134952
6974  // MediaWiki\Auth\ConfirmLinkSecondaryAuthenticationProvider::class => [
6975  // 'class' => MediaWiki\Auth\ConfirmLinkSecondaryAuthenticationProvider::class,
6976  // 'sort' => 100,
6977  // ],
6978  \MediaWiki\Auth\EmailNotificationSecondaryAuthenticationProvider::class => [
6979  'class' => \MediaWiki\Auth\EmailNotificationSecondaryAuthenticationProvider::class,
6980  'services' => [
6981  'DBLoadBalancerFactory',
6982  ],
6983  'sort' => 200,
6984  ],
6985  ],
6986  ],
6987  'type' => 'map',
6988  'mergeStrategy' => 'array_plus_2d',
6989  ];
6990 
7001  public const RememberMe = [
7002  'default' => 'choose',
7003  'type' => 'string',
7004  ];
7005 
7043  public const ReauthenticateTime = [
7044  'default' => [ 'default' => 300, ],
7045  'type' => 'map',
7046  'additionalProperties' => [ 'type' => 'integer', ],
7047  ];
7048 
7063  public const AllowSecuritySensitiveOperationIfCannotReauthenticate = [
7064  'default' => [ 'default' => true, ],
7065  'type' => 'map',
7066  'additionalProperties' => [ 'type' => 'boolean', ],
7067  ];
7068 
7079  public const ChangeCredentialsBlacklist = [
7080  'default' => [
7081  \MediaWiki\Auth\TemporaryPasswordAuthenticationRequest::class,
7082  ],
7083  'type' => 'list',
7084  'items' => [ 'type' => 'string', ],
7085  ];
7086 
7097  public const RemoveCredentialsBlacklist = [
7098  'default' => [
7099  \MediaWiki\Auth\PasswordAuthenticationRequest::class,
7100  ],
7101  'type' => 'list',
7102  'items' => [ 'type' => 'string', ],
7103  ];
7104 
7111  public const MinimalPasswordLength = [
7112  'default' => false,
7113  'deprecated' => 'since 1.26, use $wgPasswordPolicy\'s MinimalPasswordLength.',
7114  ];
7115 
7127  public const MaximalPasswordLength = [
7128  'default' => false,
7129  'deprecated' => 'since 1.26, use $wgPasswordPolicy\'s MaximalPasswordLength.',
7130  ];
7131 
7138  public const InvalidPasswordReset = [
7139  'default' => true,
7140  ];
7141 
7150  public const PasswordDefault = [
7151  'default' => 'pbkdf2',
7152  ];
7153 
7181  public const PasswordConfig = [
7182  'default' => [
7183  'A' => [
7184  'class' => MWOldPassword::class,
7185  ],
7186  'B' => [
7187  'class' => MWSaltedPassword::class,
7188  ],
7189  'pbkdf2-legacyA' => [
7190  'class' => LayeredParameterizedPassword::class,
7191  'types' => [
7192  'A',
7193  'pbkdf2',
7194  ],
7195  ],
7196  'pbkdf2-legacyB' => [
7197  'class' => LayeredParameterizedPassword::class,
7198  'types' => [
7199  'B',
7200  'pbkdf2',
7201  ],
7202  ],
7203  'bcrypt' => [
7204  'class' => BcryptPassword::class,
7205  'cost' => 9,
7206  ],
7207  'pbkdf2' => [
7208  'factory' => [ AbstractPbkdf2Password::class, 'newInstance' ],
7209  'algo' => 'sha512',
7210  'cost' => '30000',
7211  'length' => '64',
7212  ],
7213  'argon2' => [
7214  'class' => Argon2Password::class,
7215 
7216  // Algorithm used:
7217  // * 'argon2i' is optimized against side-channel attacks
7218  // * 'argon2id' is optimized against both side-channel and GPU cracking
7219  // * 'auto' to use best available algorithm. If you're using more than one server, be
7220  // careful when you're mixing PHP versions because newer PHP might generate hashes that
7221  // older versions might would not understand.
7222  'algo' => 'auto',
7223 
7224  // The parameters below are the same as options accepted by password_hash().
7225  // Set them to override that function's defaults.
7226  //
7227  // 'memory_cost' => PASSWORD_ARGON2_DEFAULT_MEMORY_COST,
7228  // 'time_cost' => PASSWORD_ARGON2_DEFAULT_TIME_COST,
7229  // 'threads' => PASSWORD_ARGON2_DEFAULT_THREADS,
7230  ],
7231  ],
7232  'type' => 'map',
7233  ];
7234 
7241  public const PasswordResetRoutes = [
7242  'default' => [
7243  'username' => true,
7244  'email' => true,
7245  ],
7246  'type' => 'map',
7247  ];
7248 
7252  public const MaxSigChars = [
7253  'default' => 255,
7254  ];
7255 
7268  public const SignatureValidation = [
7269  'default' => 'warning',
7270  ];
7271 
7278  public const SignatureAllowedLintErrors = [
7279  'default' => [ 'obsolete-tag', ],
7280  'type' => 'list',
7281  ];
7282 
7287  public const MaxNameChars = [
7288  'default' => 255,
7289  ];
7290 
7297  public const ReservedUsernames = [
7298  'default' => [
7299  'MediaWiki default', // Default 'Main Page' and MediaWiki: message pages
7300  'Conversion script', // Used for the old Wikipedia software upgrade
7301  'Maintenance script', // Maintenance scripts which perform editing, image import script
7302  'Template namespace initialisation script', // Used in 1.2->1.3 upgrade
7303  'ScriptImporter', // Default user name used by maintenance/importSiteScripts.php
7304  'Delete page script', // Default user name used by maintenance/deleteBatch.php
7305  'Move page script', // Default user name used by maintenance/deleteBatch.php
7306  'Command line script', // Default user name used by maintenance/undelete.php
7307  'Unknown user', // Used in WikiImporter & RevisionStore for revisions with no author and in User for invalid user id
7308  'msg:double-redirect-fixer', // Automatic double redirect fix
7309  'msg:usermessage-editor', // Default user for leaving user messages
7310  'msg:proxyblocker', // For $wgProxyList and Special:Blockme (removed in 1.22)
7311  'msg:sorbs', // For $wgEnableDnsBlacklist etc.
7312  'msg:spambot_username', // Used by cleanupSpam.php
7313  'msg:autochange-username', // Used by anon category RC entries (parser functions, Lua & purges)
7314  ],
7315  'type' => 'list',
7316  ];
7317 
7325  public const DefaultUserOptions = [
7326  'default' =>
7327  [
7328  'ccmeonemails' => 0,
7329  'date' => 'default',
7330  'diffonly' => 0,
7331  'disablemail' => 0,
7332  'editfont' => 'monospace',
7333  'editondblclick' => 0,
7334  'editsectiononrightclick' => 0,
7335  'email-allow-new-users' => 1,
7336  'enotifminoredits' => 0,
7337  'enotifrevealaddr' => 0,
7338  'enotifusertalkpages' => 1,
7339  'enotifwatchlistpages' => 1,
7340  'extendwatchlist' => 1,
7341  'fancysig' => 0,
7342  'forceeditsummary' => 0,
7343  'gender' => 'unknown',
7344  'hideminor' => 0,
7345  'hidepatrolled' => 0,
7346  'hidecategorization' => 1,
7347  'imagesize' => 2,
7348  'minordefault' => 0,
7349  'newpageshidepatrolled' => 0,
7350  'nickname' => '',
7351  'pst-cssjs' => 1,
7352  'norollbackdiff' => 0,
7353  'previewonfirst' => 0,
7354  'previewontop' => 1,
7355  'rcdays' => 7,
7356  'rcenhancedfilters-disable' => 0,
7357  'rclimit' => 50,
7358  'search-match-redirect' => true,
7359  'search-special-page' => 'Search',
7360  'searchlimit' => 20,
7361  'search-thumbnail-extra-namespaces' => true,
7362  'showhiddencats' => 0,
7363  'shownumberswatching' => 1,
7364  'showrollbackconfirmation' => 0,
7365  'skin' => false,
7366  'thumbsize' => 5,
7367  'underline' => 2,
7368  'uselivepreview' => 0,
7369  'usenewrc' => 1,
7370  'watchcreations' => 1,
7371  'watchdefault' => 1,
7372  'watchdeletion' => 0,
7373  'watchuploads' => 1,
7374  'watchlistdays' => 7,
7375  'watchlisthideanons' => 0,
7376  'watchlisthidebots' => 0,
7377  'watchlisthideliu' => 0,
7378  'watchlisthideminor' => 0,
7379  'watchlisthideown' => 0,
7380  'watchlisthidepatrolled' => 0,
7381  'watchlisthidecategorization' => 1,
7382  'watchlistreloadautomatically' => 0,
7383  'watchlistunwatchlinks' => 0,
7384  'watchmoves' => 0,
7385  'watchrollback' => 0,
7386  'wlenhancedfilters-disable' => 0,
7387  'wllimit' => 250,
7388  'useeditwarning' => 1,
7389  'prefershttps' => 1,
7390  'requireemail' => 0,
7391  'skin-responsive' => 1,
7392  ],
7393  'type' => 'map',
7394  ];
7395 
7399  public const HiddenPrefs = [
7400  'default' => [],
7401  'type' => 'list',
7402  ];
7403 
7410  public const InvalidUsernameCharacters = [
7411  'default' => '@:>=',
7412  ];
7413 
7423  public const UserrightsInterwikiDelimiter = [
7424  'default' => '@',
7425  ];
7426 
7435  public const SecureLogin = [
7436  'default' => false,
7437  ];
7438 
7448  public const AuthenticationTokenVersion = [
7449  'default' => null,
7450  'type' => '?string',
7451  ];
7452 
7462  public const SessionProviders = [
7463  'type' => 'map',
7464  'default' => [
7465  \MediaWiki\Session\CookieSessionProvider::class => [
7466  'class' => \MediaWiki\Session\CookieSessionProvider::class,
7467  'args' => [ [
7468  'priority' => 30,
7469  ] ],
7470  ],
7471  \MediaWiki\Session\BotPasswordSessionProvider::class => [
7472  'class' => \MediaWiki\Session\BotPasswordSessionProvider::class,
7473  'args' => [ [
7474  'priority' => 75,
7475  ] ],
7476  'services' => [
7477  'GrantsInfo'
7478  ],
7479  ],
7480  ],
7481  ];
7482 
7490  public const AllowRequiringEmailForResets = [
7491  'default' => false,
7492  ];
7493 
7545  public const AutoCreateTempUser = [
7546  'properties' => [
7547  'enabled' => [ 'type' => 'bool', 'default' => false ],
7548  'actions' => [ 'type' => 'list', 'default' => [ 'edit' ] ],
7549  'genPattern' => [ 'type' => 'string', 'default' => '*Unregistered $1' ],
7550  'matchPattern' => [ 'type' => 'string', 'default' => '*$1' ],
7551  'reservedPattern' => [ 'type' => 'string|null', 'default' => null ],
7552  'serialProvider' => [ 'type' => 'object', 'default' => [ 'type' => 'local' ] ],
7553  'serialMapping' => [ 'type' => 'object', 'default' => [ 'type' => 'plain-numeric' ] ]
7554  ],
7555  'type' => 'object',
7556  ];
7557 
7558  // endregion -- end user accounts
7559 
7560  /***************************************************************************/
7561  // region User rights, access control and monitoring
7567  public const AutoblockExpiry = [
7568  'default' => 86400,
7569  ];
7570 
7578  public const BlockAllowsUTEdit = [
7579  'default' => true,
7580  ];
7581 
7596  public const BlockCIDRLimit = [
7597  'default' => [
7598  'IPv4' => 16,
7599  'IPv6' => 19,
7600  ],
7601  'type' => 'map',
7602  ];
7603 
7609  public const BlockDisablesLogin = [
7610  'default' => false,
7611  ];
7612 
7618  public const EnablePartialActionBlocks = [
7619  'default' => false,
7620  'type' => 'boolean',
7621  ];
7622 
7642  public const WhitelistRead = [
7643  'default' => false,
7644  ];
7645 
7673  public const WhitelistReadRegexp = [
7674  'default' => false,
7675  ];
7676 
7681  public const EmailConfirmToEdit = [
7682  'default' => false,
7683  ];
7684 
7689  public const HideIdentifiableRedirects = [
7690  'default' => true,
7691  ];
7692 
7717  public const GroupPermissions = [
7718  'type' => 'map',
7719  'additionalProperties' => [
7720  'type' => 'map',
7721  'additionalProperties' => [ 'type' => 'boolean', ],
7722  ],
7723  'mergeStrategy' => 'array_plus_2d',
7724  'default' => [
7725  '*' => [
7726  'createaccount' => true,
7727  'read' => true,
7728  'edit' => true,
7729  'createpage' => true,
7730  'createtalk' => true,
7731  'writeapi' => true,
7732  'viewmywatchlist' => true,
7733  'editmywatchlist' => true,
7734  'viewmyprivateinfo' => true,
7735  'editmyprivateinfo' => true,
7736  'editmyoptions' => true,
7737  ],
7738  'user' => [
7739  'move' => true,
7740  'move-subpages' => true,
7741  'move-rootuserpages' => true,
7742  'move-categorypages' => true,
7743  'movefile' => true,
7744  'read' => true,
7745  'edit' => true,
7746  'createpage' => true,
7747  'createtalk' => true,
7748  'writeapi' => true,
7749  'upload' => true,
7750  'reupload' => true,
7751  'reupload-shared' => true,
7752  'minoredit' => true,
7753  'editmyusercss' => true,
7754  'editmyuserjson' => true,
7755  'editmyuserjs' => true,
7756  'editmyuserjsredirect' => true,
7757  'purge' => true,
7758  'sendemail' => true,
7759  'applychangetags' => true,
7760  'changetags' => true,
7761  'editcontentmodel' => true,
7762  ],
7763  'autoconfirmed' => [
7764  'autoconfirmed' => true,
7765  'editsemiprotected' => true,
7766  ],
7767  'bot' => [
7768  'bot' => true,
7769  'autoconfirmed' => true,
7770  'editsemiprotected' => true,
7771  'nominornewtalk' => true,
7772  'autopatrol' => true,
7773  'suppressredirect' => true,
7774  'apihighlimits' => true,
7775  'writeapi' => true,
7776  ],
7777  'sysop' => [
7778  'block' => true,
7779  'createaccount' => true,
7780  'delete' => true,
7781  'bigdelete' => true,
7782  'deletedhistory' => true,
7783  'deletedtext' => true,
7784  'undelete' => true,
7785  'editinterface' => true,
7786  'editsitejson' => true,
7787  'edituserjson' => true,
7788  'import' => true,
7789  'importupload' => true,
7790  'move' => true,
7791  'move-subpages' => true,
7792  'move-rootuserpages' => true,
7793  'move-categorypages' => true,
7794  'patrol' => true,
7795  'autopatrol' => true,
7796  'protect' => true,
7797  'editprotected' => true,
7798  'rollback' => true,
7799  'upload' => true,
7800  'reupload' => true,
7801  'reupload-shared' => true,
7802  'unwatchedpages' => true,
7803  'autoconfirmed' => true,
7804  'editsemiprotected' => true,
7805  'ipblock-exempt' => true,
7806  'blockemail' => true,
7807  'markbotedits' => true,
7808  'apihighlimits' => true,
7809  'browsearchive' => true,
7810  'noratelimit' => true,
7811  'movefile' => true,
7812  'unblockself' => true,
7813  'suppressredirect' => true,
7814  'mergehistory' => true,
7815  'managechangetags' => true,
7816  'deletechangetags' => true,
7817  ],
7818  'interface-admin' => [
7819  'editinterface' => true,
7820  'editsitecss' => true,
7821  'editsitejson' => true,
7822  'editsitejs' => true,
7823  'editusercss' => true,
7824  'edituserjson' => true,
7825  'edituserjs' => true,
7826  ],
7827  'bureaucrat' => [
7828  'userrights' => true,
7829  'noratelimit' => true,
7830  'renameuser' => true,
7831  ],
7832  'suppress' => [
7833  'hideuser' => true,
7834  'suppressrevision' => true,
7835  'viewsuppressed' => true,
7836  'suppressionlog' => true,
7837  'deleterevision' => true,
7838  'deletelogentry' => true,
7839  ],
7840  ],
7841  ];
7842 
7852  public const RevokePermissions = [
7853  'default' => [],
7854  'type' => 'map',
7855  'mergeStrategy' => 'array_plus_2d',
7856  ];
7857 
7877  public const GroupInheritsPermissions = [
7878  'default' => [],
7879  'type' => 'map',
7880  'additionalProperties' => [ 'type' => 'string', ],
7881  ];
7882 
7886  public const ImplicitGroups = [
7887  'default' => [ '*', 'user', 'autoconfirmed' ],
7888  'type' => 'list',
7889  ];
7890 
7915  public const GroupsAddToSelf = [
7916  'default' => [],
7917  'type' => 'map',
7918  ];
7919 
7923  public const GroupsRemoveFromSelf = [
7924  'default' => [],
7925  'type' => 'map',
7926  ];
7927 
7936  public const RestrictionTypes = [
7937  'default' => [ 'create', 'edit', 'move', 'upload' ],
7938  'type' => 'list',
7939  ];
7940 
7952  public const RestrictionLevels = [
7953  'default' => [ '', 'autoconfirmed', 'sysop' ],
7954  'type' => 'list',
7955  ];
7956 
7966  public const CascadingRestrictionLevels = [
7967  'default' => [ 'sysop', ],
7968  'type' => 'list',
7969  ];
7970 
7983  public const SemiprotectedRestrictionLevels = [
7984  'default' => [ 'autoconfirmed', ],
7985  'type' => 'list',
7986  ];
7987 
7995  public const NamespaceProtection = [
7996  'default' => [],
7997  'type' => 'map',
7998  ];
7999 
8009  public const NonincludableNamespaces = [
8010  'default' => [],
8011  'type' => 'map',
8012  ];
8013 
8037  public const AutoConfirmAge = [
8038  'default' => 0,
8039  ];
8040 
8052  public const AutoConfirmCount = [
8053  'default' => 0,
8054  ];
8055 
8113  public const Autopromote = [
8114  'default' => [
8115  'autoconfirmed' => [ '&',
8116  [ APCOND_EDITCOUNT, null ], // NOTE: null means $wgAutoConfirmCount
8117  [ APCOND_AGE, null ], // NOTE: null means AutoConfirmAge
8118  ],
8119  ],
8120  'type' => 'map',
8121  ];
8122 
8143  public const AutopromoteOnce = [
8144  'default' => [ 'onEdit' => [], ],
8145  'type' => 'map',
8146  ];
8147 
8153  public const AutopromoteOnceLogInRC = [
8154  'default' => true,
8155  ];
8156 
8186  public const AddGroups = [
8187  'default' => [],
8188  'type' => 'map',
8189  ];
8190 
8194  public const RemoveGroups = [
8195  'default' => [],
8196  'type' => 'map',
8197  ];
8198 
8204  public const AvailableRights = [
8205  'default' => [],
8206  'type' => 'list',
8207  ];
8208 
8213  public const DeleteRevisionsLimit = [
8214  'default' => 0,
8215  ];
8216 
8222  public const DeleteRevisionsBatchSize = [
8223  'default' => 1000,
8224  ];
8225 
8235  public const HideUserContribLimit = [
8236  'default' => 1000,
8237  ];
8238 
8264  public const AccountCreationThrottle = [
8265  'default' => [ [
8266  'count' => 0,
8267  'seconds' => 86400,
8268  ] ],
8269  'type' => 'int|list',
8270  ];
8271 
8282  public const SpamRegex = [
8283  'default' => [],
8284  'type' => 'list',
8285  ];
8286 
8290  public const SummarySpamRegex = [
8291  'default' => [],
8292  'type' => 'list',
8293  ];
8294 
8301  public const EnableDnsBlacklist = [
8302  'default' => false,
8303  ];
8304 
8329  public const DnsBlacklistUrls = [
8330  'default' => [ 'http.dnsbl.sorbs.net.', ],
8331  'type' => 'list',
8332  ];
8333 
8342  public const ProxyList = [
8343  'default' => [],
8344  'type' => 'string|list',
8345  ];
8346 
8351  public const ProxyWhitelist = [
8352  'default' => [],
8353  'type' => 'list',
8354  ];
8355 
8363  public const SoftBlockRanges = [
8364  'default' => [],
8365  'type' => 'list',
8366  'items' => [ 'type' => 'string', ],
8367  ];
8368 
8374  public const ApplyIpBlocksToXff = [
8375  'default' => false,
8376  ];
8377 
8419  public const RateLimits = [
8420  'default' => [
8421  // Page edits
8422  'edit' => [
8423  'ip' => [ 8, 60 ],
8424  'newbie' => [ 8, 60 ],
8425  'user' => [ 90, 60 ],
8426  ],
8427  // Page moves
8428  'move' => [
8429  'newbie' => [ 2, 120 ],
8430  'user' => [ 8, 60 ],
8431  ],
8432  // File uploads
8433  'upload' => [
8434  'ip' => [ 8, 60 ],
8435  'newbie' => [ 8, 60 ],
8436  ],
8437  // Page rollbacks
8438  'rollback' => [
8439  'user' => [ 10, 60 ],
8440  'newbie' => [ 5, 120 ]
8441  ],
8442  // Triggering password resets emails
8443  'mailpassword' => [
8444  'ip' => [ 5, 3600 ],
8445  ],
8446  // Emailing other users using MediaWiki
8447  'sendemail' => [
8448  'ip' => [ 5, 86400 ],
8449  'newbie' => [ 5, 86400 ],
8450  'user' => [ 20, 86400 ],
8451  ],
8452  'changeemail' => [
8453  'ip-all' => [ 10, 3600 ],
8454  'user' => [ 4, 86400 ]
8455  ],
8456  // since 1.33 - rate limit email confirmations
8457  'confirmemail' => [
8458  'ip-all' => [ 10, 3600 ],
8459  'user' => [ 4, 86400 ]
8460  ],
8461  // Purging pages
8462  'purge' => [
8463  'ip' => [ 30, 60 ],
8464  'user' => [ 30, 60 ],
8465  ],
8466  // Purges of link tables
8467  'linkpurge' => [
8468  'ip' => [ 30, 60 ],
8469  'user' => [ 30, 60 ],
8470  ],
8471  // Files rendered via thumb.php or thumb_handler.php
8472  'renderfile' => [
8473  'ip' => [ 700, 30 ],
8474  'user' => [ 700, 30 ],
8475  ],
8476  // Same as above but for non-standard thumbnails
8477  'renderfile-nonstandard' => [
8478  'ip' => [ 70, 30 ],
8479  'user' => [ 70, 30 ],
8480  ],
8481  // Stashing edits into cache before save
8482  'stashedit' => [
8483  'ip' => [ 30, 60 ],
8484  'newbie' => [ 30, 60 ],
8485  ],
8486  // Stash base HTML for VE edits
8487  'stashbasehtml' => [
8488  'ip' => [ 5, 60 ],
8489  'newbie' => [ 5, 60 ],
8490  ],
8491  // Adding or removing change tags
8492  'changetags' => [
8493  'ip' => [ 8, 60 ],
8494  'newbie' => [ 8, 60 ],
8495  ],
8496  // Changing the content model of a page
8497  'editcontentmodel' => [
8498  'newbie' => [ 2, 120 ],
8499  'user' => [ 8, 60 ],
8500  ],
8501  ],
8502  'type' => 'map',
8503  'mergeStrategy' => 'array_plus_2d',
8504  ];
8505 
8511  public const RateLimitsExcludedIPs = [
8512  'default' => [],
8513  'type' => 'list',
8514  ];
8515 
8521  public const PutIPinRC = [
8522  'default' => true,
8523  ];
8524 
8529  public const QueryPageDefaultLimit = [
8530  'default' => 50,
8531  ];
8532 
8545  public const PasswordAttemptThrottle = [
8546  'default' => [
8547  // Short term limit
8548  [ 'count' => 5, 'seconds' => 300 ],
8549  // Long term limit. We need to balance the risk
8550  // of somebody using this as a DoS attack to lock someone
8551  // out of their account, and someone doing a brute force attack.
8552  [ 'count' => 150, 'seconds' => 60 * 60 * 48 ],
8553  ],
8554  'type' => 'list',
8555  ];
8556 
8567  public const GrantPermissions = [
8568  'default' => [
8569  'basic' => [
8570  'autocreateaccount' => true,
8571  'autoconfirmed' => true,
8572  'autopatrol' => true,
8573  'editsemiprotected' => true,
8574  'ipblock-exempt' => true,
8575  'nominornewtalk' => true,
8576  'patrolmarks' => true,
8577  'purge' => true,
8578  'read' => true,
8579  'writeapi' => true,
8580  'unwatchedpages' => true,
8581  ],
8582  'highvolume' => [
8583  'bot' => true,
8584  'apihighlimits' => true,
8585  'noratelimit' => true,
8586  'markbotedits' => true,
8587  ],
8588  'import' => [
8589  'import' => true,
8590  'importupload' => true,
8591  ],
8592  'editpage' => [
8593  'edit' => true,
8594  'minoredit' => true,
8595  'applychangetags' => true,
8596  'changetags' => true,
8597  'editcontentmodel' => true,
8598  ],
8599  'editprotected' => [
8600  'edit' => true,
8601  'minoredit' => true,
8602  'applychangetags' => true,
8603  'changetags' => true,
8604  'editcontentmodel' => true,
8605  'editprotected' => true,
8606  ],
8607  'editmycssjs' => [
8608  'edit' => true,
8609  'minoredit' => true,
8610  'applychangetags' => true,
8611  'changetags' => true,
8612  'editcontentmodel' => true,
8613  'editmyusercss' => true,
8614  'editmyuserjson' => true,
8615  'editmyuserjs' => true,
8616  ],
8617  'editmyoptions' => [
8618  'editmyoptions' => true,
8619  'editmyuserjson' => true,
8620  ],
8621  'editinterface' => [
8622  'edit' => true,
8623  'minoredit' => true,
8624  'applychangetags' => true,
8625  'changetags' => true,
8626  'editcontentmodel' => true,
8627  'editinterface' => true,
8628  'edituserjson' => true,
8629  'editsitejson' => true,
8630  ],
8631  'editsiteconfig' => [
8632  'edit' => true,
8633  'minoredit' => true,
8634  'applychangetags' => true,
8635  'changetags' => true,
8636  'editcontentmodel' => true,
8637  'editinterface' => true,
8638  'edituserjson' => true,
8639  'editsitejson' => true,
8640  'editusercss' => true,
8641  'edituserjs' => true,
8642  'editsitecss' => true,
8643  'editsitejs' => true,
8644  ],
8645  'createeditmovepage' => [
8646  'edit' => true,
8647  'minoredit' => true,
8648  'applychangetags' => true,
8649  'changetags' => true,
8650  'editcontentmodel' => true,
8651  'createpage' => true,
8652  'createtalk' => true,
8653  'delete-redirect' => true,
8654  'move' => true,
8655  'move-rootuserpages' => true,
8656  'move-subpages' => true,
8657  'move-categorypages' => true,
8658  'suppressredirect' => true,
8659  ],
8660  'uploadfile' => [
8661  'upload' => true,
8662  'reupload-own' => true,
8663  ],
8664  'uploadeditmovefile' => [
8665  'upload' => true,
8666  'reupload-own' => true,
8667  'reupload' => true,
8668  'reupload-shared' => true,
8669  'upload_by_url' => true,
8670  'movefile' => true,
8671  'suppressredirect' => true,
8672  ],
8673  'patrol' => [
8674  'patrol' => true,
8675  ],
8676  'rollback' => [
8677  'rollback' => true,
8678  ],
8679  'blockusers' => [
8680  'block' => true,
8681  'blockemail' => true,
8682  ],
8683  'viewdeleted' => [
8684  'browsearchive' => true,
8685  'deletedhistory' => true,
8686  'deletedtext' => true,
8687  ],
8688  'viewrestrictedlogs' => [
8689  'suppressionlog' => true,
8690  ],
8691  'delete' => [
8692  'edit' => true,
8693  'minoredit' => true,
8694  'applychangetags' => true,
8695  'changetags' => true,
8696  'editcontentmodel' => true,
8697  'browsearchive' => true,
8698  'deletedhistory' => true,
8699  'deletedtext' => true,
8700  'delete' => true,
8701  'bigdelete' => true,
8702  'deletelogentry' => true,
8703  'deleterevision' => true,
8704  'undelete' => true,
8705  ],
8706  'oversight' => [
8707  'suppressrevision' => true,
8708  'viewsuppressed' => true,
8709  ],
8710  'protect' => [
8711  'edit' => true,
8712  'minoredit' => true,
8713  'applychangetags' => true,
8714  'changetags' => true,
8715  'editcontentmodel' => true,
8716  'editprotected' => true,
8717  'protect' => true,
8718  ],
8719  'viewmywatchlist' => [
8720  'viewmywatchlist' => true,
8721  ],
8722  'editmywatchlist' => [
8723  'editmywatchlist' => true,
8724  ],
8725  'sendemail' => [
8726  'sendemail' => true,
8727  ],
8728  'createaccount' => [
8729  'createaccount' => true,
8730  ],
8731  'privateinfo' => [
8732  'viewmyprivateinfo' => true,
8733  ],
8734  'mergehistory' => [
8735  'mergehistory' => true,
8736  ],
8737  ],
8738  'type' => 'map',
8739  'mergeStrategy' => 'array_plus_2d',
8740  'additionalProperties' => [
8741  'type' => 'map',
8742  'additionalProperties' => [ 'type' => 'boolean', ],
8743  ],
8744  ];
8745 
8749  public const GrantPermissionGroups = [
8750  'default' =>
8751  [
8752  // Hidden grants are implicitly present
8753  'basic' => 'hidden',
8754 
8755  'editpage' => 'page-interaction',
8756  'createeditmovepage' => 'page-interaction',
8757  'editprotected' => 'page-interaction',
8758  'patrol' => 'page-interaction',
8759 
8760  'uploadfile' => 'file-interaction',
8761  'uploadeditmovefile' => 'file-interaction',
8762 
8763  'sendemail' => 'email',
8764 
8765  'viewmywatchlist' => 'watchlist-interaction',
8766  'editviewmywatchlist' => 'watchlist-interaction',
8767 
8768  'editmycssjs' => 'customization',
8769  'editmyoptions' => 'customization',
8770 
8771  'editinterface' => 'administration',
8772  'editsiteconfig' => 'administration',
8773  'rollback' => 'administration',
8774  'blockusers' => 'administration',
8775  'delete' => 'administration',
8776  'viewdeleted' => 'administration',
8777  'viewrestrictedlogs' => 'administration',
8778  'protect' => 'administration',
8779  'oversight' => 'administration',
8780  'createaccount' => 'administration',
8781  'mergehistory' => 'administration',
8782  'import' => 'administration',
8783 
8784  'highvolume' => 'high-volume',
8785 
8786  'privateinfo' => 'private-information',
8787  ],
8788  'type' => 'map',
8789  'additionalProperties' => [ 'type' => 'string', ],
8790  ];
8791 
8795  public const EnableBotPasswords = [
8796  'default' => true,
8797  'type' => 'boolean',
8798  ];
8799 
8805  public const BotPasswordsCluster = [
8806  'default' => false,
8807  'type' => 'string|false',
8808  ];
8809 
8818  public const BotPasswordsDatabase = [
8819  'default' => false,
8820  'type' => 'string|false',
8821  ];
8822 
8823  // endregion -- end of user rights settings
8824 
8825  /***************************************************************************/
8826  // region Security
8832  public const SecretKey = [
8833  'default' => false,
8834  ];
8835 
8841  public const AllowUserJs = [
8842  'default' => false,
8843  ];
8844 
8850  public const AllowUserCss = [
8851  'default' => false,
8852  ];
8853 
8860  public const AllowUserCssPrefs = [
8861  'default' => true,
8862  ];
8863 
8867  public const UseSiteJs = [
8868  'default' => true,
8869  ];
8870 
8874  public const UseSiteCss = [
8875  'default' => true,
8876  ];
8877 
8882  public const BreakFrames = [
8883  'default' => false,
8884  ];
8885 
8905  public const EditPageFrameOptions = [
8906  'default' => 'DENY',
8907  ];
8908 
8920  public const ApiFrameOptions = [
8921  'default' => 'DENY',
8922  ];
8923 
8931  public const CSPHeader = [
8932  'default' => false,
8933  'type' => 'false|object',
8934  ];
8935 
8941  public const CSPReportOnlyHeader = [
8942  'default' => false,
8943  'type' => 'false|object',
8944  ];
8945 
8955  public const CSPFalsePositiveUrls = [
8956  'default' => [
8957  'https://3hub.co' => true,
8958  'https://morepro.info' => true,
8959  'https://p.ato.mx' => true,
8960  'https://s.ato.mx' => true,
8961  'https://adserver.adtech.de' => true,
8962  'https://ums.adtechus.com' => true,
8963  'https://cas.criteo.com' => true,
8964  'https://cat.nl.eu.criteo.com' => true,
8965  'https://atpixel.alephd.com' => true,
8966  'https://rtb.metrigo.com' => true,
8967  'https://d5p.de17a.com' => true,
8968  'https://ad.lkqd.net/vpaid/vpaid.js' => true,
8969  'https://ad.lkqd.net/vpaid/vpaid.js?fusion=1.0' => true,
8970  'https://t.lkqd.net/t' => true,
8971  'chrome-extension' => true,
8972  ],
8973  'type' => 'map',
8974  ];
8975 
8983  public const AllowCrossOrigin = [
8984  'default' => false,
8985  'type' => 'boolean',
8986  ];
8987 
9001  public const RestAllowCrossOriginCookieAuth = [
9002  'default' => false,
9003  'type' => 'boolean',
9004  ];
9005 
9014  public const SessionSecret = [
9015  'default' => false,
9016  ];
9017 
9026  public const SessionInsecureSecrets = [
9027  'default' => false,
9028  ];
9029 
9040  public const HKDFSecret = [
9041  'default' => false,
9042  ];
9043 
9052  public const HKDFAlgorithm = [
9053  'default' => 'sha256',
9054  ];
9055 
9056  // endregion -- end of security
9057 
9058  /***************************************************************************/
9059  // region Cookie settings
9065  public const CookieExpiration = [
9066  'default' => 30 * 86400,
9067  ];
9068 
9075  public const ExtendedLoginCookieExpiration = [
9076  'default' => 180 * 86400,
9077  ];
9078 
9083  public const CookieDomain = [
9084  'default' => '',
9085  ];
9086 
9091  public const CookiePath = [
9092  'default' => '/',
9093  ];
9094 
9105  public const CookieSecure = [
9106  'default' => 'detect',
9107  'dynamicDefault' => [ 'use' => [ 'ForceHTTPS' ] ]
9108  ];
9109 
9110  public static function getDefaultCookieSecure( $forceHTTPS ): bool {
9111  return $forceHTTPS || ( WebRequest::detectProtocol() === 'https' );
9112  }
9113 
9120  public const DisableCookieCheck = [
9121  'default' => false,
9122  ];
9123 
9129  public const CookiePrefix = [
9130  'default' => false,
9131  'dynamicDefault' => [
9132  'use' => [ 'SharedDB', 'SharedPrefix', 'SharedTables', 'DBname', 'DBprefix' ]
9133  ],
9134  ];
9135 
9136  public static function getDefaultCookiePrefix(
9137  $sharedDB, $sharedPrefix, $sharedTables, $dbName, $dbPrefix
9138  ): string {
9139  if ( $sharedDB && in_array( 'user', $sharedTables ) ) {
9140  return $sharedDB . ( $sharedPrefix ? "_$sharedPrefix" : '' );
9141  }
9142  return $dbName . ( $dbPrefix ? "_$dbPrefix" : '' );
9143  }
9144 
9150  public const CookieHttpOnly = [
9151  'default' => true,
9152  ];
9153 
9163  public const CookieSameSite = [
9164  'default' => null,
9165  'type' => '?string',
9166  ];
9167 
9175  public const UseSameSiteLegacyCookies = [
9176  'default' => false,
9177  'type' => 'boolean',
9178  ];
9179 
9183  public const CacheVaryCookies = [
9184  'default' => [],
9185  'type' => 'list',
9186  ];
9187 
9191  public const SessionName = [
9192  'default' => false,
9193  ];
9194 
9202  public const CookieSetOnAutoblock = [
9203  'default' => true,
9204  ];
9205 
9213  public const CookieSetOnIpBlock = [
9214  'default' => true,
9215  ];
9216 
9217  // endregion -- end of cookie settings
9218 
9219  /***************************************************************************/
9220  // region Profiling, testing and debugging
9222  // See $wgProfiler for how to enable profiling.
9223 
9235  public const DebugLogFile = [
9236  'default' => '',
9237  ];
9238 
9242  public const DebugLogPrefix = [
9243  'default' => '',
9244  ];
9245 
9251  public const DebugRedirects = [
9252  'default' => false,
9253  ];
9254 
9269  public const DebugRawPage = [
9270  'default' => false,
9271  ];
9272 
9281  public const DebugComments = [
9282  'default' => false,
9283  ];
9284 
9292  public const DebugDumpSql = [
9293  'default' => false,
9294  ];
9295 
9301  public const TrxProfilerLimits = [
9302  'default' => [
9303  // HTTP GET/HEAD requests.
9304  // Primary queries should not happen on GET requests
9305  'GET' => [
9306  'masterConns' => 0,
9307  'writes' => 0,
9308  'readQueryTime' => 5,
9309  'readQueryRows' => 10000
9310  ],
9311  // HTTP POST requests.
9312  // Primary reads and writes will happen for a subset of these.
9313  'POST' => [
9314  'readQueryTime' => 5,
9315  'writeQueryTime' => 1,
9316  'readQueryRows' => 100000,
9317  'maxAffected' => 1000
9318  ],
9319  'POST-nonwrite' => [
9320  'writes' => 0,
9321  'readQueryTime' => 5,
9322  'readQueryRows' => 10000
9323  ],
9324  // Deferred updates that run after HTTP response is sent for GET requests
9325  'PostSend-GET' => [
9326  'readQueryTime' => 5,
9327  'writeQueryTime' => 1,
9328  'readQueryRows' => 10000,
9329  'maxAffected' => 1000,
9330  // Log primary queries under the post-send entry point as they are discouraged
9331  'masterConns' => 0,
9332  'writes' => 0,
9333  ],
9334  // Deferred updates that run after HTTP response is sent for POST requests
9335  'PostSend-POST' => [
9336  'readQueryTime' => 5,
9337  'writeQueryTime' => 1,
9338  'readQueryRows' => 100000,
9339  'maxAffected' => 1000
9340  ],
9341  // Background job runner
9342  'JobRunner' => [
9343  'readQueryTime' => 30,
9344  'writeQueryTime' => 5,
9345  'readQueryRows' => 100000,
9346  'maxAffected' => 500 // ballpark of $wgUpdateRowsPerQuery
9347  ],
9348  // Command-line scripts
9349  'Maintenance' => [
9350  'writeQueryTime' => 5,
9351  'maxAffected' => 1000
9352  ]
9353  ],
9354  'type' => 'map',
9355  ];
9356 
9389  public const DebugLogGroups = [
9390  'default' => [],
9391  'type' => 'map',
9392  ];
9393 
9415  public const MWLoggerDefaultSpi = [
9416  'default' => [ 'class' => 'MediaWiki\\Logger\\LegacySpi', ],
9417  'mergeStrategy' => 'replace',
9418  'type' => 'map',
9419  ];
9420 
9426  public const ShowDebug = [
9427  'default' => false,
9428  ];
9429 
9433  public const SpecialVersionShowHooks = [
9434  'default' => false,
9435  ];
9436 
9444  public const ShowExceptionDetails = [
9445  'default' => false,
9446  ];
9447 
9451  public const LogExceptionBacktrace = [
9452  'default' => true,
9453  ];
9454 
9459  public const PropagateErrors = [
9460  'default' => true,
9461  ];
9462 
9466  public const ShowHostnames = [
9467  'default' => false,
9468  ];
9469 
9477  public const OverrideHostname = [
9478  'default' => false,
9479  ];
9480 
9485  public const DevelopmentWarnings = [
9486  'default' => false,
9487  ];
9488 
9494  public const DeprecationReleaseLimit = [
9495  'default' => false,
9496  ];
9497 
9564  public const Profiler = [
9565  'default' => [],
9566  'type' => 'map',
9567  'mergeStrategy' => 'replace',
9568  ];
9569 
9580  public const StatsdServer = [
9581  'default' => false,
9582  ];
9583 
9591  public const StatsdMetricPrefix = [
9592  'default' => 'MediaWiki',
9593  ];
9594 
9603  public const StatsdSamplingRates = [
9604  'default' => [],
9605  'type' => 'map',
9606  ];
9607 
9616  public const StatsTarget = [
9617  'default' => null,
9618  'type' => '?string',
9619  ];
9620 
9630  public const StatsFormat = [
9631  'default' => null,
9632  'type' => '?string',
9633  ];
9634 
9644  public const StatsPrefix = [
9645  'default' => 'mediawiki',
9646  'type' => 'string',
9647  ];
9648 
9655  public const PageInfoTransclusionLimit = [
9656  'default' => 50,
9657  ];
9658 
9662  public const EnableJavaScriptTest = [
9663  'default' => false,
9664  ];
9665 
9671  public const CachePrefix = [
9672  'default' => false,
9673  ];
9674 
9683  public const DebugToolbar = [
9684  'default' => false,
9685  ];
9686 
9687  // endregion -- end of profiling, testing and debugging
9688 
9689  /***************************************************************************/
9690  // region Search
9696  public const DisableTextSearch = [
9697  'default' => false,
9698  ];
9699 
9704  public const AdvancedSearchHighlighting = [
9705  'default' => false,
9706  ];
9707 
9712  public const SearchHighlightBoundaries = [
9713  'default' => '[\\p{Z}\\p{P}\\p{C}]',
9714  ];
9715 
9726  public const OpenSearchTemplate = [
9727  'default' => false,
9728  'deprecated' => 'since 1.25 ' .
9729  'Use $wgOpenSearchTemplates[\'application/x-suggestions+json\'] instead',
9730  ];
9731 
9740  public const OpenSearchTemplates = [
9741  'default' => [
9742  'application/x-suggestions+json' => false,
9743  'application/x-suggestions+xml' => false,
9744  ],
9745  'type' => 'map',
9746  ];
9747 
9754  public const EnableOpenSearchSuggest = [
9755  'default' => true,
9756  'obsolete' => 'Since 1.35, no longer used',
9757  'description' => 'Has been emitting warnings since 1.39 (LTS). ' .
9758  'Can be removed completely in 1.44, assuming 1.43 is an LTS release.'
9759  ];
9760 
9765  public const OpenSearchDefaultLimit = [
9766  'default' => 10,
9767  ];
9768 
9773  public const OpenSearchDescriptionLength = [
9774  'default' => 100,
9775  ];
9776 
9780  public const SearchSuggestCacheExpiry = [
9781  'default' => 1200,
9782  ];
9783 
9788  public const DisableSearchUpdate = [
9789  'default' => false,
9790  ];
9791 
9802  public const NamespacesToBeSearchedDefault = [
9803  'default' => [ NS_MAIN => true, ],
9804  'type' => 'map',
9805  ];
9806 
9811  public const DisableInternalSearch = [
9812  'default' => false,
9813  ];
9814 
9832  public const SearchForwardUrl = [
9833  'default' => null,
9834  ];
9835 
9841  public const SitemapNamespaces = [
9842  'default' => false,
9843  'type' => 'false|list',
9844  ];
9845 
9862  public const SitemapNamespacesPriorities = [
9863  'default' => false,
9864  'type' => 'false|map',
9865  ];
9866 
9872  public const EnableSearchContributorsByIP = [
9873  'default' => true,
9874  ];
9875 
9886  public const SpecialSearchFormOptions = [
9887  'default' => [],
9888  'type' => 'map',
9889  ];
9890 
9899  public const SearchMatchRedirectPreference = [
9900  'default' => false,
9901  'type' => 'boolean',
9902  ];
9903 
9910  public const SearchRunSuggestedQuery = [
9911  'default' => true,
9912  'type' => 'boolean',
9913  ];
9914 
9915  // endregion -- end of search settings
9916 
9917  /***************************************************************************/
9918  // region Edit user interface
9925  public const Diff3 = [
9926  'default' => '/usr/bin/diff3',
9927  ];
9928 
9932  public const Diff = [
9933  'default' => '/usr/bin/diff',
9934  ];
9935 
9941  public const PreviewOnOpenNamespaces = [
9942  'default' => [
9943  NS_CATEGORY => true
9944  ],
9945  'type' => 'map',
9946  ];
9947 
9953  public const UniversalEditButton = [
9954  'default' => true,
9955  ];
9956 
9962  public const UseAutomaticEditSummaries = [
9963  'default' => true,
9964  ];
9965 
9966  // endregion -- end edit UI
9967 
9968  /***************************************************************************/
9969  // region Maintenance
9971  // See also $wgSiteNotice
9972 
9976  public const CommandLineDarkBg = [
9977  'default' => false,
9978  ];
9979 
9988  public const ReadOnly = [
9989  'default' => null,
9990  ];
9991 
9997  public const ReadOnlyWatchedItemStore = [
9998  'default' => false,
9999  'type' => 'boolean',
10000  ];
10001 
10010  public const ReadOnlyFile = [
10011  'default' => false,
10012  'dynamicDefault' => [ 'use' => [ 'UploadDirectory' ] ]
10013  ];
10014 
10019  public static function getDefaultReadOnlyFile( $uploadDirectory ): string {
10020  return "$uploadDirectory/lock_yBgMBwiR";
10021  }
10022 
10032  public const UpgradeKey = [
10033  'default' => false,
10034  ];
10035 
10039  public const GitBin = [
10040  'default' => '/usr/bin/git',
10041  ];
10042 
10056  public const GitRepositoryViewers = [
10057  'default' => [
10058  'https://(?:[a-z0-9_]+@)?gerrit.wikimedia.org/r/(?:p/)?(.*)' => 'https://gerrit.wikimedia.org/g/%R/+/%H',
10059  'ssh://(?:[a-z0-9_]+@)?gerrit.wikimedia.org:29418/(.*)' => 'https://gerrit.wikimedia.org/g/%R/+/%H',
10060  ],
10061  'type' => 'map',
10062  ];
10063 
10064  // endregion -- End of maintenance
10065 
10066  /***************************************************************************/
10067  // region Recent changes, new pages, watchlist and history
10076  public const RCMaxAge = [
10077  'default' => 90 * 24 * 3600,
10078  ];
10079 
10087  public const WatchersMaxAge = [
10088  'default' => 180 * 24 * 3600,
10089  ];
10090 
10099  public const UnwatchedPageSecret = [
10100  'default' => 1,
10101  ];
10102 
10110  public const RCFilterByAge = [
10111  'default' => false,
10112  ];
10113 
10118  public const RCLinkLimits = [
10119  'default' => [ 50, 100, 250, 500 ],
10120  'type' => 'list',
10121  ];
10122 
10129  public const RCLinkDays = [
10130  'default' => [ 1, 3, 7, 14, 30 ],
10131  'type' => 'list',
10132  ];
10133 
10197  public const RCFeeds = [
10198  'default' => [],
10199  'type' => 'map',
10200  ];
10201 
10209  public const RCEngines = [
10210  'default' => [
10211  'redis' => RedisPubSubFeedEngine::class,
10212  'udp' => UDPRCFeedEngine::class,
10213  ],
10214  'type' => 'map',
10215  ];
10216 
10229  public const RCWatchCategoryMembership = [
10230  'default' => false,
10231  ];
10232 
10241  public const UseRCPatrol = [
10242  'default' => true,
10243  ];
10244 
10251  public const StructuredChangeFiltersLiveUpdatePollingRate = [
10252  'default' => 3,
10253  ];
10254 
10262  public const UseNPPatrol = [
10263  'default' => true,
10264  ];
10265 
10274  public const UseFilePatrol = [
10275  'default' => true,
10276  ];
10277 
10281  public const Feed = [
10282  'default' => true,
10283  ];
10284 
10289  public const FeedLimit = [
10290  'default' => 50,
10291  ];
10292 
10302  public const FeedCacheTimeout = [
10303  'default' => 60,
10304  ];
10305 
10310  public const FeedDiffCutoff = [
10311  'default' => 32768,
10312  ];
10313 
10329  public const OverrideSiteFeed = [
10330  'default' => [],
10331  'type' => 'map',
10332  ];
10333 
10340  public const FeedClasses = [
10341  'default' => [
10342  'rss' => \MediaWiki\Feed\RSSFeed::class,
10343  'atom' => \MediaWiki\Feed\AtomFeed::class,
10344  ],
10345  'type' => 'map',
10346  ];
10347 
10352  public const AdvertisedFeedTypes = [
10353  'default' => [ 'atom', ],
10354  'type' => 'list',
10355  ];
10356 
10360  public const RCShowWatchingUsers = [
10361  'default' => false,
10362  ];
10363 
10367  public const RCShowChangedSize = [
10368  'default' => true,
10369  ];
10370 
10376  public const RCChangedSizeThreshold = [
10377  'default' => 500,
10378  ];
10379 
10384  public const ShowUpdatedMarker = [
10385  'default' => true,
10386  ];
10387 
10392  public const DisableAnonTalk = [
10393  'default' => false,
10394  ];
10395 
10400  public const UseTagFilter = [
10401  'default' => true,
10402  ];
10403 
10421  public const SoftwareTags = [
10422  'default' => [
10423  'mw-contentmodelchange' => true,
10424  'mw-new-redirect' => true,
10425  'mw-removed-redirect' => true,
10426  'mw-changed-redirect-target' => true,
10427  'mw-blank' => true,
10428  'mw-replace' => true,
10429  'mw-rollback' => true,
10430  'mw-undo' => true,
10431  'mw-manual-revert' => true,
10432  'mw-reverted' => true,
10433  'mw-server-side-upload' => true,
10434  ],
10435  'type' => 'map',
10436  'additionalProperties' => [ 'type' => 'boolean', ],
10437  ];
10438 
10446  public const UnwatchedPageThreshold = [
10447  'default' => false,
10448  ];
10449 
10475  public const RecentChangesFlags = [
10476  'default' => [
10477  'newpage' => [
10478  'letter' => 'newpageletter',
10479  'title' => 'recentchanges-label-newpage',
10480  'legend' => 'recentchanges-legend-newpage',
10481  'grouping' => 'any',
10482  ],
10483  'minor' => [
10484  'letter' => 'minoreditletter',
10485  'title' => 'recentchanges-label-minor',
10486  'legend' => 'recentchanges-legend-minor',
10487  'class' => 'minoredit',
10488  'grouping' => 'all',
10489  ],
10490  'bot' => [
10491  'letter' => 'boteditletter',
10492  'title' => 'recentchanges-label-bot',
10493  'legend' => 'recentchanges-legend-bot',
10494  'class' => 'botedit',
10495  'grouping' => 'all',
10496  ],
10497  'unpatrolled' => [
10498  'letter' => 'unpatrolledletter',
10499  'title' => 'recentchanges-label-unpatrolled',
10500  'legend' => 'recentchanges-legend-unpatrolled',
10501  'grouping' => 'any',
10502  ],
10503  ],
10504  'type' => 'map',
10505  ];
10506 
10512  public const WatchlistExpiry = [
10513  'default' => false,
10514  'type' => 'boolean',
10515  ];
10516 
10527  public const WatchlistPurgeRate = [
10528  'default' => 0.1,
10529  'type' => 'float',
10530  ];
10531 
10546  public const WatchlistExpiryMaxDuration = [
10547  'default' => '1 year',
10548  'type' => '?string',
10549  ];
10550 
10551  // endregion -- end RC/watchlist
10552 
10553  /***************************************************************************/
10554  // region Copyright and credits settings
10564  public const RightsPage = [
10565  'default' => null,
10566  ];
10567 
10574  public const RightsUrl = [
10575  'default' => null,
10576  ];
10577 
10586  public const RightsText = [
10587  'default' => null,
10588  ];
10589 
10593  public const RightsIcon = [
10594  'default' => null,
10595  ];
10596 
10600  public const UseCopyrightUpload = [
10601  'default' => false,
10602  ];
10603 
10611  public const MaxCredits = [
10612  'default' => 0,
10613  ];
10614 
10620  public const ShowCreditsIfMax = [
10621  'default' => true,
10622  ];
10623 
10624  // endregion -- end of copyright and credits settings
10625 
10626  /***************************************************************************/
10627  // region Import / Export
10653  public const ImportSources = [
10654  'default' => [],
10655  'type' => 'map',
10656  ];
10657 
10666  public const ImportTargetNamespace = [
10667  'default' => null,
10668  ];
10669 
10676  public const ExportAllowHistory = [
10677  'default' => true,
10678  ];
10679 
10685  public const ExportMaxHistory = [
10686  'default' => 0,
10687  ];
10688 
10692  public const ExportAllowListContributors = [
10693  'default' => false,
10694  ];
10695 
10707  public const ExportMaxLinkDepth = [
10708  'default' => 0,
10709  ];
10710 
10714  public const ExportFromNamespaces = [
10715  'default' => false,
10716  ];
10717 
10721  public const ExportAllowAll = [
10722  'default' => false,
10723  ];
10724 
10731  public const ExportPagelistLimit = [
10732  'default' => 5000,
10733  ];
10734 
10739  public const XmlDumpSchemaVersion = [
10740  'default' => XML_DUMP_SCHEMA_VERSION_11,
10741  ];
10742 
10743  // endregion -- end of import/export
10744 
10745  /***************************************************************************/
10746  // region Wiki Farm
10758  public const WikiFarmSettingsDirectory = [
10759  'default' => null
10760  ];
10761 
10770  public const WikiFarmSettingsExtension = [
10771  'default' => 'yaml'
10772  ];
10773 
10774  // endregion -- End Wiki Farm
10775 
10776  /***************************************************************************/
10777  // region Extensions
10784  public const ExtensionFunctions = [
10785  'default' => [],
10786  'type' => 'list',
10787  ];
10788 
10816  public const ExtensionMessagesFiles = [
10817  'default' => [],
10818  'type' => 'map',
10819  ];
10820 
10849  public const MessagesDirs = [
10850  'default' => [],
10851  'type' => 'map',
10852  ];
10853 
10860  public const ExtensionEntryPointListFiles = [
10861  'default' => [],
10862  'type' => 'map',
10863  ];
10864 
10881  public const ParserOutputHooks = [
10882  'default' => [],
10883  'type' => 'map',
10884  ];
10885 
10889  public const EnableParserLimitReporting = [
10890  'default' => true,
10891  ];
10892 
10918  public const ValidSkinNames = [
10919  'default' => [],
10920  'type' => 'map',
10921  ];
10922 
10928  public const SpecialPages = [
10929  'default' => [],
10930  'type' => 'map',
10931  ];
10932 
10943  public const AutoloadAttemptLowercase = [
10944  'default' => false,
10945  'obsolete' => 'Since 1.40; no longer has any effect.',
10946  'description' => 'Has been emitting warnings since 1.39 (LTS). ' .
10947  'Can be removed completely in 1.44, assuming 1.43 is an LTS release.'
10948  ];
10949 
11008  public const ExtensionCredits = [
11009  'default' => [],
11010  'type' => 'map',
11011  ];
11012 
11042  public const Hooks = [
11043  'default' => [],
11044  'type' => 'map',
11045  'mergeStrategy' => 'array_merge_recursive',
11046  ];
11047 
11060  public const ServiceWiringFiles = [
11061  'default' => [],
11062  'type' => 'list',
11063  ];
11064 
11083  public const JobClasses = [
11084  'default' => [
11085  'deletePage' => DeletePageJob::class,
11086  'refreshLinks' => RefreshLinksJob::class,
11087  'deleteLinks' => DeleteLinksJob::class,
11088  'htmlCacheUpdate' => HTMLCacheUpdateJob::class,
11089  'sendMail' => EmaillingJob::class,
11090  'enotifNotify' => EnotifNotifyJob::class,
11091  'fixDoubleRedirect' => DoubleRedirectJob::class,
11092  'AssembleUploadChunks' => AssembleUploadChunksJob::class,
11093  'PublishStashedFile' => PublishStashedFileJob::class,
11094  'ThumbnailRender' => ThumbnailRenderJob::class,
11095  'recentChangesUpdate' => RecentChangesUpdateJob::class,
11096  'refreshLinksPrioritized' => RefreshLinksJob::class,
11097  'refreshLinksDynamic' => RefreshLinksJob::class,
11098  'activityUpdateJob' => ActivityUpdateJob::class,
11099  'categoryMembershipChange' => CategoryMembershipChangeJob::class,
11100  'clearUserWatchlist' => ClearUserWatchlistJob::class,
11101  'watchlistExpiry' => WatchlistExpiryJob::class,
11102  'cdnPurge' => CdnPurgeJob::class,
11103  'userGroupExpiry' => UserGroupExpiryJob::class,
11104  'clearWatchlistNotifications' => ClearWatchlistNotificationsJob::class,
11105  'userOptionsUpdate' => UserOptionsUpdateJob::class,
11106  'revertedTagUpdate' => RevertedTagUpdateJob::class,
11107  'null' => NullJob::class,
11108  'userEditCountInit' => UserEditCountInitJob::class,
11109  'parsoidCachePrewarm' => [
11110  'class' => ParsoidCachePrewarmJob::class,
11111  'services' => [
11112  'ParsoidOutputAccess',
11113  'PageStore',
11114  'RevisionLookup'
11115  ],
11116  // tell the JobFactory not to include the $page parameter in the constructor call
11117  'needsPage' => false
11118  ],
11119  'renameUser' => [
11120  'class' => RenameUserJob::class,
11121  'services' => [
11122  'MainConfig',
11123  'DBLoadBalancerFactory'
11124  ]
11125  ],
11126  ],
11127  'type' => 'map',
11128  ];
11129 
11141  public const JobTypesExcludedFromDefaultQueue = [
11142  'default' => [ 'AssembleUploadChunks', 'PublishStashedFile' ],
11143  'type' => 'list',
11144  ];
11145 
11155  public const JobBackoffThrottling = [
11156  'default' => [],
11157  'type' => 'map',
11158  'additionalProperties' => [ 'type' => 'float', ],
11159  ];
11160 
11174  public const JobSerialCommitThreshold = [
11175  'default' => false,
11176  'type' => 'float|false',
11177  ];
11178 
11186  public const JobTypeConf = [
11187  'default' => [
11188  'default' => [
11189  'class' => JobQueueDB::class,
11190  'order' => 'random',
11191  'claimTTL' => 3600
11192  ],
11193  ],
11194  'additionalProperties' => [
11195  'type' => 'object',
11196  'properties' => [
11197  'class' => [ 'type' => 'string' ],
11198  'order' => [ 'type' => 'string' ],
11199  'claimTTL' => [ 'type' => 'int' ]
11200  ],
11201  ],
11202  'type' => 'map',
11203  ];
11204 
11217  public const JobQueueIncludeInMaxLagFactor = [
11218  'default' => false,
11219  ];
11220 
11226  public const SpecialPageCacheUpdates = [
11227  'default' => [
11228  'Statistics' => [ SiteStatsUpdate::class, 'cacheUpdate' ]
11229  ],
11230  'type' => 'map',
11231  ];
11232 
11241  public const PagePropLinkInvalidations = [
11242  'default' => [ 'hiddencat' => 'categorylinks', ],
11243  'type' => 'map',
11244  ];
11245 
11246  // endregion -- End extensions
11247 
11248  /***************************************************************************/
11249  // region Categories
11256  public const CategoryMagicGallery = [
11257  'default' => true,
11258  ];
11259 
11263  public const CategoryPagingLimit = [
11264  'default' => 200,
11265  ];
11266 
11293  public const CategoryCollation = [
11294  'default' => 'uppercase',
11295  ];
11296 
11308  public const TempCategoryCollations = [
11309  'default' => [],
11310  'type' => 'list',
11311  ];
11312 
11327  public const TrackingCategories = [
11328  'default' => [],
11329  'type' => 'list',
11330  'deprecated' => 'since 1.25 Extensions should now register tracking categories using ' .
11331  'the new extension registration system.',
11332  ];
11333 
11334  // endregion -- End categories
11335 
11336  /***************************************************************************/
11337  // region Logging
11349  public const LogTypes = [
11350  'default' => [
11351  '',
11352  'block',
11353  'protect',
11354  'rights',
11355  'delete',
11356  'upload',
11357  'move',
11358  'import',
11359  'patrol',
11360  'merge',
11361  'suppress',
11362  'tag',
11363  'managetags',
11364  'contentmodel',
11365  'renameuser',
11366  ],
11367  'type' => 'list',
11368  ];
11369 
11377  public const LogRestrictions = [
11378  'default' => [ 'suppress' => 'suppressionlog', ],
11379  'type' => 'map',
11380  ];
11381 
11400  public const FilterLogTypes = [
11401  'default' => [
11402  'patrol' => true,
11403  'tag' => true,
11404  'newusers' => false,
11405  ],
11406  'type' => 'map',
11407  ];
11408 
11418  public const LogNames = [
11419  'default' => [
11420  '' => 'all-logs-page',
11421  'block' => 'blocklogpage',
11422  'protect' => 'protectlogpage',
11423  'rights' => 'rightslog',
11424  'delete' => 'dellogpage',
11425  'upload' => 'uploadlogpage',
11426  'move' => 'movelogpage',
11427  'import' => 'importlogpage',
11428  'patrol' => 'patrol-log-page',
11429  'merge' => 'mergelog',
11430  'suppress' => 'suppressionlog',
11431  ],
11432  'type' => 'map',
11433  ];
11434 
11444  public const LogHeaders = [
11445  'default' => [
11446  '' => 'alllogstext',
11447  'block' => 'blocklogtext',
11448  'delete' => 'dellogpagetext',
11449  'import' => 'importlogpagetext',
11450  'merge' => 'mergelogpagetext',
11451  'move' => 'movelogpagetext',
11452  'patrol' => 'patrol-log-header',
11453  'protect' => 'protectlogtext',
11454  'rights' => 'rightslogtext',
11455  'suppress' => 'suppressionlogtext',
11456  'upload' => 'uploadlogpagetext',
11457  ],
11458  'type' => 'map',
11459  ];
11460 
11468  public const LogActions = [
11469  'default' => [],
11470  'type' => 'map',
11471  ];
11472 
11480  public const LogActionsHandlers = [
11481  'default' => [
11482  'block/block' => BlockLogFormatter::class,
11483  'block/reblock' => BlockLogFormatter::class,
11484  'block/unblock' => BlockLogFormatter::class,
11485  'contentmodel/change' => ContentModelLogFormatter::class,
11486  'contentmodel/new' => ContentModelLogFormatter::class,
11487  'delete/delete' => DeleteLogFormatter::class,
11488  'delete/delete_redir' => DeleteLogFormatter::class,
11489  'delete/delete_redir2' => DeleteLogFormatter::class,
11490  'delete/event' => DeleteLogFormatter::class,
11491  'delete/restore' => DeleteLogFormatter::class,
11492  'delete/revision' => DeleteLogFormatter::class,
11493  'import/interwiki' => ImportLogFormatter::class,
11494  'import/upload' => ImportLogFormatter::class,
11495  'managetags/activate' => LogFormatter::class,
11496  'managetags/create' => LogFormatter::class,
11497  'managetags/deactivate' => LogFormatter::class,
11498  'managetags/delete' => LogFormatter::class,
11499  'merge/merge' => MergeLogFormatter::class,
11500  'move/move' => MoveLogFormatter::class,
11501  'move/move_redir' => MoveLogFormatter::class,
11502  'patrol/patrol' => PatrolLogFormatter::class,
11503  'patrol/autopatrol' => PatrolLogFormatter::class,
11504  'protect/modify' => ProtectLogFormatter::class,
11505  'protect/move_prot' => ProtectLogFormatter::class,
11506  'protect/protect' => ProtectLogFormatter::class,
11507  'protect/unprotect' => ProtectLogFormatter::class,
11508  'renameuser/renameuser' => RenameuserLogFormatter::class,
11509  'rights/autopromote' => RightsLogFormatter::class,
11510  'rights/rights' => RightsLogFormatter::class,
11511  'suppress/block' => BlockLogFormatter::class,
11512  'suppress/delete' => DeleteLogFormatter::class,
11513  'suppress/event' => DeleteLogFormatter::class,
11514  'suppress/reblock' => BlockLogFormatter::class,
11515  'suppress/revision' => DeleteLogFormatter::class,
11516  'tag/update' => TagLogFormatter::class,
11517  'upload/overwrite' => UploadLogFormatter::class,
11518  'upload/revert' => UploadLogFormatter::class,
11519  'upload/upload' => UploadLogFormatter::class,
11520  ],
11521  'type' => 'map',
11522  ];
11523 
11533  public const ActionFilteredLogs = [
11534  'default' => [
11535  'block' => [
11536  'block' => [ 'block' ],
11537  'reblock' => [ 'reblock' ],
11538  'unblock' => [ 'unblock' ],
11539  ],
11540  'contentmodel' => [
11541  'change' => [ 'change' ],
11542  'new' => [ 'new' ],
11543  ],
11544  'delete' => [
11545  'delete' => [ 'delete' ],
11546  'delete_redir' => [ 'delete_redir', 'delete_redir2' ],
11547  'restore' => [ 'restore' ],
11548  'event' => [ 'event' ],
11549  'revision' => [ 'revision' ],
11550  ],
11551  'import' => [
11552  'interwiki' => [ 'interwiki' ],
11553  'upload' => [ 'upload' ],
11554  ],
11555  'managetags' => [
11556  'create' => [ 'create' ],
11557  'delete' => [ 'delete' ],
11558  'activate' => [ 'activate' ],
11559  'deactivate' => [ 'deactivate' ],
11560  ],
11561  'move' => [
11562  'move' => [ 'move' ],
11563  'move_redir' => [ 'move_redir' ],
11564  ],
11565  'newusers' => [
11566  'create' => [ 'create', 'newusers' ],
11567  'create2' => [ 'create2' ],
11568  'autocreate' => [ 'autocreate' ],
11569  'byemail' => [ 'byemail' ],
11570  ],
11571  'protect' => [
11572  'protect' => [ 'protect' ],
11573  'modify' => [ 'modify' ],
11574  'unprotect' => [ 'unprotect' ],
11575  'move_prot' => [ 'move_prot' ],
11576  ],
11577  'rights' => [
11578  'rights' => [ 'rights' ],
11579  'autopromote' => [ 'autopromote' ],
11580  ],
11581  'suppress' => [
11582  'event' => [ 'event' ],
11583  'revision' => [ 'revision' ],
11584  'delete' => [ 'delete' ],
11585  'block' => [ 'block' ],
11586  'reblock' => [ 'reblock' ],
11587  ],
11588  'upload' => [
11589  'upload' => [ 'upload' ],
11590  'overwrite' => [ 'overwrite' ],
11591  'revert' => [ 'revert' ],
11592  ],
11593  ],
11594  'type' => 'map',
11595  ];
11596 
11600  public const NewUserLog = [
11601  'default' => true,
11602  ];
11603 
11609  public const PageCreationLog = [
11610  'default' => true,
11611  ];
11612 
11613  // endregion -- end logging
11614 
11615  /***************************************************************************/
11616  // region Special pages (general and miscellaneous)
11622  public const AllowSpecialInclusion = [
11623  'default' => true,
11624  ];
11625 
11632  public const DisableQueryPageUpdate = [
11633  'default' => false,
11634  ];
11635 
11640  public const CountCategorizedImagesAsUsed = [
11641  'default' => false,
11642  ];
11643 
11648  public const MaxRedirectLinksRetrieved = [
11649  'default' => 500,
11650  ];
11651 
11658  public const RangeContributionsCIDRLimit = [
11659  'default' => [
11660  'IPv4' => 16,
11661  'IPv6' => 32,
11662  ],
11663  'type' => 'map',
11664  'additionalProperties' => [ 'type' => 'integer', ],
11665  ];
11666 
11667  // endregion -- end special pages
11668 
11669  /***************************************************************************/
11670  // region Actions
11679  public const Actions = [
11680  'default' => [],
11681  'type' => 'map',
11682  ];
11683 
11684  // endregion -- end actions
11685 
11686  /***************************************************************************/
11687  // region Robot (search engine crawler) policy
11689  // See also $wgNoFollowLinks.
11690 
11696  public const DefaultRobotPolicy = [
11697  'default' => 'index,follow',
11698  ];
11699 
11715  public const NamespaceRobotPolicies = [
11716  'default' => [],
11717  'type' => 'map',
11718  ];
11719 
11749  public const ArticleRobotPolicies = [
11750  'default' => [],
11751  'type' => 'map',
11752  ];
11753 
11765  public const ExemptFromUserRobotsControl = [
11766  'default' => null,
11767  'type' => '?list',
11768  ];
11769 
11770  // endregion End robot policy
11771 
11772  /***************************************************************************/
11773  // region Action API and REST API
11790  public const DebugAPI = [
11791  'default' => false,
11792  ];
11793 
11829  public const APIModules = [
11830  'default' => [],
11831  'type' => 'map',
11832  ];
11833 
11842  public const APIFormatModules = [
11843  'default' => [],
11844  'type' => 'map',
11845  ];
11846 
11855  public const APIMetaModules = [
11856  'default' => [],
11857  'type' => 'map',
11858  ];
11859 
11868  public const APIPropModules = [
11869  'default' => [],
11870  'type' => 'map',
11871  ];
11872 
11881  public const APIListModules = [
11882  'default' => [],
11883  'type' => 'map',
11884  ];
11885 
11890  public const APIMaxDBRows = [
11891  'default' => 5000,
11892  ];
11893 
11899  public const APIMaxResultSize = [
11900  'default' => 8388608,
11901  ];
11902 
11907  public const APIMaxUncachedDiffs = [
11908  'default' => 1,
11909  ];
11910 
11917  public const APIMaxLagThreshold = [
11918  'default' => 7,
11919  ];
11920 
11925  public const APIRequestLog = [
11926  'default' => false,
11927  ];
11928 
11932  public const APICacheHelpTimeout = [
11933  'default' => 60 * 60,
11934  ];
11935 
11940  public const APIUselessQueryPages = [
11941  'default' => [
11942  'MIMEsearch',
11943  'LinkSearch',
11944  ],
11945  'type' => 'list',
11946  ];
11947 
11951  public const AjaxUploadDestCheck = [
11952  'default' => true,
11953  ];
11954 
11958  public const AjaxLicensePreview = [
11959  'default' => true,
11960  ];
11961 
11984  public const CrossSiteAJAXdomains = [
11985  'default' => [],
11986  'type' => 'map',
11987  ];
11988 
11994  public const CrossSiteAJAXdomainExceptions = [
11995  'default' => [],
11996  'type' => 'map',
11997  ];
11998 
12002  public const AllowedCorsHeaders = [
12003  'default' => [
12004  /* simple headers (see spec) */
12005  'Accept',
12006  'Accept-Language',
12007  'Content-Language',
12008  'Content-Type',
12009  /* non-authorable headers in XHR, which are however requested by some UAs */
12010  'Accept-Encoding',
12011  'DNT',
12012  'Origin',
12013  /* MediaWiki whitelist */
12014  'User-Agent',
12015  'Api-User-Agent',
12016  /* Allowing caching preflight requests, see T269636 */
12017  'Access-Control-Max-Age',
12018  /* OAuth 2.0, see T322944 */
12019  'Authorization',
12020  ],
12021  'type' => 'list',
12022  ];
12023 
12029  public const RestAPIAdditionalRouteFiles = [
12030  'default' => [],
12031  'type' => 'list',
12032  ];
12033 
12034  // endregion -- End AJAX and API
12035 
12036  /***************************************************************************/
12037  // region Shell and process control
12043  public const MaxShellMemory = [
12044  'default' => 307200,
12045  ];
12046 
12051  public const MaxShellFileSize = [
12052  'default' => 102400,
12053  ];
12054 
12058  public const MaxShellTime = [
12059  'default' => 180,
12060  ];
12061 
12066  public const MaxShellWallClockTime = [
12067  'default' => 180,
12068  ];
12069 
12093  public const ShellCgroup = [
12094  'default' => false,
12095  ];
12096 
12100  public const PhpCli = [
12101  'default' => '/usr/bin/php',
12102  ];
12103 
12116  public const ShellRestrictionMethod = [
12117  'default' => 'autodetect',
12118  'type' => 'string|false',
12119  ];
12120 
12134  public const ShellboxUrls = [
12135  'default' => [ 'default' => null, ],
12136  'type' => 'map',
12137  'additionalProperties' => [
12138  'type' => 'string|false|null',
12139  ],
12140  ];
12141 
12148  public const ShellboxSecretKey = [
12149  'default' => null,
12150  'type' => '?string',
12151  ];
12152 
12153  // endregion -- end Shell and process control
12154 
12155  /***************************************************************************/
12156  // region HTTP client
12164  public const HTTPTimeout = [
12165  'default' => 25,
12166  'type' => 'float',
12167  ];
12168 
12176  public const HTTPConnectTimeout = [
12177  'default' => 5.0,
12178  'type' => 'float',
12179  ];
12180 
12188  public const HTTPMaxTimeout = [
12189  'default' => 0,
12190  'type' => 'float',
12191  ];
12192 
12200  public const HTTPMaxConnectTimeout = [
12201  'default' => 0,
12202  'type' => 'float',
12203  ];
12204 
12210  public const HTTPImportTimeout = [
12211  'default' => 25,
12212  ];
12213 
12217  public const AsyncHTTPTimeout = [
12218  'default' => 25,
12219  ];
12220 
12224  public const HTTPProxy = [
12225  'default' => '',
12226  ];
12227 
12243  public const LocalVirtualHosts = [
12244  'default' => [],
12245  'type' => 'map',
12246  ];
12247 
12259  public const LocalHTTPProxy = [
12260  'default' => false,
12261  'type' => 'string|false',
12262  ];
12263 
12269  public const AllowExternalReqID = [
12270  'default' => false,
12271  ];
12272 
12273  // endregion -- End HTTP client
12274 
12275  /***************************************************************************/
12276  // region Job queue
12296  public const JobRunRate = [
12297  'default' => 1,
12298  ];
12299 
12307  public const RunJobsAsync = [
12308  'default' => false,
12309  ];
12310 
12314  public const UpdateRowsPerJob = [
12315  'default' => 300,
12316  ];
12317 
12321  public const UpdateRowsPerQuery = [
12322  'default' => 100,
12323  ];
12324 
12325  // endregion -- End job queue
12326 
12327  /***************************************************************************/
12328  // region Miscellaneous
12336  public const RedirectOnLogin = [
12337  'default' => null,
12338  ];
12339 
12376  public const VirtualRestConfig = [
12377  'default' => [
12378  'paths' => [],
12379  'modules' => [],
12380  'global' => [
12381  # Timeout in seconds
12382  'timeout' => 360,
12383  # 'domain' is set to $wgCanonicalServer in Setup.php
12384  'forwardCookies' => false,
12385  'HTTPProxy' => null
12386  ]
12387  ],
12388  'mergeStrategy' => 'array_plus_2d',
12389  'type' => 'map',
12390  ];
12391 
12414  public const EventRelayerConfig = [
12415  'default' => [
12416  'default' => [ 'class' => EventRelayerNull::class, ],
12417  ],
12418  'type' => 'map',
12419  ];
12420 
12438  public const Pingback = [
12439  'default' => false,
12440  'type' => 'boolean',
12441  ];
12442 
12448  public const OriginTrials = [
12449  'default' => [],
12450  'type' => 'list',
12451  ];
12452 
12459  public const ReportToExpiry = [
12460  'default' => 86400,
12461  'type' => 'integer',
12462  ];
12463 
12470  public const ReportToEndpoints = [
12471  'default' => [],
12472  'type' => 'list',
12473  ];
12474 
12483  public const FeaturePolicyReportOnly = [
12484  'default' => [],
12485  'type' => 'list',
12486  ];
12487 
12493  public const SkinsPreferred = [
12494  'default' => [ 'vector-2022', 'vector' ],
12495  'type' => 'list',
12496  ];
12497 
12503  public const SpecialContributeSkinsEnabled = [
12504  'default' => [],
12505  'type' => 'list',
12506  ];
12507 
12508  // endregion -- End Miscellaneous
12509 
12510 }
const SCHEMA_COMPAT_OLD
Definition: Defines.php:277
const AV_SCAN_FAILED
Definition: Defines.php:99
const SCHEMA_COMPAT_READ_NEW
Definition: Defines.php:270
const AV_VIRUS_FOUND
Definition: Defines.php:97
const APCOND_AGE
Definition: Defines.php:179
const NS_HELP
Definition: Defines.php:76
const NS_USER
Definition: Defines.php:66
const CONTENT_MODEL_CSS
Definition: Defines.php:213
const NS_FILE
Definition: Defines.php:70
const CACHE_NONE
Definition: Defines.php:86
const CACHE_ANYTHING
Definition: Defines.php:85
const NS_MEDIAWIKI_TALK
Definition: Defines.php:73
const NS_MAIN
Definition: Defines.php:64
const NS_PROJECT_TALK
Definition: Defines.php:69
const NS_MEDIAWIKI
Definition: Defines.php:72
const NS_TEMPLATE
Definition: Defines.php:74
const CACHE_ACCEL
Definition: Defines.php:89
const NS_FILE_TALK
Definition: Defines.php:71
const XML_DUMP_SCHEMA_VERSION_11
Definition: Defines.php:317
const CONTENT_MODEL_WIKITEXT
Definition: Defines.php:211
const CONTENT_MODEL_JSON
Definition: Defines.php:215
const NS_HELP_TALK
Definition: Defines.php:77
const NS_CATEGORY_TALK
Definition: Defines.php:79
const CONTENT_MODEL_TEXT
Definition: Defines.php:214
const SCHEMA_COMPAT_WRITE_NEW
Definition: Defines.php:269
const CACHE_DB
Definition: Defines.php:87
const AV_SCAN_ABORTED
Definition: Defines.php:98
const APCOND_EDITCOUNT
Definition: Defines.php:178
const NS_TALK
Definition: Defines.php:65
const AV_NO_VIRUS
Definition: Defines.php:96
const NS_USER_TALK
Definition: Defines.php:67
const CONTENT_MODEL_UNKNOWN
Definition: Defines.php:216
const NS_PROJECT
Definition: Defines.php:68
const NS_CATEGORY
Definition: Defines.php:78
const CONTENT_MODEL_JAVASCRIPT
Definition: Defines.php:212
const NS_TEMPLATE_TALK
Definition: Defines.php:75
if(!defined('MW_SETUP_CALLBACK'))
Definition: WebStart.php:88
This is a wrapper for APCu's shared memory functions.
A PBKDF2-hashed password.
Job for updating user activity like "last viewed" timestamps.
Implements Argon2, a modern key derivation algorithm designed to resist GPU cracking and side-channel...
Assemble the segments of a chunked upload.
A Bcrypt-hashed password.
This class formats block log entries.
Job to add recent change entries mentioning category membership changes.
Job to purge a set of URLs from CDN.
Definition: CdnPurgeJob.php:27
Job to clear a users watchlist in batches.
Job for clearing all of the "last viewed" timestamps for a user's watchlist, or setting them all to t...
Content handler for CSS pages.
Job to prune link tables for pages that were deleted.
This class formats delete log entries.
This diff implementation is mainly lifted from the LCS algorithm of the Eclipse project which in turn...
Definition: DiffEngine.php:47
Class representing a 'diff' between two sequences of strings.
Definition: Diff.php:32
Fix any double redirects after moving a page.
Send an arbitrary single email.
A BagOStuff object with no objects in it.
Send an email notification.
No-op class for publishing messages into a PubSub system.
Content handler implementation for unknown content.
Maintenance script that fixes double redirects.
Job to purge the HTML/file cache for all pages that link to or use another page or file.
Simple store for keeping values in an associative array for the current process.
Hooks class.
Definition: Hooks.php:38
This class formats import log entries.
Content handler for JavaScript pages.
Class to handle job queues stored in the DB.
Definition: JobQueueDB.php:36
Content handler for JSON text.
Methods for dealing with language codes.
This password hash type layers one or more parameterized password types on top of each other.
A CentralIdLookup provider that just uses local IDs.
Local repository that stores files in the local filesystem and registers them in the wiki's own datab...
Definition: LocalRepo.php:41
Caching for the contents of localisation files.
Implements the default log formatting.
The old style of MediaWiki password hashing.
The old style of MediaWiki password hashing, with a salt.
Class representing a MediaWiki site.
This class contains schema declarations for all configuration variables known to MediaWiki core.
static getDefaultLocalTZoffset( $localtimezone)
Site language code.
static getDefaultLogo( $resourceBasePath)
static getDefaultLoadScript( $scriptPath)
static getDefaultUploadDirectory( $baseDirectory)
static getDefaultLocalFileRepo( $uploadDirectory, $scriptPath, $favicon, $uploadBaseUrl, $uploadPath, $hashedUploadDirectory, $thumbnailScriptPath, $generateThumbnailOnParse, $deletedDirectory, $updateCompatibleMetadata)
Allow users to upload files.
static getDefaultValue(string $name)
Returns the default value of the given config setting.
static getDefaultUploadPath( $scriptPath)
static getDefaultMetaNamespace( $sitename)
static getDefaultExtensionAssetsPath( $resourceBasePath)
static getDefaultDeletedDirectory( $uploadDirectory)
static listDefaultValues(string $prefix='')
Returns a generator for iterating over all config settings and their default values.
static getDefaultScript( $scriptPath)
static getDefaultResourceBasePath( $scriptPath)
static getDefaultDBerrorLogTZ( $localtimezone)
Current wiki database name.
static getDefaultSharedPrefix( $dbPrefix)
static getDefaultSharedSchema( $dbMwschema)
static getDefaultLocalStylePath( $scriptPath)
static getDefaultStylePath( $resourceBasePath)
static getDefaultFileCacheDirectory( $uploadDirectory)
static getDefaultArticlePath(string $script, $usePathInfo)
static getDefaultLocaltimezone()
Site language code.
static getDefaultRestPath( $scriptPath)
The MediaWiki class is the helper class for the index.php entry point.
Definition: MediaWiki.php:43
A wrapper class for the PECL memcached client.
A wrapper class for the pure-PHP memcached client, exposing a BagOStuff interface.
This class formats merge log entries.
This class formats move log entries.
This is a utility class for dealing with namespaces that encodes all the "magic" behaviors of them ba...
const CANONICAL_NAMES
Definitions of the NS_ constants are in Defines.php.
No-op job that does nothing.
Definition: NullJob.php:50
This class formats patrol log entries.
Send information about this MediaWiki instance to mediawiki.org.
Definition: Pingback.php:45
Profiler base class that defines the interface and some shared functionality.
Definition: Profiler.php:37
This class formats protect log entries.
Upload a file from the upload stash into the local file repo.
Puurge expired rows from the recentchanges table.
Send recent change to a Redis Pub/Sub channel.
Job to update link tables for rerendered wiki pages.
Custom job to perform updates on tables in busier environments.
LogFormatter for renameuser/renameuser logs.
A cache class that directs writes to one set of servers and reads to another.
Job for deferring the execution of RevertedTagUpdate.
This class formats rights log entries.
Class for handling updates to the site_stats table.
RDBMS-based caching module.
This program is free software; you can redistribute it and/or modify it under the terms of the GNU Ge...
Base content handler implementation for flat text contents.
Job for asynchronous rendering of thumbnails, e.g.
Send recent change notifications to a destination address over UDP.
This class formats upload log entries.
Job that initializes an user's edit count.
Job that purges expired user group memberships.
Job that updates a user's preferences.
Multi-datacenter aware caching interface.
The WebRequest class encapsulates getting at data passed in the URL or via a POSTed form stripping il...
Definition: WebRequest.php:50
Content handler for wiki text pages.
Wrapper for WinCache object caching functions; identical interface to the APC wrapper.
return[0=> 'ـ', 1=> ' ', 2=> '`', 3=> '´', 4=> '˜', 5=> '^', 6=> '¯', 7=> '‾', 8=> '˘', 9=> '˙', 10=> '¨', 11=> '˚', 12=> '˝', 13=> '᾽', 14=> '῝', 15=> '¸', 16=> '˛', 17=> '_', 18=> '‗', 19=> '῀', 20=> '﮲', 21=> '﮳', 22=> '﮴', 23=> '﮵', 24=> '﮶', 25=> '﮷', 26=> '﮸', 27=> '﮹', 28=> '﮺', 29=> '﮻', 30=> '﮼', 31=> '﮽', 32=> '﮾', 33=> '﮿', 34=> '﯀', 35=> '﯁', 36=> '゛', 37=> '゜', 38=> '-', 39=> '֊', 40=> '᐀', 41=> '᭠', 42=> '᠆', 43=> '᠇', 44=> '‐', 45=> '‒', 46=> '–', 47=> '—', 48=> '―', 49=> '⁓', 50=> '⸗', 51=> '゠', 52=> '・', 53=> ',', 54=> '՝', 55=> '،', 56=> '؍', 57=> '٫', 58=> '٬', 59=> '߸', 60=> '᠂', 61=> '᠈', 62=> '꓾', 63=> '꘍', 64=> '꛵', 65=> '︑', 66=> ';', 67=> '؛', 68=> '⁏', 69=> '꛶', 70=> ':', 71=> '։', 72=> '؞', 73=> '܃', 74=> '܄', 75=> '܅', 76=> '܆', 77=> '܇', 78=> '܈', 79=> '࠰', 80=> '࠱', 81=> '࠲', 82=> '࠳', 83=> '࠴', 84=> '࠵', 85=> '࠶', 86=> '࠷', 87=> '࠸', 88=> '࠹', 89=> '࠺', 90=> '࠻', 91=> '࠼', 92=> '࠽', 93=> '࠾', 94=> '፡', 95=> '፣', 96=> '፤', 97=> '፥', 98=> '፦', 99=> '᠄', 100=> '᠅', 101=> '༔', 102=> '៖', 103=> '᭝', 104=> '꧇', 105=> '᛫', 106=> '᛬', 107=> '᛭', 108=> '꛴', 109=> '!', 110=> '¡', 111=> '՜', 112=> '߹', 113=> '᥄', 114=> '?', 115=> '¿', 116=> '⸮', 117=> '՞', 118=> '؟', 119=> '܉', 120=> '፧', 121=> '᥅', 122=> '⳺', 123=> '⳻', 124=> '꘏', 125=> '꛷', 126=> '‽', 127=> '⸘', 128=> '.', 129=> '᠁', 130=> '۔', 131=> '܁', 132=> '܂', 133=> '።', 134=> '᠃', 135=> '᠉', 136=> '᙮', 137=> '᭜', 138=> '⳹', 139=> '⳾', 140=> '⸰', 141=> '꓿', 142=> '꘎', 143=> '꛳', 144=> '︒', 145=> '·', 146=> '⸱', 147=> '।', 148=> '॥', 149=> '꣎', 150=> '꣏', 151=> '᰻', 152=> '᰼', 153=> '꡶', 154=> '꡷', 155=> '᜵', 156=> '᜶', 157=> '꤯', 158=> '၊', 159=> '။', 160=> '។', 161=> '៕', 162=> '᪨', 163=> '᪩', 164=> '᪪', 165=> '᪫', 166=> '᭞', 167=> '᭟', 168=> '꧈', 169=> '꧉', 170=> '꩝', 171=> '꩞', 172=> '꩟', 173=> '꯫', 174=> '𐩖', 175=> '𐩗', 176=> '𑁇', 177=> '𑁈', 178=> '𑃀', 179=> '𑃁', 180=> '᱾', 181=> '᱿', 182=> '܀', 183=> '߷', 184=> '჻', 185=> '፠', 186=> '፨', 187=> '᨞', 188=> '᨟', 189=> '᭚', 190=> '᭛', 191=> '꧁', 192=> '꧂', 193=> '꧃', 194=> '꧄', 195=> '꧅', 196=> '꧆', 197=> '꧊', 198=> '꧋', 199=> '꧌', 200=> '꧍', 201=> '꛲', 202=> '꥟', 203=> '𐡗', 204=> '𐬺', 205=> '𐬻', 206=> '𐬼', 207=> '𐬽', 208=> '𐬾', 209=> '𐬿', 210=> '𑂾', 211=> '𑂿', 212=> '⁕', 213=> '⁖', 214=> '⁘', 215=> '⁙', 216=> '⁚', 217=> '⁛', 218=> '⁜', 219=> '⁝', 220=> '⁞', 221=> '⸪', 222=> '⸫', 223=> '⸬', 224=> '⸭', 225=> '⳼', 226=> '⳿', 227=> '⸙', 228=> '𐤿', 229=> '𐄀', 230=> '𐄁', 231=> '𐄂', 232=> '𐎟', 233=> '𐏐', 234=> '𐤟', 235=> '𒑰', 236=> '𒑱', 237=> '𒑲', 238=> '𒑳', 239=> '\'', 240=> '‘', 241=> '’', 242=> '‚', 243=> '‛', 244=> '‹', 245=> '›', 246=> '"', 247 => '“', 248 => '”', 249 => '„', 250 => '‟', 251 => '«', 252 => '»', 253 => '(', 254 => ')', 255 => '[', 256 => ']', 257 => '{', 258 => '}', 259 => '༺', 260 => '༻', 261 => '༼', 262 => '༽', 263 => '᚛', 264 => '᚜', 265 => '⁅', 266 => '⁆', 267 => '⧼', 268 => '⧽', 269 => '⦃', 270 => '⦄', 271 => '⦅', 272 => '⦆', 273 => '⦇', 274 => '⦈', 275 => '⦉', 276 => '⦊', 277 => '⦋', 278 => '⦌', 279 => '⦍', 280 => '⦎', 281 => '⦏', 282 => '⦐', 283 => '⦑', 284 => '⦒', 285 => '⦓', 286 => '⦔', 287 => '⦕', 288 => '⦖', 289 => '⦗', 290 => '⦘', 291 => '⟬', 292 => '⟭', 293 => '⟮', 294 => '⟯', 295 => '⸂', 296 => '⸃', 297 => '⸄', 298 => '⸅', 299 => '⸉', 300 => '⸊', 301 => '⸌', 302 => '⸍', 303 => '⸜', 304 => '⸝', 305 => '⸠', 306 => '⸡', 307 => '⸢', 308 => '⸣', 309 => '⸤', 310 => '⸥', 311 => '⸦', 312 => '⸧', 313 => '⸨', 314 => '⸩', 315 => '〈', 316 => '〉', 317 => '「', 318 => '」', 319 => '﹝', 320 => '﹞', 321 => '︗', 322 => '︘', 323 => '﴾', 324 => '﴿', 325 => '§', 326 => '¶', 327 => '⁋', 328 => '©', 329 => '®', 330 => '@', 331 => '*', 332 => '⁎', 333 => '⁑', 334 => '٭', 335 => '꙳', 336 => '/', 337 => '⁄', 338 => '\\', 339 => '&', 340 => '⅋', 341 => '⁊', 342 => '#', 343 => '%', 344 => '٪', 345 => '‰', 346 => '؉', 347 => '‱', 348 => '؊', 349 => '⁒', 350 => '†', 351 => '‡', 352 => '•', 353 => '‣', 354 => '‧', 355 => '⁃', 356 => '⁌', 357 => '⁍', 358 => '′', 359 => '‵', 360 => '‸', 361 => '※', 362 => '‿', 363 => '⁔', 364 => '⁀', 365 => '⁐', 366 => '⁁', 367 => '⁂', 368 => '⸀', 369 => '⸁', 370 => '⸆', 371 => '⸇', 372 => '⸈', 373 => '⸋', 374 => '⸎', 375 => '⸏', 376 => '⸐', 377 => '⸑', 378 => '⸒', 379 => '⸓', 380 => '⸔', 381 => '⸕', 382 => '⸖', 383 => '⸚', 384 => '⸛', 385 => '⸞', 386 => '⸟', 387 => '꙾', 388 => '՚', 389 => '՛', 390 => '՟', 391 => '־', 392 => '׀', 393 => '׃', 394 => '׆', 395 => '׳', 396 => '״', 397 => '܊', 398 => '܋', 399 => '܌', 400 => '܍', 401 => '࡞', 402 => '᠀', 403 => '॰', 404 => '꣸', 405 => '꣹', 406 => '꣺', 407 => '෴', 408 => '๚', 409 => '๛', 410 => '꫞', 411 => '꫟', 412 => '༄', 413 => '༅', 414 => '༆', 415 => '༇', 416 => '༈', 417 => '༉', 418 => '༊', 419 => '࿐', 420 => '࿑', 421 => '་', 422 => '།', 423 => '༎', 424 => '༏', 425 => '༐', 426 => '༑', 427 => '༒', 428 => '྅', 429 => '࿒', 430 => '࿓', 431 => '࿔', 432 => '࿙', 433 => '࿚', 434 => '᰽', 435 => '᰾', 436 => '᰿', 437 => '᥀', 438 => '၌', 439 => '၍', 440 => '၎', 441 => '၏', 442 => '႞', 443 => '႟', 444 => '꩷', 445 => '꩸', 446 => '꩹', 447 => 'ៗ', 448 => '៘', 449 => '៙', 450 => '៚', 451 => '᪠', 452 => '᪡', 453 => '᪢', 454 => '᪣', 455 => '᪤', 456 => '᪥', 457 => '᪦', 458 => '᪬', 459 => '᪭', 460 => '᙭', 461 => '⵰', 462 => '꡴', 463 => '꡵', 464 => '᯼', 465 => '᯽', 466 => '᯾', 467 => '᯿', 468 => '꤮', 469 => '꧞', 470 => '꧟', 471 => '꩜', 472 => '𑁉', 473 => '𑁊', 474 => '𑁋', 475 => '𑁌', 476 => '𑁍', 477 => '𐩐', 478 => '𐩑', 479 => '𐩒', 480 => '𐩓', 481 => '𐩔', 482 => '𐩕', 483 => '𐩘', 484 => '𐬹', 485 => '𑂻', 486 => '𑂼', 487 => 'ʹ', 488 => '͵', 489 => 'ʺ', 490 => '˂', 491 => '˃', 492 => '˄', 493 => '˅', 494 => 'ˆ', 495 => 'ˇ', 496 => 'ˈ', 497 => 'ˉ', 498 => 'ˊ', 499 => 'ˋ', 500 => 'ˌ', 501 => 'ˍ', 502 => 'ˎ', 503 => 'ˏ', 504 => '˒', 505 => '˓', 506 => '˔', 507 => '˕', 508 => '˖', 509 => '˗', 510 => '˞', 511 => '˟', 512 => '˥', 513 => '˦', 514 => '˧', 515 => '˨', 516 => '˩', 517 => '˪', 518 => '˫', 519 => 'ˬ', 520 => '˭', 521 => '˯', 522 => '˰', 523 => '˱', 524 => '˲', 525 => '˳', 526 => '˴', 527 => '˵', 528 => '˶', 529 => '˷', 530 => '˸', 531 => '˹', 532 => '˺', 533 => '˻', 534 => '˼', 535 => '˽', 536 => '˾', 537 => '˿', 538 => '᎐', 539 => '᎑', 540 => '᎒', 541 => '᎓', 542 => '᎔', 543 => '᎕', 544 => '᎖', 545 => '᎗', 546 => '᎘', 547 => '᎙', 548 => '꜀', 549 => '꜁', 550 => '꜂', 551 => '꜃', 552 => '꜄', 553 => '꜅', 554 => '꜆', 555 => '꜇', 556 => '꜈', 557 => '꜉', 558 => '꜊', 559 => '꜋', 560 => '꜌', 561 => '꜍', 562 => '꜎', 563 => '꜏', 564 => '꜐', 565 => '꜑', 566 => '꜒', 567 => '꜓', 568 => '꜔', 569 => '꜕', 570 => '꜖', 571 => 'ꜗ', 572 => 'ꜘ', 573 => 'ꜙ', 574 => 'ꜚ', 575 => 'ꜛ', 576 => 'ꜜ', 577 => 'ꜝ', 578 => 'ꜞ', 579 => 'ꜟ', 580 => '꜠', 581 => '꜡', 582 => 'ꞈ', 583 => '꞉', 584 => '꞊', 585 => '°', 586 => '҂', 587 => '؈', 588 => '؎', 589 => '؏', 590 => '۞', 591 => '۩', 592 => '﷽', 593 => '߶', 594 => '৺', 595 => '୰', 596 => '௳', 597 => '௴', 598 => '௵', 599 => '௶', 600 => '௷', 601 => '௸', 602 => '௺', 603 => '౿', 604 => '൹', 605 => '꠨', 606 => '꠩', 607 => '꠪', 608 => '꠫', 609 => '꠶', 610 => '꠷', 611 => '꠹', 612 => '๏', 613 => '༁', 614 => '༂', 615 => '༃', 616 => '༓', 617 => '༕', 618 => '༖', 619 => '༗', 620 => '༚', 621 => '༛', 622 => '༜', 623 => '༝', 624 => '༞', 625 => '༟', 626 => '༴', 627 => '༶', 628 => '༸', 629 => '྾', 630 => '྿', 631 => '࿀', 632 => '࿁', 633 => '࿂', 634 => '࿃', 635 => '࿄', 636 => '࿅', 637 => '࿇', 638 => '࿈', 639 => '࿉', 640 => '࿊', 641 => '࿋', 642 => '࿌', 643 => '࿎', 644 => '࿏', 645 => '࿕', 646 => '࿖', 647 => '࿗', 648 => '࿘', 649 => '᧠', 650 => '᧡', 651 => '᧢', 652 => '᧣', 653 => '᧤', 654 => '᧥', 655 => '᧦', 656 => '᧧', 657 => '᧨', 658 => '᧩', 659 => '᧪', 660 => '᧫', 661 => '᧬', 662 => '᧭', 663 => '᧮', 664 => '᧯', 665 => '᧰', 666 => '᧱', 667 => '᧲', 668 => '᧳', 669 => '᧴', 670 => '᧵', 671 => '᧶', 672 => '᧷', 673 => '᧸', 674 => '᧹', 675 => '᧺', 676 => '᧻', 677 => '᧼', 678 => '᧽', 679 => '᧾', 680 => '᧿', 681 => '᭡', 682 => '᭢', 683 => '᭣', 684 => '᭤', 685 => '᭥', 686 => '᭦', 687 => '᭧', 688 => '᭨', 689 => '᭩', 690 => '᭪', 691 => '᭴', 692 => '᭵', 693 => '᭶', 694 => '᭷', 695 => '᭸', 696 => '᭹', 697 => '᭺', 698 => '᭻', 699 => '᭼', 700 => '℄', 701 => '℈', 702 => '℔', 703 => '℗', 704 => '℘', 705 => '℞', 706 => '℟', 707 => '℣', 708 => '℥', 709 => '℧', 710 => '℩', 711 => '℮', 712 => '℺', 713 => '⅁', 714 => '⅂', 715 => '⅃', 716 => '⅄', 717 => '⅊', 718 => '⅌', 719 => '⅍', 720 => '⅏', 721 => '←', 722 => '→', 723 => '↑', 724 => '↓', 725 => '↔', 726 => '↕', 727 => '↖', 728 => '↗', 729 => '↘', 730 => '↙', 731 => '↜', 732 => '↝', 733 => '↞', 734 => '↟', 735 => '↠', 736 => '↡', 737 => '↢', 738 => '↣', 739 => '↤', 740 => '↥', 741 => '↦', 742 => '↧', 743 => '↨', 744 => '↩', 745 => '↪', 746 => '↫', 747 => '↬', 748 => '↭', 749 => '↯', 750 => '↰', 751 => '↱', 752 => '↲', 753 => '↳', 754 => '↴', 755 => '↵', 756 => '↶', 757 => '↷', 758 => '↸', 759 => '↹', 760 => '↺', 761 => '↻', 762 => '↼', 763 => '↽', 764 => '↾', 765 => '↿', 766 => '⇀', 767 => '⇁', 768 => '⇂', 769 => '⇃', 770 => '⇄', 771 => '⇅', 772 => '⇆', 773 => '⇇', 774 => '⇈', 775 => '⇉', 776 => '⇊', 777 => '⇋', 778 => '⇌', 779 => '⇐', 780 => '⇑', 781 => '⇒', 782 => '⇓', 783 => '⇔', 784 => '⇕', 785 => '⇖', 786 => '⇗', 787 => '⇘', 788 => '⇙', 789 => '⇚', 790 => '⇛', 791 => '⇜', 792 => '⇝', 793 => '⇞', 794 => '⇟', 795 => '⇠', 796 => '⇡', 797 => '⇢', 798 => '⇣', 799 => '⇤', 800 => '⇥', 801 => '⇦', 802 => '⇧', 803 => '⇨', 804 => '⇩', 805 => '⇪', 806 => '⇫', 807 => '⇬', 808 => '⇭', 809 => '⇮', 810 => '⇯', 811 => '⇰', 812 => '⇱', 813 => '⇲', 814 => '⇳', 815 => '⇴', 816 => '⇵', 817 => '⇶', 818 => '⇷', 819 => '⇸', 820 => '⇹', 821 => '⇺', 822 => '⇻', 823 => '⇼', 824 => '⇽', 825 => '⇾', 826 => '⇿', 827 => '∀', 828 => '∁', 829 => '∂', 830 => '∃', 831 => '∅', 832 => '∆', 833 => '∇', 834 => '∈', 835 => '∊', 836 => '∋', 837 => '∍', 838 => '϶', 839 => '∎', 840 => '∏', 841 => '∐', 842 => '∑', 843 => '+', 844 => '±', 845 => '÷', 846 => '×', 847 => '<', 848 => '=', 849 => '>', 850 => '¬', 851 => '|', 852 => '¦', 853 => '‖', 854 => '~', 855 => '−', 856 => '∓', 857 => '∔', 858 => '∕', 859 => '∖', 860 => '∗', 861 => '∘', 862 => '∙', 863 => '√', 864 => '∛', 865 => '؆', 866 => '∜', 867 => '؇', 868 => '∝', 869 => '∞', 870 => '∟', 871 => '∠', 872 => '∡', 873 => '∢', 874 => '∣', 875 => '∥', 876 => '∧', 877 => '∨', 878 => '∩', 879 => '∪', 880 => '∫', 881 => '∮', 882 => '∱', 883 => '∲', 884 => '∳', 885 => '∴', 886 => '∵', 887 => '∶', 888 => '∷', 889 => '∸', 890 => '∹', 891 => '∺', 892 => '∻', 893 => '∼', 894 => '∽', 895 => '∾', 896 => '∿', 897 => '≀', 898 => '≂', 899 => '≃', 900 => '≅', 901 => '≆', 902 => '≈', 903 => '≊', 904 => '≋', 905 => '≌', 906 => '≍', 907 => '≎', 908 => '≏', 909 => '≐', 910 => '≑', 911 => '≒', 912 => '≓', 913 => '≔', 914 => '≕', 915 => '≖', 916 => '≗', 917 => '≘', 918 => '≙', 919 => '≚', 920 => '≛', 921 => '≜', 922 => '≝', 923 => '≞', 924 => '≟', 925 => '≡', 926 => '≣', 927 => '≤', 928 => '≥', 929 => '≦', 930 => '≧', 931 => '≨', 932 => '≩', 933 => '≪', 934 => '≫', 935 => '≬', 936 => '≲', 937 => '≳', 938 => '≶', 939 => '≷', 940 => '≺', 941 => '≻', 942 => '≼', 943 => '≽', 944 => '≾', 945 => '≿', 946 => '⊂', 947 => '⊃', 948 => '⊆', 949 => '⊇', 950 => '⊊', 951 => '⊋', 952 => '⊌', 953 => '⊍', 954 => '⊎', 955 => '⊏', 956 => '⊐', 957 => '⊑', 958 => '⊒', 959 => '⊓', 960 => '⊔', 961 => '⊕', 962 => '⊖', 963 => '⊗', 964 => '⊘', 965 => '⊙', 966 => '⊚', 967 => '⊛', 968 => '⊜', 969 => '⊝', 970 => '⊞', 971 => '⊟', 972 => '⊠', 973 => '⊡', 974 => '⊢', 975 => '⊣', 976 => '⊤', 977 => '⊥', 978 => '⊦', 979 => '⊧', 980 => '⊨', 981 => '⊩', 982 => '⊪', 983 => '⊫', 984 => '⊰', 985 => '⊱', 986 => '⊲', 987 => '⊳', 988 => '⊴', 989 => '⊵', 990 => '⊶', 991 => '⊷', 992 => '⊸', 993 => '⊹', 994 => '⊺', 995 => '⊻', 996 => '⊼', 997 => '⊽', 998 => '⊾', 999 => '⊿', 1000 => '⋀', 1001 => '⋁', 1002 => '⋂', 1003 => '⋃', 1004 => '⋄', 1005 => '⋅', 1006 => '⋆', 1007 => '⋇', 1008 => '⋈', 1009 => '⋉', 1010 => '⋊', 1011 => '⋋', 1012 => '⋌', 1013 => '⋍', 1014 => '⋎', 1015 => '⋏', 1016 => '⋐', 1017 => '⋑', 1018 => '⋒', 1019 => '⋓', 1020 => '⋔', 1021 => '⋕', 1022 => '⋖', 1023 => '⋗', 1024 => '⋘', 1025 => '⋙', 1026 => '⋚', 1027 => '⋛', 1028 => '⋜', 1029 => '⋝', 1030 => '⋞', 1031 => '⋟', 1032 => '⋤', 1033 => '⋥', 1034 => '⋦', 1035 => '⋧', 1036 => '⋨', 1037 => '⋩', 1038 => '⋮', 1039 => '⋯', 1040 => '⋰', 1041 => '⋱', 1042 => '⋲', 1043 => '⋳', 1044 => '⋴', 1045 => '⋵', 1046 => '⋶', 1047 => '⋷', 1048 => '⋸', 1049 => '⋹', 1050 => '⋺', 1051 => '⋻', 1052 => '⋼', 1053 => '⋽', 1054 => '⋾', 1055 => '⋿', 1056 => '⌀', 1057 => '⌁', 1058 => '⌂', 1059 => '⌃', 1060 => '⌄', 1061 => '⌅', 1062 => '⌆', 1063 => '⌇', 1064 => '⌈', 1065 => '⌉', 1066 => '⌊', 1067 => '⌋', 1068 => '⌌', 1069 => '⌍', 1070 => '⌎', 1071 => '⌏', 1072 => '⌐', 1073 => '⌑', 1074 => '⌒', 1075 => '⌓', 1076 => '⌔', 1077 => '⌕', 1078 => '⌖', 1079 => '⌗', 1080 => '⌘', 1081 => '⌙', 1082 => '⌚', 1083 => '⌛', 1084 => '⌜', 1085 => '⌝', 1086 => '⌞', 1087 => '⌟', 1088 => '⌠', 1089 => '⌡', 1090 => '⌢', 1091 => '⌣', 1092 => '⌤', 1093 => '⌥', 1094 => '⌦', 1095 => '⌧', 1096 => '⌨', 1097 => '⌫', 1098 => '⌬', 1099 => '⌭', 1100 => '⌮', 1101 => '⌯', 1102 => '⌰', 1103 => '⌱', 1104 => '⌲', 1105 => '⌳', 1106 => '⌴', 1107 => '⌵', 1108 => '⌶', 1109 => '⌷', 1110 => '⌸', 1111 => '⌹', 1112 => '⌺', 1113 => '⌻', 1114 => '⌼', 1115 => '⌽', 1116 => '⌾', 1117 => '⌿', 1118 => '⍀', 1119 => '⍁', 1120 => '⍂', 1121 => '⍃', 1122 => '⍄', 1123 => '⍅', 1124 => '⍆', 1125 => '⍇', 1126 => '⍈', 1127 => '⍉', 1128 => '⍊', 1129 => '⍋', 1130 => '⍌', 1131 => '⍍', 1132 => '⍎', 1133 => '⍏', 1134 => '⍐', 1135 => '⍑', 1136 => '⍒', 1137 => '⍓', 1138 => '⍔', 1139 => '⍕', 1140 => '⍖', 1141 => '⍗', 1142 => '⍘', 1143 => '⍙', 1144 => '⍚', 1145 => '⍛', 1146 => '⍜', 1147 => '⍝', 1148 => '⍞', 1149 => '⍟', 1150 => '⍠', 1151 => '⍡', 1152 => '⍢', 1153 => '⍣', 1154 => '⍤', 1155 => '⍥', 1156 => '⍦', 1157 => '⍧', 1158 => '⍨', 1159 => '⍩', 1160 => '⍪', 1161 => '⍫', 1162 => '⍬', 1163 => '⍭', 1164 => '⍮', 1165 => '⍯', 1166 => '⍰', 1167 => '⍱', 1168 => '⍲', 1169 => '⍳', 1170 => '⍴', 1171 => '⍵', 1172 => '⍶', 1173 => '⍷', 1174 => '⍸', 1175 => '⍹', 1176 => '⍺', 1177 => '⍻', 1178 => '⍼', 1179 => '⍽', 1180 => '⍾', 1181 => '⍿', 1182 => '⎀', 1183 => '⎁', 1184 => '⎂', 1185 => '⎃', 1186 => '⎄', 1187 => '⎅', 1188 => '⎆', 1189 => '⎇', 1190 => '⎈', 1191 => '⎉', 1192 => '⎊', 1193 => '⎋', 1194 => '⎌', 1195 => '⎍', 1196 => '⎎', 1197 => '⎏', 1198 => '⎐', 1199 => '⎑', 1200 => '⎒', 1201 => '⎓', 1202 => '⎔', 1203 => '⎕', 1204 => '⎖', 1205 => '⎗', 1206 => '⎘', 1207 => '⎙', 1208 => '⎚', 1209 => '⎛', 1210 => '⎜', 1211 => '⎝', 1212 => '⎞', 1213 => '⎟', 1214 => '⎠', 1215 => '⎡', 1216 => '⎢', 1217 => '⎣', 1218 => '⎤', 1219 => '⎥', 1220 => '⎦', 1221 => '⎧', 1222 => '⎨', 1223 => '⎩', 1224 => '⎪', 1225 => '⎫', 1226 => '⎬', 1227 => '⎭', 1228 => '⎮', 1229 => '⎯', 1230 => '⎰', 1231 => '⎱', 1232 => '⎲', 1233 => '⎳', 1234 => '⎴', 1235 => '⎵', 1236 => '⎶', 1237 => '⎷', 1238 => '⎸', 1239 => '⎹', 1240 => '⎺', 1241 => '⎻', 1242 => '⎼', 1243 => '⎽', 1244 => '⎾', 1245 => '⎿', 1246 => '⏀', 1247 => '⏁', 1248 => '⏂', 1249 => '⏃', 1250 => '⏄', 1251 => '⏅', 1252 => '⏆', 1253 => '⏇', 1254 => '⏈', 1255 => '⏉', 1256 => '⏊', 1257 => '⏋', 1258 => '⏌', 1259 => '⏍', 1260 => '⏎', 1261 => '⏏', 1262 => '⏐', 1263 => '⏑', 1264 => '⏒', 1265 => '⏓', 1266 => '⏔', 1267 => '⏕', 1268 => '⏖', 1269 => '⏗', 1270 => '⏘', 1271 => '⏙', 1272 => '⏚', 1273 => '⏛', 1274 => '⏜', 1275 => '⏝', 1276 => '⏞', 1277 => '⏟', 1278 => '⏠', 1279 => '⏡', 1280 => '⏢', 1281 => '⏣', 1282 => '⏤', 1283 => '⏥', 1284 => '⏦', 1285 => '⏧', 1286 => '⏨', 1287 => '⏩', 1288 => '⏪', 1289 => '⏫', 1290 => '⏬', 1291 => '⏭', 1292 => '⏮', 1293 => '⏯', 1294 => '⏰', 1295 => '⏱', 1296 => '⏲', 1297 => '⏳', 1298 => '␀', 1299 => '␁', 1300 => '␂', 1301 => '␃', 1302 => '␄', 1303 => '␅', 1304 => '␆', 1305 => '␇', 1306 => '␈', 1307 => '␉', 1308 => '␊', 1309 => '␋', 1310 => '␌', 1311 => '␍', 1312 => '␎', 1313 => '␏', 1314 => '␐', 1315 => '␑', 1316 => '␒', 1317 => '␓', 1318 => '␔', 1319 => '␕', 1320 => '␖', 1321 => '␗', 1322 => '␘', 1323 => '␙', 1324 => '␚', 1325 => '␛', 1326 => '␜', 1327 => '␝', 1328 => '␞', 1329 => '␟', 1330 => '␠', 1331 => '␡', 1332 => '␢', 1333 => '␣', 1334 => '␤', 1335 => '␥', 1336 => '␦', 1337 => '⑀', 1338 => '⑁', 1339 => '⑂', 1340 => '⑃', 1341 => '⑄', 1342 => '⑅', 1343 => '⑆', 1344 => '⑇', 1345 => '⑈', 1346 => '⑉', 1347 => '⑊', 1348 => '─', 1349 => '━', 1350 => '│', 1351 => '┃', 1352 => '┄', 1353 => '┅', 1354 => '┆', 1355 => '┇', 1356 => '┈', 1357 => '┉', 1358 => '┊', 1359 => '┋', 1360 => '┌', 1361 => '┍', 1362 => '┎', 1363 => '┏', 1364 => '┐', 1365 => '┑', 1366 => '┒', 1367 => '┓', 1368 => '└', 1369 => '┕', 1370 => '┖', 1371 => '┗', 1372 => '┘', 1373 => '┙', 1374 => '┚', 1375 => '┛', 1376 => '├', 1377 => '┝', 1378 => '┞', 1379 => '┟', 1380 => '┠', 1381 => '┡', 1382 => '┢', 1383 => '┣', 1384 => '┤', 1385 => '┥', 1386 => '┦', 1387 => '┧', 1388 => '┨', 1389 => '┩', 1390 => '┪', 1391 => '┫', 1392 => '┬', 1393 => '┭', 1394 => '┮', 1395 => '┯', 1396 => '┰', 1397 => '┱', 1398 => '┲', 1399 => '┳', 1400 => '┴', 1401 => '┵', 1402 => '┶', 1403 => '┷', 1404 => '┸', 1405 => '┹', 1406 => '┺', 1407 => '┻', 1408 => '┼', 1409 => '┽', 1410 => '┾', 1411 => '┿', 1412 => '╀', 1413 => '╁', 1414 => '╂', 1415 => '╃', 1416 => '╄', 1417 => '╅', 1418 => '╆', 1419 => '╇', 1420 => '╈', 1421 => '╉', 1422 => '╊', 1423 => '╋', 1424 => '╌', 1425 => '╍', 1426 => '╎', 1427 => '╏', 1428 => '═', 1429 => '║', 1430 => '╒', 1431 => '╓', 1432 => '╔', 1433 => '╕', 1434 => '╖', 1435 => '╗', 1436 => '╘', 1437 => '╙', 1438 => '╚', 1439 => '╛', 1440 => '╜', 1441 => '╝', 1442 => '╞', 1443 => '╟', 1444 => '╠', 1445 => '╡', 1446 => '╢', 1447 => '╣', 1448 => '╤', 1449 => '╥', 1450 => '╦', 1451 => '╧', 1452 => '╨', 1453 => '╩', 1454 => '╪', 1455 => '╫', 1456 => '╬', 1457 => '╭', 1458 => '╮', 1459 => '╯', 1460 => '╰', 1461 => '╱', 1462 => '╲', 1463 => '╳', 1464 => '╴', 1465 => '╵', 1466 => '╶', 1467 => '╷', 1468 => '╸', 1469 => '╹', 1470 => '╺', 1471 => '╻', 1472 => '╼', 1473 => '╽', 1474 => '╾', 1475 => '╿', 1476 => '▀', 1477 => '▁', 1478 => '▂', 1479 => '▃', 1480 => '▄', 1481 => '▅', 1482 => '▆', 1483 => '▇', 1484 => '█', 1485 => '▉', 1486 => '▊', 1487 => '▋', 1488 => '▌', 1489 => '▍', 1490 => '▎', 1491 => '▏', 1492 => '▐', 1493 => '░', 1494 => '▒', 1495 => '▓', 1496 => '▔', 1497 => '▕', 1498 => '▖', 1499 => '▗', 1500 => '▘', 1501 => '▙', 1502 => '▚', 1503 => '▛', 1504 => '▜', 1505 => '▝', 1506 => '▞', 1507 => '▟', 1508 => '■', 1509 => '□', 1510 => '▢', 1511 => '▣', 1512 => '▤', 1513 => '▥', 1514 => '▦', 1515 => '▧', 1516 => '▨', 1517 => '▩', 1518 => '▪', 1519 => '▫', 1520 => '▬', 1521 => '▭', 1522 => '▮', 1523 => '▯', 1524 => '▰', 1525 => '▱', 1526 => '▲', 1527 => '△', 1528 => '▴', 1529 => '▵', 1530 => '▶', 1531 => '▷', 1532 => '▸', 1533 => '▹', 1534 => '►', 1535 => '▻', 1536 => '▼', 1537 => '▽', 1538 => '▾', 1539 => '▿', 1540 => '◀', 1541 => '◁', 1542 => '◂', 1543 => '◃', 1544 => '◄', 1545 => '◅', 1546 => '◆', 1547 => '◇', 1548 => '◈', 1549 => '◉', 1550 => '◊', 1551 => '○', 1552 => '◌', 1553 => '◍', 1554 => '◎', 1555 => '●', 1556 => '◐', 1557 => '◑', 1558 => '◒', 1559 => '◓', 1560 => '◔', 1561 => '◕', 1562 => '◖', 1563 => '◗', 1564 => '◘', 1565 => '◙', 1566 => '◚', 1567 => '◛', 1568 => '◜', 1569 => '◝', 1570 => '◞', 1571 => '◟', 1572 => '◠', 1573 => '◡', 1574 => '◢', 1575 => '◣', 1576 => '◤', 1577 => '◥', 1578 => '◦', 1579 => '◧', 1580 => '◨', 1581 => '◩', 1582 => '◪', 1583 => '◫', 1584 => '◬', 1585 => '◭', 1586 => '◮', 1587 => '◯', 1588 => '◰', 1589 => '◱', 1590 => '◲', 1591 => '◳', 1592 => '◴', 1593 => '◵', 1594 => '◶', 1595 => '◷', 1596 => '◸', 1597 => '◹', 1598 => '◺', 1599 => '◻', 1600 => '◼', 1601 => '◽', 1602 => '◾', 1603 => '◿', 1604 => '☀', 1605 => '☁', 1606 => '☂', 1607 => '☃', 1608 => '☄', 1609 => '★', 1610 => '☆', 1611 => '☇', 1612 => '☈', 1613 => '☉', 1614 => '☊', 1615 => '☋', 1616 => '☌', 1617 => '☍', 1618 => '☎', 1619 => '☏', 1620 => '☐', 1621 => '☑', 1622 => '☒', 1623 => '☓', 1624 => '☔', 1625 => '☕', 1626 => '☖', 1627 => '☗', 1628 => '☘', 1629 => '☙', 1630 => '☚', 1631 => '☛', 1632 => '☜', 1633 => '☝', 1634 => '☞', 1635 => '☟', 1636 => '☠', 1637 => '☡', 1638 => '☢', 1639 => '☣', 1640 => '☤', 1641 => '☥', 1642 => '☦', 1643 => '☧', 1644 => '☨', 1645 => '☩', 1646 => '☪', 1647 => '☫', 1648 => '☬', 1649 => '☭', 1650 => '☮', 1651 => '☯', 1652 => '☸', 1653 => '☹', 1654 => '☺', 1655 => '☻', 1656 => '☼', 1657 => '☽', 1658 => '☾', 1659 => '☿', 1660 => '♀', 1661 => '♁', 1662 => '♂', 1663 => '♃', 1664 => '♄', 1665 => '♅', 1666 => '♆', 1667 => '♇', 1668 => '♈', 1669 => '♉', 1670 => '♊', 1671 => '♋', 1672 => '♌', 1673 => '♍', 1674 => '♎', 1675 => '♏', 1676 => '♐', 1677 => '♑', 1678 => '♒', 1679 => '♓', 1680 => '♔', 1681 => '♕', 1682 => '♖', 1683 => '♗', 1684 => '♘', 1685 => '♙', 1686 => '♚', 1687 => '♛', 1688 => '♜', 1689 => '♝', 1690 => '♞', 1691 => '♟', 1692 => '♠', 1693 => '♡', 1694 => '♢', 1695 => '♣', 1696 => '♤', 1697 => '♥', 1698 => '♦', 1699 => '♧', 1700 => '♨', 1701 => '♩', 1702 => '♪', 1703 => '♫', 1704 => '♬', 1705 => '♰', 1706 => '♱', 1707 => '♲', 1708 => '♳', 1709 => '♴', 1710 => '♵', 1711 => '♶', 1712 => '♷', 1713 => '♸', 1714 => '♹', 1715 => '♺', 1716 => '♻', 1717 => '♼', 1718 => '♽', 1719 => '♾', 1720 => '♿', 1721 => '⚀', 1722 => '⚁', 1723 => '⚂', 1724 => '⚃', 1725 => '⚄', 1726 => '⚅', 1727 => '⚆', 1728 => '⚇', 1729 => '⚈', 1730 => '⚉', 1731 => '⚐', 1732 => '⚑', 1733 => '⚒', 1734 => '⚓', 1735 => '⚔', 1736 => '⚕', 1737 => '⚖', 1738 => '⚗', 1739 => '⚘', 1740 => '⚙', 1741 => '⚚', 1742 => '⚛', 1743 => '⚜', 1744 => '⚝', 1745 => '⚞', 1746 => '⚟', 1747 => '⚠', 1748 => '⚡', 1749 => '⚢', 1750 => '⚣', 1751 => '⚤', 1752 => '⚥', 1753 => '⚦', 1754 => '⚧', 1755 => '⚨', 1756 => '⚩', 1757 => '⚪', 1758 => '⚫', 1759 => '⚬', 1760 => '⚭', 1761 => '⚮', 1762 => '⚯', 1763 => '⚰', 1764 => '⚱', 1765 => '⚲', 1766 => '⚳', 1767 => '⚴', 1768 => '⚵', 1769 => '⚶', 1770 => '⚷', 1771 => '⚸', 1772 => '⚹', 1773 => '⚺', 1774 => '⚻', 1775 => '⚼', 1776 => '⚽', 1777 => '⚾', 1778 => '⚿', 1779 => '⛀', 1780 => '⛁', 1781 => '⛂', 1782 => '⛃', 1783 => '⛄', 1784 => '⛅', 1785 => '⛆', 1786 => '⛇', 1787 => '⛈', 1788 => '⛉', 1789 => '⛊', 1790 => '⛋', 1791 => '⛌', 1792 => '⛍', 1793 => '⛎', 1794 => '⛏', 1795 => '⛐', 1796 => '⛑', 1797 => '⛒', 1798 => '⛓', 1799 => '⛔', 1800 => '⛕', 1801 => '⛖', 1802 => '⛗', 1803 => '⛘', 1804 => '⛙', 1805 => '⛚', 1806 => '⛛', 1807 => '⛜', 1808 => '⛝', 1809 => '⛞', 1810 => '⛟', 1811 => '⛠', 1812 => '⛡', 1813 => '⛢', 1814 => '⛣', 1815 => '⛤', 1816 => '⛥', 1817 => '⛦', 1818 => '⛧', 1819 => '⛨', 1820 => '⛩', 1821 => '⛪', 1822 => '⛫', 1823 => '⛬', 1824 => '⛭', 1825 => '⛮', 1826 => '⛯', 1827 => '⛰', 1828 => '⛱', 1829 => '⛲', 1830 => '⛳', 1831 => '⛴', 1832 => '⛵', 1833 => '⛶', 1834 => '⛷', 1835 => '⛸', 1836 => '⛹', 1837 => '⛺', 1838 => '⛻', 1839 => '⛼', 1840 => '⛽', 1841 => '⛾', 1842 => '⛿', 1843 => '✁', 1844 => '✂', 1845 => '✃', 1846 => '✄', 1847 => '✅', 1848 => '✆', 1849 => '✇', 1850 => '✈', 1851 => '✉', 1852 => '✊', 1853 => '✋', 1854 => '✌', 1855 => '✍', 1856 => '✎', 1857 => '✏', 1858 => '✐', 1859 => '✑', 1860 => '✒', 1861 => '✓', 1862 => '✔', 1863 => '✕', 1864 => '✖', 1865 => '✗', 1866 => '✘', 1867 => '✙', 1868 => '✚', 1869 => '✛', 1870 => '✜', 1871 => '✝', 1872 => '✞', 1873 => '✟', 1874 => '✠', 1875 => '✡', 1876 => '✢', 1877 => '✣', 1878 => '✤', 1879 => '✥', 1880 => '✦', 1881 => '✧', 1882 => '✨', 1883 => '✩', 1884 => '✪', 1885 => '✫', 1886 => '✬', 1887 => '✭', 1888 => '✮', 1889 => '✯', 1890 => '✰', 1891 => '✱', 1892 => '✲', 1893 => '✳', 1894 => '✴', 1895 => '✵', 1896 => '✶', 1897 => '✷', 1898 => '✸', 1899 => '✹', 1900 => '✺', 1901 => '✻', 1902 => '✼', 1903 => '✽', 1904 => '✾', 1905 => '✿', 1906 => '❀', 1907 => '❁', 1908 => '❂', 1909 => '❃', 1910 => '❄', 1911 => '❅', 1912 => '❆', 1913 => '❇', 1914 => '❈', 1915 => '❉', 1916 => '❊', 1917 => '❋', 1918 => '❌', 1919 => '❍', 1920 => '❎', 1921 => '❏', 1922 => '❐', 1923 => '❑', 1924 => '❒', 1925 => '❓', 1926 => '❔', 1927 => '❕', 1928 => '❖', 1929 => '❗', 1930 => '❘', 1931 => '❙', 1932 => '❚', 1933 => '❛', 1934 => '❜', 1935 => '❝', 1936 => '❞', 1937 => '❟', 1938 => '❠', 1939 => '❡', 1940 => '❢', 1941 => '❣', 1942 => '❤', 1943 => '❥', 1944 => '❦', 1945 => '❧', 1946 => '❨', 1947 => '❩', 1948 => '❪', 1949 => '❫', 1950 => '❬', 1951 => '❭', 1952 => '❮', 1953 => '❯', 1954 => '❰', 1955 => '❱', 1956 => '❲', 1957 => '❳', 1958 => '❴', 1959 => '❵', 1960 => '➔', 1961 => '➕', 1962 => '➖', 1963 => '➗', 1964 => '➘', 1965 => '➙', 1966 => '➚', 1967 => '➛', 1968 => '➜', 1969 => '➝', 1970 => '➞', 1971 => '➟', 1972 => '➠', 1973 => '➡', 1974 => '➢', 1975 => '➣', 1976 => '➤', 1977 => '➥', 1978 => '➦', 1979 => '➧', 1980 => '➨', 1981 => '➩', 1982 => '➪', 1983 => '➫', 1984 => '➬', 1985 => '➭', 1986 => '➮', 1987 => '➯', 1988 => '➰', 1989 => '➱', 1990 => '➲', 1991 => '➳', 1992 => '➴', 1993 => '➵', 1994 => '➶', 1995 => '➷', 1996 => '➸', 1997 => '➹', 1998 => '➺', 1999 => '➻', 2000 => '➼', 2001 => '➽', 2002 => '➾', 2003 => '➿', 2004 => '⟀', 2005 => '⟁', 2006 => '⟂', 2007 => '⟃', 2008 => '⟄', 2009 => '⟅', 2010 => '⟆', 2011 => '⟇', 2012 => '⟈', 2013 => '⟉', 2014 => '⟊', 2015 => '⟌', 2016 => '⟎', 2017 => '⟏', 2018 => '⟐', 2019 => '⟑', 2020 => '⟒', 2021 => '⟓', 2022 => '⟔', 2023 => '⟕', 2024 => '⟖', 2025 => '⟗', 2026 => '⟘', 2027 => '⟙', 2028 => '⟚', 2029 => '⟛', 2030 => '⟜', 2031 => '⟝', 2032 => '⟞', 2033 => '⟟', 2034 => '⟠', 2035 => '⟡', 2036 => '⟢', 2037 => '⟣', 2038 => '⟤', 2039 => '⟥', 2040 => '⟦', 2041 => '⟧', 2042 => '⟨', 2043 => '⟩', 2044 => '⟪', 2045 => '⟫', 2046 => '⟰', 2047 => '⟱', 2048 => '⟲', 2049 => '⟳', 2050 => '⟴', 2051 => '⟵', 2052 => '⟶', 2053 => '⟷', 2054 => '⟸', 2055 => '⟹', 2056 => '⟺', 2057 => '⟻', 2058 => '⟼', 2059 => '⟽', 2060 => '⟾', 2061 => '⟿', 2062 => '⤀', 2063 => '⤁', 2064 => '⤂', 2065 => '⤃', 2066 => '⤄', 2067 => '⤅', 2068 => '⤆', 2069 => '⤇', 2070 => '⤈', 2071 => '⤉', 2072 => '⤊', 2073 => '⤋', 2074 => '⤌', 2075 => '⤍', 2076 => '⤎', 2077 => '⤏', 2078 => '⤐', 2079 => '⤑', 2080 => '⤒', 2081 => '⤓', 2082 => '⤔', 2083 => '⤕', 2084 => '⤖', 2085 => '⤗', 2086 => '⤘', 2087 => '⤙', 2088 => '⤚', 2089 => '⤛', 2090 => '⤜', 2091 => '⤝', 2092 => '⤞', 2093 => '⤟', 2094 => '⤠', 2095 => '⤡', 2096 => '⤢', 2097 => '⤣', 2098 => '⤤', 2099 => '⤥', 2100 => '⤦', 2101 => '⤧', 2102 => '⤨', 2103 => '⤩', 2104 => '⤪', 2105 => '⤫', 2106 => '⤬', 2107 => '⤭', 2108 => '⤮', 2109 => '⤯', 2110 => '⤰', 2111 => '⤱', 2112 => '⤲', 2113 => '⤳', 2114 => '⤴', 2115 => '⤵', 2116 => '⤶', 2117 => '⤷', 2118 => '⤸', 2119 => '⤹', 2120 => '⤺', 2121 => '⤻', 2122 => '⤼', 2123 => '⤽', 2124 => '⤾', 2125 => '⤿', 2126 => '⥀', 2127 => '⥁', 2128 => '⥂', 2129 => '⥃', 2130 => '⥄', 2131 => '⥅', 2132 => '⥆', 2133 => '⥇', 2134 => '⥈', 2135 => '⥉', 2136 => '⥊', 2137 => '⥋', 2138 => '⥌', 2139 => '⥍', 2140 => '⥎', 2141 => '⥏', 2142 => '⥐', 2143 => '⥑', 2144 => '⥒', 2145 => '⥓', 2146 => '⥔', 2147 => '⥕', 2148 => '⥖', 2149 => '⥗', 2150 => '⥘', 2151 => '⥙', 2152 => '⥚', 2153 => '⥛', 2154 => '⥜', 2155 => '⥝', 2156 => '⥞', 2157 => '⥟', 2158 => '⥠', 2159 => '⥡', 2160 => '⥢', 2161 => '⥣', 2162 => '⥤', 2163 => '⥥', 2164 => '⥦', 2165 => '⥧', 2166 => '⥨', 2167 => '⥩', 2168 => '⥪', 2169 => '⥫', 2170 => '⥬', 2171 => '⥭', 2172 => '⥮', 2173 => '⥯', 2174 => '⥰', 2175 => '⥱', 2176 => '⥲', 2177 => '⥳', 2178 => '⥴', 2179 => '⥵', 2180 => '⥶', 2181 => '⥷', 2182 => '⥸', 2183 => '⥹', 2184 => '⥺', 2185 => '⥻', 2186 => '⥼', 2187 => '⥽', 2188 => '⥾', 2189 => '⥿', 2190 => '⦀', 2191 => '⦁', 2192 => '⦂', 2193 => '⦙', 2194 => '⦚', 2195 => '⦛', 2196 => '⦜', 2197 => '⦝', 2198 => '⦞', 2199 => '⦟', 2200 => '⦠', 2201 => '⦡', 2202 => '⦢', 2203 => '⦣', 2204 => '⦤', 2205 => '⦥', 2206 => '⦦', 2207 => '⦧', 2208 => '⦨', 2209 => '⦩', 2210 => '⦪', 2211 => '⦫', 2212 => '⦬', 2213 => '⦭', 2214 => '⦮', 2215 => '⦯', 2216 => '⦰', 2217 => '⦱', 2218 => '⦲', 2219 => '⦳', 2220 => '⦴', 2221 => '⦵', 2222 => '⦶', 2223 => '⦷', 2224 => '⦸', 2225 => '⦹', 2226 => '⦺', 2227 => '⦻', 2228 => '⦼', 2229 => '⦽', 2230 => '⦾', 2231 => '⦿', 2232 => '⧀', 2233 => '⧁', 2234 => '⧂', 2235 => '⧃', 2236 => '⧄', 2237 => '⧅', 2238 => '⧆', 2239 => '⧇', 2240 => '⧈', 2241 => '⧉', 2242 => '⧊', 2243 => '⧋', 2244 => '⧌', 2245 => '⧍', 2246 => '⧎', 2247 => '⧏', 2248 => '⧐', 2249 => '⧑', 2250 => '⧒', 2251 => '⧓', 2252 => '⧔', 2253 => '⧕', 2254 => '⧖', 2255 => '⧗', 2256 => '⧘', 2257 => '⧙', 2258 => '⧚', 2259 => '⧛', 2260 => '⧜', 2261 => '⧝', 2262 => '⧞', 2263 => '⧟', 2264 => '⧠', 2265 => '⧡', 2266 => '⧢', 2267 => '⧣', 2268 => '⧤', 2269 => '⧥', 2270 => '⧦', 2271 => '⧧', 2272 => '⧨', 2273 => '⧩', 2274 => '⧪', 2275 => '⧫', 2276 => '⧬', 2277 => '⧭', 2278 => '⧮', 2279 => '⧯', 2280 => '⧰', 2281 => '⧱', 2282 => '⧲', 2283 => '⧳', 2284 => '⧴', 2285 => '⧵', 2286 => '⧶', 2287 => '⧷', 2288 => '⧸', 2289 => '⧹', 2290 => '⧺', 2291 => '⧻', 2292 => '⧾', 2293 => '⧿', 2294 => '⨀', 2295 => '⨁', 2296 => '⨂', 2297 => '⨃', 2298 => '⨄', 2299 => '⨅', 2300 => '⨆', 2301 => '⨇', 2302 => '⨈', 2303 => '⨉', 2304 => '⨊', 2305 => '⨋', 2306 => '⨍', 2307 => '⨎', 2308 => '⨏', 2309 => '⨐', 2310 => '⨑', 2311 => '⨒', 2312 => '⨓', 2313 => '⨔', 2314 => '⨕', 2315 => '⨖', 2316 => '⨗', 2317 => '⨘', 2318 => '⨙', 2319 => '⨚', 2320 => '⨛', 2321 => '⨜', 2322 => '⨝', 2323 => '⨞', 2324 => '⨟', 2325 => '⨠', 2326 => '⨡', 2327 => '⨢', 2328 => '⨣', 2329 => '⨤', 2330 => '⨥', 2331 => '⨦', 2332 => '⨧', 2333 => '⨨', 2334 => '⨩', 2335 => '⨪', 2336 => '⨫', 2337 => '⨬', 2338 => '⨭', 2339 => '⨮', 2340 => '⨯', 2341 => '⨰', 2342 => '⨱', 2343 => '⨲', 2344 => '⨳', 2345 => '⨴', 2346 => '⨵', 2347 => '⨶', 2348 => '⨷', 2349 => '⨸', 2350 => '⨹', 2351 => '⨺', 2352 => '⨻', 2353 => '⨼', 2354 => '⨽', 2355 => '⨾', 2356 => '⨿', 2357 => '⩀', 2358 => '⩁', 2359 => '⩂', 2360 => '⩃', 2361 => '⩄', 2362 => '⩅', 2363 => '⩆', 2364 => '⩇', 2365 => '⩈', 2366 => '⩉', 2367 => '⩊', 2368 => '⩋', 2369 => '⩌', 2370 => '⩍', 2371 => '⩎', 2372 => '⩏', 2373 => '⩐', 2374 => '⩑', 2375 => '⩒', 2376 => '⩓', 2377 => '⩔', 2378 => '⩕', 2379 => '⩖', 2380 => '⩗', 2381 => '⩘', 2382 => '⩙', 2383 => '⩚', 2384 => '⩛', 2385 => '⩜', 2386 => '⩝', 2387 => '⩞', 2388 => '⩟', 2389 => '⩠', 2390 => '⩡', 2391 => '⩢', 2392 => '⩣', 2393 => '⩤', 2394 => '⩥', 2395 => '⩦', 2396 => '⩧', 2397 => '⩨', 2398 => '⩩', 2399 => '⩪', 2400 => '⩫', 2401 => '⩬', 2402 => '⩭', 2403 => '⩮', 2404 => '⩯', 2405 => '⩰', 2406 => '⩱', 2407 => '⩲', 2408 => '⩳', 2409 => '⩷', 2410 => '⩸', 2411 => '⩹', 2412 => '⩺', 2413 => '⩻', 2414 => '⩼', 2415 => '⩽', 2416 => '⩾', 2417 => '⩿', 2418 => '⪀', 2419 => '⪁', 2420 => '⪂', 2421 => '⪃', 2422 => '⪄', 2423 => '⪅', 2424 => '⪆', 2425 => '⪇', 2426 => '⪈', 2427 => '⪉', 2428 => '⪊', 2429 => '⪋', 2430 => '⪌', 2431 => '⪍', 2432 => '⪎', 2433 => '⪏', 2434 => '⪐', 2435 => '⪑', 2436 => '⪒', 2437 => '⪓', 2438 => '⪔', 2439 => '⪕', 2440 => '⪖', 2441 => '⪗', 2442 => '⪘', 2443 => '⪙', 2444 => '⪚', 2445 => '⪛', 2446 => '⪜', 2447 => '⪝', 2448 => '⪞', 2449 => '⪟', 2450 => '⪠', 2451 => '⪡', 2452 => '⪢', 2453 => '⪣', 2454 => '⪤', 2455 => '⪥', 2456 => '⪦', 2457 => '⪧', 2458 => '⪨', 2459 => '⪩', 2460 => '⪪', 2461 => '⪫', 2462 => '⪬', 2463 => '⪭', 2464 => '⪮', 2465 => '⪯', 2466 => '⪰', 2467 => '⪱', 2468 => '⪲', 2469 => '⪳', 2470 => '⪴', 2471 => '⪵', 2472 => '⪶', 2473 => '⪷', 2474 => '⪸', 2475 => '⪹', 2476 => '⪺', 2477 => '⪻', 2478 => '⪼', 2479 => '⪽', 2480 => '⪾', 2481 => '⪿', 2482 => '⫀', 2483 => '⫁', 2484 => '⫂', 2485 => '⫃', 2486 => '⫄', 2487 => '⫅', 2488 => '⫆', 2489 => '⫇', 2490 => '⫈', 2491 => '⫉', 2492 => '⫊', 2493 => '⫋', 2494 => '⫌', 2495 => '⫍', 2496 => '⫎', 2497 => '⫏', 2498 => '⫐', 2499 => '⫑', 2500 => '⫒', 2501 => '⫓', 2502 => '⫔', 2503 => '⫕', 2504 => '⫖', 2505 => '⫗', 2506 => '⫘', 2507 => '⫙', 2508 => '⫚', 2509 => '⫛', 2510 => '⫝', 2511 => '⫞', 2512 => '⫟', 2513 => '⫠', 2514 => '⫡', 2515 => '⫢', 2516 => '⫣', 2517 => '⫤', 2518 => '⫥', 2519 => '⫦', 2520 => '⫧', 2521 => '⫨', 2522 => '⫩', 2523 => '⫪', 2524 => '⫫', 2525 => '⫬', 2526 => '⫭', 2527 => '⫮', 2528 => '⫯', 2529 => '⫰', 2530 => '⫱', 2531 => '⫲', 2532 => '⫳', 2533 => '⫴', 2534 => '⫵', 2535 => '⫶', 2536 => '⫷', 2537 => '⫸', 2538 => '⫹', 2539 => '⫺', 2540 => '⫻', 2541 => '⫼', 2542 => '⫽', 2543 => '⫾', 2544 => '⫿', 2545 => '⬀', 2546 => '⬁', 2547 => '⬂', 2548 => '⬃', 2549 => '⬄', 2550 => '⬅', 2551 => '⬆', 2552 => '⬇', 2553 => '⬈', 2554 => '⬉', 2555 => '⬊', 2556 => '⬋', 2557 => '⬌', 2558 => '⬍', 2559 => '⬎', 2560 => '⬏', 2561 => '⬐', 2562 => '⬑', 2563 => '⬒', 2564 => '⬓', 2565 => '⬔', 2566 => '⬕', 2567 => '⬖', 2568 => '⬗', 2569 => '⬘', 2570 => '⬙', 2571 => '⬚', 2572 => '⬛', 2573 => '⬜', 2574 => '⬝', 2575 => '⬞', 2576 => '⬟', 2577 => '⬠', 2578 => '⬡', 2579 => '⬢', 2580 => '⬣', 2581 => '⬤', 2582 => '⬥', 2583 => '⬦', 2584 => '⬧', 2585 => '⬨', 2586 => '⬩', 2587 => '⬪', 2588 => '⬫', 2589 => '⬬', 2590 => '⬭', 2591 => '⬮', 2592 => '⬯', 2593 => '⬰', 2594 => '⬱', 2595 => '⬲', 2596 => '⬳', 2597 => '⬴', 2598 => '⬵', 2599 => '⬶', 2600 => '⬷', 2601 => '⬸', 2602 => '⬹', 2603 => '⬺', 2604 => '⬻', 2605 => '⬼', 2606 => '⬽', 2607 => '⬾', 2608 => '⬿', 2609 => '⭀', 2610 => '⭁', 2611 => '⭂', 2612 => '⭃', 2613 => '⭄', 2614 => '⭅', 2615 => '⭆', 2616 => '⭇', 2617 => '⭈', 2618 => '⭉', 2619 => '⭊', 2620 => '⭋', 2621 => '⭌', 2622 => '⭐', 2623 => '⭑', 2624 => '⭒', 2625 => '⭓', 2626 => '⭔', 2627 => '⭕', 2628 => '⭖', 2629 => '⭗', 2630 => '⭘', 2631 => '⭙', 2632 => '⳥', 2633 => '⳦', 2634 => '⳧', 2635 => '⳨', 2636 => '⳩', 2637 => '⳪', 2638 => '⠀', 2639 => '⠁', 2640 => '⠂', 2641 => '⠃', 2642 => '⠄', 2643 => '⠅', 2644 => '⠆', 2645 => '⠇', 2646 => '⠈', 2647 => '⠉', 2648 => '⠊', 2649 => '⠋', 2650 => '⠌', 2651 => '⠍', 2652 => '⠎', 2653 => '⠏', 2654 => '⠐', 2655 => '⠑', 2656 => '⠒', 2657 => '⠓', 2658 => '⠔', 2659 => '⠕', 2660 => '⠖', 2661 => '⠗', 2662 => '⠘', 2663 => '⠙', 2664 => '⠚', 2665 => '⠛', 2666 => '⠜', 2667 => '⠝', 2668 => '⠞', 2669 => '⠟', 2670 => '⠠', 2671 => '⠡', 2672 => '⠢', 2673 => '⠣', 2674 => '⠤', 2675 => '⠥', 2676 => '⠦', 2677 => '⠧', 2678 => '⠨', 2679 => '⠩', 2680 => '⠪', 2681 => '⠫', 2682 => '⠬', 2683 => '⠭', 2684 => '⠮', 2685 => '⠯', 2686 => '⠰', 2687 => '⠱', 2688 => '⠲', 2689 => '⠳', 2690 => '⠴', 2691 => '⠵', 2692 => '⠶', 2693 => '⠷', 2694 => '⠸', 2695 => '⠹', 2696 => '⠺', 2697 => '⠻', 2698 => '⠼', 2699 => '⠽', 2700 => '⠾', 2701 => '⠿', 2702 => '⡀', 2703 => '⡁', 2704 => '⡂', 2705 => '⡃', 2706 => '⡄', 2707 => '⡅', 2708 => '⡆', 2709 => '⡇', 2710 => '⡈', 2711 => '⡉', 2712 => '⡊', 2713 => '⡋', 2714 => '⡌', 2715 => '⡍', 2716 => '⡎', 2717 => '⡏', 2718 => '⡐', 2719 => '⡑', 2720 => '⡒', 2721 => '⡓', 2722 => '⡔', 2723 => '⡕', 2724 => '⡖', 2725 => '⡗', 2726 => '⡘', 2727 => '⡙', 2728 => '⡚', 2729 => '⡛', 2730 => '⡜', 2731 => '⡝', 2732 => '⡞', 2733 => '⡟', 2734 => '⡠', 2735 => '⡡', 2736 => '⡢', 2737 => '⡣', 2738 => '⡤', 2739 => '⡥', 2740 => '⡦', 2741 => '⡧', 2742 => '⡨', 2743 => '⡩', 2744 => '⡪', 2745 => '⡫', 2746 => '⡬', 2747 => '⡭', 2748 => '⡮', 2749 => '⡯', 2750 => '⡰', 2751 => '⡱', 2752 => '⡲', 2753 => '⡳', 2754 => '⡴', 2755 => '⡵', 2756 => '⡶', 2757 => '⡷', 2758 => '⡸', 2759 => '⡹', 2760 => '⡺', 2761 => '⡻', 2762 => '⡼', 2763 => '⡽', 2764 => '⡾', 2765 => '⡿', 2766 => '⢀', 2767 => '⢁', 2768 => '⢂', 2769 => '⢃', 2770 => '⢄', 2771 => '⢅', 2772 => '⢆', 2773 => '⢇', 2774 => '⢈', 2775 => '⢉', 2776 => '⢊', 2777 => '⢋', 2778 => '⢌', 2779 => '⢍', 2780 => '⢎', 2781 => '⢏', 2782 => '⢐', 2783 => '⢑', 2784 => '⢒', 2785 => '⢓', 2786 => '⢔', 2787 => '⢕', 2788 => '⢖', 2789 => '⢗', 2790 => '⢘', 2791 => '⢙', 2792 => '⢚', 2793 => '⢛', 2794 => '⢜', 2795 => '⢝', 2796 => '⢞', 2797 => '⢟', 2798 => '⢠', 2799 => '⢡', 2800 => '⢢', 2801 => '⢣', 2802 => '⢤', 2803 => '⢥', 2804 => '⢦', 2805 => '⢧', 2806 => '⢨', 2807 => '⢩', 2808 => '⢪', 2809 => '⢫', 2810 => '⢬', 2811 => '⢭', 2812 => '⢮', 2813 => '⢯', 2814 => '⢰', 2815 => '⢱', 2816 => '⢲', 2817 => '⢳', 2818 => '⢴', 2819 => '⢵', 2820 => '⢶', 2821 => '⢷', 2822 => '⢸', 2823 => '⢹', 2824 => '⢺', 2825 => '⢻', 2826 => '⢼', 2827 => '⢽', 2828 => '⢾', 2829 => '⢿', 2830 => '⣀', 2831 => '⣁', 2832 => '⣂', 2833 => '⣃', 2834 => '⣄', 2835 => '⣅', 2836 => '⣆', 2837 => '⣇', 2838 => '⣈', 2839 => '⣉', 2840 => '⣊', 2841 => '⣋', 2842 => '⣌', 2843 => '⣍', 2844 => '⣎', 2845 => '⣏', 2846 => '⣐', 2847 => '⣑', 2848 => '⣒', 2849 => '⣓', 2850 => '⣔', 2851 => '⣕', 2852 => '⣖', 2853 => '⣗', 2854 => '⣘', 2855 => '⣙', 2856 => '⣚', 2857 => '⣛', 2858 => '⣜', 2859 => '⣝', 2860 => '⣞', 2861 => '⣟', 2862 => '⣠', 2863 => '⣡', 2864 => '⣢', 2865 => '⣣', 2866 => '⣤', 2867 => '⣥', 2868 => '⣦', 2869 => '⣧', 2870 => '⣨', 2871 => '⣩', 2872 => '⣪', 2873 => '⣫', 2874 => '⣬', 2875 => '⣭', 2876 => '⣮', 2877 => '⣯', 2878 => '⣰', 2879 => '⣱', 2880 => '⣲', 2881 => '⣳', 2882 => '⣴', 2883 => '⣵', 2884 => '⣶', 2885 => '⣷', 2886 => '⣸', 2887 => '⣹', 2888 => '⣺', 2889 => '⣻', 2890 => '⣼', 2891 => '⣽', 2892 => '⣾', 2893 => '⣿', 2894 => '⚊', 2895 => '⚋', 2896 => '⚌', 2897 => '⚍', 2898 => '⚎', 2899 => '⚏', 2900 => '☰', 2901 => '☱', 2902 => '☲', 2903 => '☳', 2904 => '☴', 2905 => '☵', 2906 => '☶', 2907 => '☷', 2908 => '䷀', 2909 => '䷁', 2910 => '䷂', 2911 => '䷃', 2912 => '䷄', 2913 => '䷅', 2914 => '䷆', 2915 => '䷇', 2916 => '䷈', 2917 => '䷉', 2918 => '䷊', 2919 => '䷋', 2920 => '䷌', 2921 => '䷍', 2922 => '䷎', 2923 => '䷏', 2924 => '䷐', 2925 => '䷑', 2926 => '䷒', 2927 => '䷓', 2928 => '䷔', 2929 => '䷕', 2930 => '䷖', 2931 => '䷗', 2932 => '䷘', 2933 => '䷙', 2934 => '䷚', 2935 => '䷛', 2936 => '䷜', 2937 => '䷝', 2938 => '䷞', 2939 => '䷟', 2940 => '䷠', 2941 => '䷡', 2942 => '䷢', 2943 => '䷣', 2944 => '䷤', 2945 => '䷥', 2946 => '䷦', 2947 => '䷧', 2948 => '䷨', 2949 => '䷩', 2950 => '䷪', 2951 => '䷫', 2952 => '䷬', 2953 => '䷭', 2954 => '䷮', 2955 => '䷯', 2956 => '䷰', 2957 => '䷱', 2958 => '䷲', 2959 => '䷳', 2960 => '䷴', 2961 => '䷵', 2962 => '䷶', 2963 => '䷷', 2964 => '䷸', 2965 => '䷹', 2966 => '䷺', 2967 => '䷻', 2968 => '䷼', 2969 => '䷽', 2970 => '䷾', 2971 => '䷿', 2972 => '𝌀', 2973 => '𝌁', 2974 => '𝌂', 2975 => '𝌃', 2976 => '𝌄', 2977 => '𝌅', 2978 => '𝌆', 2979 => '𝌇', 2980 => '𝌈', 2981 => '𝌉', 2982 => '𝌊', 2983 => '𝌋', 2984 => '𝌌', 2985 => '𝌍', 2986 => '𝌎', 2987 => '𝌏', 2988 => '𝌐', 2989 => '𝌑', 2990 => '𝌒', 2991 => '𝌓', 2992 => '𝌔', 2993 => '𝌕', 2994 => '𝌖', 2995 => '𝌗', 2996 => '𝌘', 2997 => '𝌙', 2998 => '𝌚', 2999 => '𝌛', 3000 => '𝌜', 3001 => '𝌝', 3002 => '𝌞', 3003 => '𝌟', 3004 => '𝌠', 3005 => '𝌡', 3006 => '𝌢', 3007 => '𝌣', 3008 => '𝌤', 3009 => '𝌥', 3010 => '𝌦', 3011 => '𝌧', 3012 => '𝌨', 3013 => '𝌩', 3014 => '𝌪', 3015 => '𝌫', 3016 => '𝌬', 3017 => '𝌭', 3018 => '𝌮', 3019 => '𝌯', 3020 => '𝌰', 3021 => '𝌱', 3022 => '𝌲', 3023 => '𝌳', 3024 => '𝌴', 3025 => '𝌵', 3026 => '𝌶', 3027 => '𝌷', 3028 => '𝌸', 3029 => '𝌹', 3030 => '𝌺', 3031 => '𝌻', 3032 => '𝌼', 3033 => '𝌽', 3034 => '𝌾', 3035 => '𝌿', 3036 => '𝍀', 3037 => '𝍁', 3038 => '𝍂', 3039 => '𝍃', 3040 => '𝍄', 3041 => '𝍅', 3042 => '𝍆', 3043 => '𝍇', 3044 => '𝍈', 3045 => '𝍉', 3046 => '𝍊', 3047 => '𝍋', 3048 => '𝍌', 3049 => '𝍍', 3050 => '𝍎', 3051 => '𝍏', 3052 => '𝍐', 3053 => '𝍑', 3054 => '𝍒', 3055 => '𝍓', 3056 => '𝍔', 3057 => '𝍕', 3058 => '𝍖', 3059 => '꒐', 3060 => '꒑', 3061 => '꒒', 3062 => '꒓', 3063 => '꒔', 3064 => '꒕', 3065 => '꒖', 3066 => '꒗', 3067 => '꒘', 3068 => '꒙', 3069 => '꒚', 3070 => '꒛', 3071 => '꒜', 3072 => '꒝', 3073 => '꒞', 3074 => '꒟', 3075 => '꒠', 3076 => '꒡', 3077 => '꒢', 3078 => '꒣', 3079 => '꒤', 3080 => '꒥', 3081 => '꒦', 3082 => '꒧', 3083 => '꒨', 3084 => '꒩', 3085 => '꒪', 3086 => '꒫', 3087 => '꒬', 3088 => '꒭', 3089 => '꒮', 3090 => '꒯', 3091 => '꒰', 3092 => '꒱', 3093 => '꒲', 3094 => '꒳', 3095 => '꒴', 3096 => '꒵', 3097 => '꒶', 3098 => '꒷', 3099 => '꒸', 3100 => '꒹', 3101 => '꒺', 3102 => '꒻', 3103 => '꒼', 3104 => '꒽', 3105 => '꒾', 3106 => '꒿', 3107 => '꓀', 3108 => '꓁', 3109 => '꓂', 3110 => '꓃', 3111 => '꓄', 3112 => '꓅', 3113 => '꓆', 3114 => '𐄷', 3115 => '𐄸', 3116 => '𐄹', 3117 => '𐄺', 3118 => '𐄻', 3119 => '𐄼', 3120 => '𐄽', 3121 => '𐄾', 3122 => '𐄿', 3123 => '𐅹', 3124 => '𐅺', 3125 => '𐅻', 3126 => '𐅼', 3127 => '𐅽', 3128 => '𐅾', 3129 => '𐅿', 3130 => '𐆀', 3131 => '𐆁', 3132 => '𐆂', 3133 => '𐆃', 3134 => '𐆄', 3135 => '𐆅', 3136 => '𐆆', 3137 => '𐆇', 3138 => '𐆈', 3139 => '𐆉', 3140 => '𐆐', 3141 => '𐆑', 3142 => '𐆒', 3143 => '𐆓', 3144 => '𐆔', 3145 => '𐆕', 3146 => '𐆖', 3147 => '𐆗', 3148 => '𐆘', 3149 => '𐆙', 3150 => '𐆚', 3151 => '𐆛', 3152 => '𐇐', 3153 => '𐇑', 3154 => '𐇒', 3155 => '𐇓', 3156 => '𐇔', 3157 => '𐇕', 3158 => '𐇖', 3159 => '𐇗', 3160 => '𐇘', 3161 => '𐇙', 3162 => '𐇚', 3163 => '𐇛', 3164 => '𐇜', 3165 => '𐇝', 3166 => '𐇞', 3167 => '𐇟', 3168 => '𐇠', 3169 => '𐇡', 3170 => '𐇢', 3171 => '𐇣', 3172 => '𐇤', 3173 => '𐇥', 3174 => '𐇦', 3175 => '𐇧', 3176 => '𐇨', 3177 => '𐇩', 3178 => '𐇪', 3179 => '𐇫', 3180 => '𐇬', 3181 => '𐇭', 3182 => '𐇮', 3183 => '𐇯', 3184 => '𐇰', 3185 => '𐇱', 3186 => '𐇲', 3187 => '𐇳', 3188 => '𐇴', 3189 => '𐇵', 3190 => '𐇶', 3191 => '𐇷', 3192 => '𐇸', 3193 => '𐇹', 3194 => '𐇺', 3195 => '𐇻', 3196 => '𐇼', 3197 => '𝀀', 3198 => '𝀁', 3199 => '𝀂', 3200 => '𝀃', 3201 => '𝀄', 3202 => '𝀅', 3203 => '𝀆', 3204 => '𝀇', 3205 => '𝀈', 3206 => '𝀉', 3207 => '𝀊', 3208 => '𝀋', 3209 => '𝀌', 3210 => '𝀍', 3211 => '𝀎', 3212 => '𝀏', 3213 => '𝀐', 3214 => '𝀑', 3215 => '𝀒', 3216 => '𝀓', 3217 => '𝀔', 3218 => '𝀕', 3219 => '𝀖', 3220 => '𝀗', 3221 => '𝀘', 3222 => '𝀙', 3223 => '𝀚', 3224 => '𝀛', 3225 => '𝀜', 3226 => '𝀝', 3227 => '𝀞', 3228 => '𝀟', 3229 => '𝀠', 3230 => '𝀡', 3231 => '𝀢', 3232 => '𝀣', 3233 => '𝀤', 3234 => '𝀥', 3235 => '𝀦', 3236 => '𝀧', 3237 => '𝀨', 3238 => '𝀩', 3239 => '𝀪', 3240 => '𝀫', 3241 => '𝀬', 3242 => '𝀭', 3243 => '𝀮', 3244 => '𝀯', 3245 => '𝀰', 3246 => '𝀱', 3247 => '𝀲', 3248 => '𝀳', 3249 => '𝀴', 3250 => '𝀵', 3251 => '𝀶', 3252 => '𝀷', 3253 => '𝀸', 3254 => '𝀹', 3255 => '𝀺', 3256 => '𝀻', 3257 => '𝀼', 3258 => '𝀽', 3259 => '𝀾', 3260 => '𝀿', 3261 => '𝁀', 3262 => '𝁁', 3263 => '𝁂', 3264 => '𝁃', 3265 => '𝁄', 3266 => '𝁅', 3267 => '𝁆', 3268 => '𝁇', 3269 => '𝁈', 3270 => '𝁉', 3271 => '𝁊', 3272 => '𝁋', 3273 => '𝁌', 3274 => '𝁍', 3275 => '𝁎', 3276 => '𝁏', 3277 => '𝁐', 3278 => '𝁑', 3279 => '𝁒', 3280 => '𝁓', 3281 => '𝁔', 3282 => '𝁕', 3283 => '𝁖', 3284 => '𝁗', 3285 => '𝁘', 3286 => '𝁙', 3287 => '𝁚', 3288 => '𝁛', 3289 => '𝁜', 3290 => '𝁝', 3291 => '𝁞', 3292 => '𝁟', 3293 => '𝁠', 3294 => '𝁡', 3295 => '𝁢', 3296 => '𝁣', 3297 => '𝁤', 3298 => '𝁥', 3299 => '𝁦', 3300 => '𝁧', 3301 => '𝁨', 3302 => '𝁩', 3303 => '𝁪', 3304 => '𝁫', 3305 => '𝁬', 3306 => '𝁭', 3307 => '𝁮', 3308 => '𝁯', 3309 => '𝁰', 3310 => '𝁱', 3311 => '𝁲', 3312 => '𝁳', 3313 => '𝁴', 3314 => '𝁵', 3315 => '𝁶', 3316 => '𝁷', 3317 => '𝁸', 3318 => '𝁹', 3319 => '𝁺', 3320 => '𝁻', 3321 => '𝁼', 3322 => '𝁽', 3323 => '𝁾', 3324 => '𝁿', 3325 => '𝂀', 3326 => '𝂁', 3327 => '𝂂', 3328 => '𝂃', 3329 => '𝂄', 3330 => '𝂅', 3331 => '𝂆', 3332 => '𝂇', 3333 => '𝂈', 3334 => '𝂉', 3335 => '𝂊', 3336 => '𝂋', 3337 => '𝂌', 3338 => '𝂍', 3339 => '𝂎', 3340 => '𝂏', 3341 => '𝂐', 3342 => '𝂑', 3343 => '𝂒', 3344 => '𝂓', 3345 => '𝂔', 3346 => '𝂕', 3347 => '𝂖', 3348 => '𝂗', 3349 => '𝂘', 3350 => '𝂙', 3351 => '𝂚', 3352 => '𝂛', 3353 => '𝂜', 3354 => '𝂝', 3355 => '𝂞', 3356 => '𝂟', 3357 => '𝂠', 3358 => '𝂡', 3359 => '𝂢', 3360 => '𝂣', 3361 => '𝂤', 3362 => '𝂥', 3363 => '𝂦', 3364 => '𝂧', 3365 => '𝂨', 3366 => '𝂩', 3367 => '𝂪', 3368 => '𝂫', 3369 => '𝂬', 3370 => '𝂭', 3371 => '𝂮', 3372 => '𝂯', 3373 => '𝂰', 3374 => '𝂱', 3375 => '𝂲', 3376 => '𝂳', 3377 => '𝂴', 3378 => '𝂵', 3379 => '𝂶', 3380 => '𝂷', 3381 => '𝂸', 3382 => '𝂹', 3383 => '𝂺', 3384 => '𝂻', 3385 => '𝂼', 3386 => '𝂽', 3387 => '𝂾', 3388 => '𝂿', 3389 => '𝃀', 3390 => '𝃁', 3391 => '𝃂', 3392 => '𝃃', 3393 => '𝃄', 3394 => '𝃅', 3395 => '𝃆', 3396 => '𝃇', 3397 => '𝃈', 3398 => '𝃉', 3399 => '𝃊', 3400 => '𝃋', 3401 => '𝃌', 3402 => '𝃍', 3403 => '𝃎', 3404 => '𝃏', 3405 => '𝃐', 3406 => '𝃑', 3407 => '𝃒', 3408 => '𝃓', 3409 => '𝃔', 3410 => '𝃕', 3411 => '𝃖', 3412 => '𝃗', 3413 => '𝃘', 3414 => '𝃙', 3415 => '𝃚', 3416 => '𝃛', 3417 => '𝃜', 3418 => '𝃝', 3419 => '𝃞', 3420 => '𝃟', 3421 => '𝃠', 3422 => '𝃡', 3423 => '𝃢', 3424 => '𝃣', 3425 => '𝃤', 3426 => '𝃥', 3427 => '𝃦', 3428 => '𝃧', 3429 => '𝃨', 3430 => '𝃩', 3431 => '𝃪', 3432 => '𝃫', 3433 => '𝃬', 3434 => '𝃭', 3435 => '𝃮', 3436 => '𝃯', 3437 => '𝃰', 3438 => '𝃱', 3439 => '𝃲', 3440 => '𝃳', 3441 => '𝃴', 3442 => '𝃵', 3443 => '𝄀', 3444 => '𝄁', 3445 => '𝄂', 3446 => '𝄃', 3447 => '𝄄', 3448 => '𝄅', 3449 => '𝄆', 3450 => '𝄇', 3451 => '𝄈', 3452 => '𝄉', 3453 => '𝄊', 3454 => '𝄋', 3455 => '𝄌', 3456 => '𝄍', 3457 => '𝄎', 3458 => '𝄏', 3459 => '𝄐', 3460 => '𝄑', 3461 => '𝄒', 3462 => '𝄓', 3463 => '𝄔', 3464 => '𝄕', 3465 => '𝄖', 3466 => '𝄗', 3467 => '𝄘', 3468 => '𝄙', 3469 => '𝄚', 3470 => '𝄛', 3471 => '𝄜', 3472 => '𝄝', 3473 => '𝄞', 3474 => '𝄟', 3475 => '𝄠', 3476 => '𝄡', 3477 => '𝄢', 3478 => '𝄣', 3479 => '𝄤', 3480 => '𝄥', 3481 => '𝄦', 3482 => '♭', 3483 => '♮', 3484 => '♯', 3485 => '𝄪', 3486 => '𝄫', 3487 => '𝄬', 3488 => '𝄭', 3489 => '𝄮', 3490 => '𝄯', 3491 => '𝄰', 3492 => '𝄱', 3493 => '𝄲', 3494 => '𝄳', 3495 => '𝄴', 3496 => '𝄵', 3497 => '𝄶', 3498 => '𝄷', 3499 => '𝄸', 3500 => '𝄹', 3501 => '𝄩', 3502 => '𝄺', 3503 => '𝄻', 3504 => '𝄼', 3505 => '𝄽', 3506 => '𝄾', 3507 => '𝄿', 3508 => '𝅀', 3509 => '𝅁', 3510 => '𝅂', 3511 => '𝅃', 3512 => '𝅄', 3513 => '𝅅', 3514 => '𝅆', 3515 => '𝅇', 3516 => '𝅈', 3517 => '𝅉', 3518 => '𝅊', 3519 => '𝅋', 3520 => '𝅌', 3521 => '𝅍', 3522 => '𝅎', 3523 => '𝅏', 3524 => '𝅐', 3525 => '𝅑', 3526 => '𝅒', 3527 => '𝅓', 3528 => '𝅔', 3529 => '𝅕', 3530 => '𝅖', 3531 => '𝅗', 3532 => '𝅘', 3533 => '𝅙', 3534 => '𝅚', 3535 => '𝅛', 3536 => '𝅜', 3537 => '𝅝', 3538 => '𝅪', 3539 => '𝅫', 3540 => '𝅬', 3541 => '𝆃', 3542 => '𝆄', 3543 => '𝆌', 3544 => '𝆍', 3545 => '𝆎', 3546 => '𝆏', 3547 => '𝆐', 3548 => '𝆑', 3549 => '𝆒', 3550 => '𝆓', 3551 => '𝆔', 3552 => '𝆕', 3553 => '𝆖', 3554 => '𝆗', 3555 => '𝆘', 3556 => '𝆙', 3557 => '𝆚', 3558 => '𝆛', 3559 => '𝆜', 3560 => '𝆝', 3561 => '𝆞', 3562 => '𝆟', 3563 => '𝆠', 3564 => '𝆡', 3565 => '𝆢', 3566 => '𝆣', 3567 => '𝆤', 3568 => '𝆥', 3569 => '𝆦', 3570 => '𝆧', 3571 => '𝆨', 3572 => '𝆩', 3573 => '𝆮', 3574 => '𝆯', 3575 => '𝆰', 3576 => '𝆱', 3577 => '𝆲', 3578 => '𝆳', 3579 => '𝆴', 3580 => '𝆵', 3581 => '𝆶', 3582 => '𝆷', 3583 => '𝆸', 3584 => '𝆹', 3585 => '𝆺', 3586 => '𝇁', 3587 => '𝇂', 3588 => '𝇃', 3589 => '𝇄', 3590 => '𝇅', 3591 => '𝇆', 3592 => '𝇇', 3593 => '𝇈', 3594 => '𝇉', 3595 => '𝇊', 3596 => '𝇋', 3597 => '𝇌', 3598 => '𝇍', 3599 => '𝇎', 3600 => '𝇏', 3601 => '𝇐', 3602 => '𝇑', 3603 => '𝇒', 3604 => '𝇓', 3605 => '𝇔', 3606 => '𝇕', 3607 => '𝇖', 3608 => '𝇗', 3609 => '𝇘', 3610 => '𝇙', 3611 => '𝇚', 3612 => '𝇛', 3613 => '𝇜', 3614 => '𝇝', 3615 => '𝈀', 3616 => '𝈁', 3617 => '𝈂', 3618 => '𝈃', 3619 => '𝈄', 3620 => '𝈅', 3621 => '𝈆', 3622 => '𝈇', 3623 => '𝈈', 3624 => '𝈉', 3625 => '𝈊', 3626 => '𝈋', 3627 => '𝈌', 3628 => '𝈍', 3629 => '𝈎', 3630 => '𝈏', 3631 => '𝈐', 3632 => '𝈑', 3633 => '𝈒', 3634 => '𝈓', 3635 => '𝈔', 3636 => '𝈕', 3637 => '𝈖', 3638 => '𝈗', 3639 => '𝈘', 3640 => '𝈙', 3641 => '𝈚', 3642 => '𝈛', 3643 => '𝈜', 3644 => '𝈝', 3645 => '𝈞', 3646 => '𝈟', 3647 => '𝈠', 3648 => '𝈡', 3649 => '𝈢', 3650 => '𝈣', 3651 => '𝈤', 3652 => '𝈥', 3653 => '𝈦', 3654 => '𝈧', 3655 => '𝈨', 3656 => '𝈩', 3657 => '𝈪', 3658 => '𝈫', 3659 => '𝈬', 3660 => '𝈭', 3661 => '𝈮', 3662 => '𝈯', 3663 => '𝈰', 3664 => '𝈱', 3665 => '𝈲', 3666 => '𝈳', 3667 => '𝈴', 3668 => '𝈵', 3669 => '𝈶', 3670 => '𝈷', 3671 => '𝈸', 3672 => '𝈹', 3673 => '𝈺', 3674 => '𝈻', 3675 => '𝈼', 3676 => '𝈽', 3677 => '𝈾', 3678 => '𝈿', 3679 => '𝉀', 3680 => '𝉁', 3681 => '𝉅', 3682 => '🀀', 3683 => '🀁', 3684 => '🀂', 3685 => '🀃', 3686 => '🀄', 3687 => '🀅', 3688 => '🀆', 3689 => '🀇', 3690 => '🀈', 3691 => '🀉', 3692 => '🀊', 3693 => '🀋', 3694 => '🀌', 3695 => '🀍', 3696 => '🀎', 3697 => '🀏', 3698 => '🀐', 3699 => '🀑', 3700 => '🀒', 3701 => '🀓', 3702 => '🀔', 3703 => '🀕', 3704 => '🀖', 3705 => '🀗', 3706 => '🀘', 3707 => '🀙', 3708 => '🀚', 3709 => '🀛', 3710 => '🀜', 3711 => '🀝', 3712 => '🀞', 3713 => '🀟', 3714 => '🀠', 3715 => '🀡', 3716 => '🀢', 3717 => '🀣', 3718 => '🀤', 3719 => '🀥', 3720 => '🀦', 3721 => '🀧', 3722 => '🀨', 3723 => '🀩', 3724 => '🀪', 3725 => '🀫', 3726 => '🀰', 3727 => '🀱', 3728 => '🀲', 3729 => '🀳', 3730 => '🀴', 3731 => '🀵', 3732 => '🀶', 3733 => '🀷', 3734 => '🀸', 3735 => '🀹', 3736 => '🀺', 3737 => '🀻', 3738 => '🀼', 3739 => '🀽', 3740 => '🀾', 3741 => '🀿', 3742 => '🁀', 3743 => '🁁', 3744 => '🁂', 3745 => '🁃', 3746 => '🁄', 3747 => '🁅', 3748 => '🁆', 3749 => '🁇', 3750 => '🁈', 3751 => '🁉', 3752 => '🁊', 3753 => '🁋', 3754 => '🁌', 3755 => '🁍', 3756 => '🁎', 3757 => '🁏', 3758 => '🁐', 3759 => '🁑', 3760 => '🁒', 3761 => '🁓', 3762 => '🁔', 3763 => '🁕', 3764 => '🁖', 3765 => '🁗', 3766 => '🁘', 3767 => '🁙', 3768 => '🁚', 3769 => '🁛', 3770 => '🁜', 3771 => '🁝', 3772 => '🁞', 3773 => '🁟', 3774 => '🁠', 3775 => '🁡', 3776 => '🁢', 3777 => '🁣', 3778 => '🁤', 3779 => '🁥', 3780 => '🁦', 3781 => '🁧', 3782 => '🁨', 3783 => '🁩', 3784 => '🁪', 3785 => '🁫', 3786 => '🁬', 3787 => '🁭', 3788 => '🁮', 3789 => '🁯', 3790 => '🁰', 3791 => '🁱', 3792 => '🁲', 3793 => '🁳', 3794 => '🁴', 3795 => '🁵', 3796 => '🁶', 3797 => '🁷', 3798 => '🁸', 3799 => '🁹', 3800 => '🁺', 3801 => '🁻', 3802 => '🁼', 3803 => '🁽', 3804 => '🁾', 3805 => '🁿', 3806 => '🂀', 3807 => '🂁', 3808 => '🂂', 3809 => '🂃', 3810 => '🂄', 3811 => '🂅', 3812 => '🂆', 3813 => '🂇', 3814 => '🂈', 3815 => '🂉', 3816 => '🂊', 3817 => '🂋', 3818 => '🂌', 3819 => '🂍', 3820 => '🂎', 3821 => '🂏', 3822 => '🂐', 3823 => '🂑', 3824 => '🂒', 3825 => '🂓', 3826 => '🂠', 3827 => '🂡', 3828 => '🂢', 3829 => '🂣', 3830 => '🂤', 3831 => '🂥', 3832 => '🂦', 3833 => '🂧', 3834 => '🂨', 3835 => '🂩', 3836 => '🂪', 3837 => '🂫', 3838 => '🂬', 3839 => '🂭', 3840 => '🂮', 3841 => '🂱', 3842 => '🂲', 3843 => '🂳', 3844 => '🂴', 3845 => '🂵', 3846 => '🂶', 3847 => '🂷', 3848 => '🂸', 3849 => '🂹', 3850 => '🂺', 3851 => '🂻', 3852 => '🂼', 3853 => '🂽', 3854 => '🂾', 3855 => '🃁', 3856 => '🃂', 3857 => '🃃', 3858 => '🃄', 3859 => '🃅', 3860 => '🃆', 3861 => '🃇', 3862 => '🃈', 3863 => '🃉', 3864 => '🃊', 3865 => '🃋', 3866 => '🃌', 3867 => '🃍', 3868 => '🃎', 3869 => '🃏', 3870 => '🃑', 3871 => '🃒', 3872 => '🃓', 3873 => '🃔', 3874 => '🃕', 3875 => '🃖', 3876 => '🃗', 3877 => '🃘', 3878 => '🃙', 3879 => '🃚', 3880 => '🃛', 3881 => '🃜', 3882 => '🃝', 3883 => '🃞', 3884 => '🃟', 3885 => '🌀', 3886 => '🌁', 3887 => '🌂', 3888 => '🌃', 3889 => '🌄', 3890 => '🌅', 3891 => '🌆', 3892 => '🌇', 3893 => '🌈', 3894 => '🌉', 3895 => '🌊', 3896 => '🌋', 3897 => '🌌', 3898 => '🌍', 3899 => '🌎', 3900 => '🌏', 3901 => '🌐', 3902 => '🌑', 3903 => '🌒', 3904 => '🌓', 3905 => '🌔', 3906 => '🌕', 3907 => '🌖', 3908 => '🌗', 3909 => '🌘', 3910 => '🌙', 3911 => '🌚', 3912 => '🌛', 3913 => '🌜', 3914 => '🌝', 3915 => '🌞', 3916 => '🌟', 3917 => '🌠', 3918 => '🌰', 3919 => '🌱', 3920 => '🌲', 3921 => '🌳', 3922 => '🌴', 3923 => '🌵', 3924 => '🌷', 3925 => '🌸', 3926 => '🌹', 3927 => '🌺', 3928 => '🌻', 3929 => '🌼', 3930 => '🌽', 3931 => '🌾', 3932 => '🌿', 3933 => '🍀', 3934 => '🍁', 3935 => '🍂', 3936 => '🍃', 3937 => '🍄', 3938 => '🍅', 3939 => '🍆', 3940 => '🍇', 3941 => '🍈', 3942 => '🍉', 3943 => '🍊', 3944 => '🍋', 3945 => '🍌', 3946 => '🍍', 3947 => '🍎', 3948 => '🍏', 3949 => '🍐', 3950 => '🍑', 3951 => '🍒', 3952 => '🍓', 3953 => '🍔', 3954 => '🍕', 3955 => '🍖', 3956 => '🍗', 3957 => '🍘', 3958 => '🍙', 3959 => '🍚', 3960 => '🍛', 3961 => '🍜', 3962 => '🍝', 3963 => '🍞', 3964 => '🍟', 3965 => '🍠', 3966 => '🍡', 3967 => '🍢', 3968 => '🍣', 3969 => '🍤', 3970 => '🍥', 3971 => '🍦', 3972 => '🍧', 3973 => '🍨', 3974 => '🍩', 3975 => '🍪', 3976 => '🍫', 3977 => '🍬', 3978 => '🍭', 3979 => '🍮', 3980 => '🍯', 3981 => '🍰', 3982 => '🍱', 3983 => '🍲', 3984 => '🍳', 3985 => '🍴', 3986 => '🍵', 3987 => '🍶', 3988 => '🍷', 3989 => '🍸', 3990 => '🍹', 3991 => '🍺', 3992 => '🍻', 3993 => '🍼', 3994 => '🎀', 3995 => '🎁', 3996 => '🎂', 3997 => '🎃', 3998 => '🎄', 3999 => '🎅', 4000 => '🎆', 4001 => '🎇', 4002 => '🎈', 4003 => '🎉', 4004 => '🎊', 4005 => '🎋', 4006 => '🎌', 4007 => '🎍', 4008 => '🎎', 4009 => '🎏', 4010 => '🎐', 4011 => '🎑', 4012 => '🎒', 4013 => '🎓', 4014 => '🎠', 4015 => '🎡', 4016 => '🎢', 4017 => '🎣', 4018 => '🎤', 4019 => '🎥', 4020 => '🎦', 4021 => '🎧', 4022 => '🎨', 4023 => '🎩', 4024 => '🎪', 4025 => '🎫', 4026 => '🎬', 4027 => '🎭', 4028 => '🎮', 4029 => '🎯', 4030 => '🎰', 4031 => '🎱', 4032 => '🎲', 4033 => '🎳', 4034 => '🎴', 4035 => '🎵', 4036 => '🎶', 4037 => '🎷', 4038 => '🎸', 4039 => '🎹', 4040 => '🎺', 4041 => '🎻', 4042 => '🎼', 4043 => '🎽', 4044 => '🎾', 4045 => '🎿', 4046 => '🏀', 4047 => '🏁', 4048 => '🏂', 4049 => '🏃', 4050 => '🏄', 4051 => '🏆', 4052 => '🏇', 4053 => '🏈', 4054 => '🏉', 4055 => '🏊', 4056 => '🏠', 4057 => '🏡', 4058 => '🏢', 4059 => '🏣', 4060 => '🏤', 4061 => '🏥', 4062 => '🏦', 4063 => '🏧', 4064 => '🏨', 4065 => '🏩', 4066 => '🏪', 4067 => '🏫', 4068 => '🏬', 4069 => '🏭', 4070 => '🏮', 4071 => '🏯', 4072 => '🏰', 4073 => '🐀', 4074 => '🐁', 4075 => '🐂', 4076 => '🐃', 4077 => '🐄', 4078 => '🐅', 4079 => '🐆', 4080 => '🐇', 4081 => '🐈', 4082 => '🐉', 4083 => '🐊', 4084 => '🐋', 4085 => '🐌', 4086 => '🐍', 4087 => '🐎', 4088 => '🐏', 4089 => '🐐', 4090 => '🐑', 4091 => '🐒', 4092 => '🐓', 4093 => '🐔', 4094 => '🐕', 4095 => '🐖', 4096 => '🐗', 4097 => '🐘', 4098 => '🐙', 4099 => '🐚', 4100 => '🐛', 4101 => '🐜', 4102 => '🐝', 4103 => '🐞', 4104 => '🐟', 4105 => '🐠', 4106 => '🐡', 4107 => '🐢', 4108 => '🐣', 4109 => '🐤', 4110 => '🐥', 4111 => '🐦', 4112 => '🐧', 4113 => '🐨', 4114 => '🐩', 4115 => '🐪', 4116 => '🐫', 4117 => '🐬', 4118 => '🐭', 4119 => '🐮', 4120 => '🐯', 4121 => '🐰', 4122 => '🐱', 4123 => '🐲', 4124 => '🐳', 4125 => '🐴', 4126 => '🐵', 4127 => '🐶', 4128 => '🐷', 4129 => '🐸', 4130 => '🐹', 4131 => '🐺', 4132 => '🐻', 4133 => '🐼', 4134 => '🐽', 4135 => '🐾', 4136 => '👀', 4137 => '👂', 4138 => '👃', 4139 => '👄', 4140 => '👅', 4141 => '👆', 4142 => '👇', 4143 => '👈', 4144 => '👉', 4145 => '👊', 4146 => '👋', 4147 => '👌', 4148 => '👍', 4149 => '👎', 4150 => '👏', 4151 => '👐', 4152 => '👑', 4153 => '👒', 4154 => '👓', 4155 => '👔', 4156 => '👕', 4157 => '👖', 4158 => '👗', 4159 => '👘', 4160 => '👙', 4161 => '👚', 4162 => '👛', 4163 => '👜', 4164 => '👝', 4165 => '👞', 4166 => '👟', 4167 => '👠', 4168 => '👡', 4169 => '👢', 4170 => '👣', 4171 => '👤', 4172 => '👥', 4173 => '👦', 4174 => '👧', 4175 => '👨', 4176 => '👩', 4177 => '👪', 4178 => '👫', 4179 => '👬', 4180 => '👭', 4181 => '👮', 4182 => '👯', 4183 => '👰', 4184 => '👱', 4185 => '👲', 4186 => '👳', 4187 => '👴', 4188 => '👵', 4189 => '👶', 4190 => '👷', 4191 => '👸', 4192 => '👹', 4193 => '👺', 4194 => '👻', 4195 => '👼', 4196 => '👽', 4197 => '👾', 4198 => '👿', 4199 => '💀', 4200 => '💁', 4201 => '💂', 4202 => '💃', 4203 => '💄', 4204 => '💅', 4205 => '💆', 4206 => '💇', 4207 => '💈', 4208 => '💉', 4209 => '💊', 4210 => '💋', 4211 => '💌', 4212 => '💍', 4213 => '💎', 4214 => '💏', 4215 => '💐', 4216 => '💑', 4217 => '💒', 4218 => '💓', 4219 => '💔', 4220 => '💕', 4221 => '💖', 4222 => '💗', 4223 => '💘', 4224 => '💙', 4225 => '💚', 4226 => '💛', 4227 => '💜', 4228 => '💝', 4229 => '💞', 4230 => '💟', 4231 => '💠', 4232 => '💡', 4233 => '💢', 4234 => '💣', 4235 => '💤', 4236 => '💥', 4237 => '💦', 4238 => '💧', 4239 => '💨', 4240 => '💩', 4241 => '💪', 4242 => '💫', 4243 => '💬', 4244 => '💭', 4245 => '💮', 4246 => '💯', 4247 => '💰', 4248 => '💱', 4249 => '💲', 4250 => '💳', 4251 => '💴', 4252 => '💵', 4253 => '💶', 4254 => '💷', 4255 => '💸', 4256 => '💹', 4257 => '💺', 4258 => '💻', 4259 => '💼', 4260 => '💽', 4261 => '💾', 4262 => '💿', 4263 => '📀', 4264 => '📁', 4265 => '📂', 4266 => '📃', 4267 => '📄', 4268 => '📅', 4269 => '📆', 4270 => '📇', 4271 => '📈', 4272 => '📉', 4273 => '📊', 4274 => '📋', 4275 => '📌', 4276 => '📍', 4277 => '📎', 4278 => '📏', 4279 => '📐', 4280 => '📑', 4281 => '📒', 4282 => '📓', 4283 => '📔', 4284 => '📕', 4285 => '📖', 4286 => '📗', 4287 => '📘', 4288 => '📙', 4289 => '📚', 4290 => '📛', 4291 => '📜', 4292 => '📝', 4293 => '📞', 4294 => '📟', 4295 => '📠', 4296 => '📡', 4297 => '📢', 4298 => '📣', 4299 => '📤', 4300 => '📥', 4301 => '📦', 4302 => '📧', 4303 => '📨', 4304 => '📩', 4305 => '📪', 4306 => '📫', 4307 => '📬', 4308 => '📭', 4309 => '📮', 4310 => '📯', 4311 => '📰', 4312 => '📱', 4313 => '📲', 4314 => '📳', 4315 => '📴', 4316 => '📵', 4317 => '📶', 4318 => '📷', 4319 => '📹', 4320 => '📺', 4321 => '📻', 4322 => '📼', 4323 => '🔀', 4324 => '🔁', 4325 => '🔂', 4326 => '🔃', 4327 => '🔄', 4328 => '🔅', 4329 => '🔆', 4330 => '🔇', 4331 => '🔈', 4332 => '🔉', 4333 => '🔊', 4334 => '🔋', 4335 => '🔌', 4336 => '🔍', 4337 => '🔎', 4338 => '🔏', 4339 => '🔐', 4340 => '🔑', 4341 => '🔒', 4342 => '🔓', 4343 => '🔔', 4344 => '🔕', 4345 => '🔖', 4346 => '🔗', 4347 => '🔘', 4348 => '🔙', 4349 => '🔚', 4350 => '🔛', 4351 => '🔜', 4352 => '🔝', 4353 => '🔞', 4354 => '🔟', 4355 => '🔠', 4356 => '🔡', 4357 => '🔢', 4358 => '🔣', 4359 => '🔤', 4360 => '🔥', 4361 => '🔦', 4362 => '🔧', 4363 => '🔨', 4364 => '🔩', 4365 => '🔪', 4366 => '🔫', 4367 => '🔬', 4368 => '🔭', 4369 => '🔮', 4370 => '🔯', 4371 => '🔰', 4372 => '🔱', 4373 => '🔲', 4374 => '🔳', 4375 => '🔴', 4376 => '🔵', 4377 => '🔶', 4378 => '🔷', 4379 => '🔸', 4380 => '🔹', 4381 => '🔺', 4382 => '🔻', 4383 => '🔼', 4384 => '🔽', 4385 => '🕐', 4386 => '🕑', 4387 => '🕒', 4388 => '🕓', 4389 => '🕔', 4390 => '🕕', 4391 => '🕖', 4392 => '🕗', 4393 => '🕘', 4394 => '🕙', 4395 => '🕚', 4396 => '🕛', 4397 => '🕜', 4398 => '🕝', 4399 => '🕞', 4400 => '🕟', 4401 => '🕠', 4402 => '🕡', 4403 => '🕢', 4404 => '🕣', 4405 => '🕤', 4406 => '🕥', 4407 => '🕦', 4408 => '🕧', 4409 => '🗻', 4410 => '🗼', 4411 => '🗽', 4412 => '🗾', 4413 => '🗿', 4414 => '😁', 4415 => '😂', 4416 => '😃', 4417 => '😄', 4418 => '😅', 4419 => '😆', 4420 => '😇', 4421 => '😈', 4422 => '😉', 4423 => '😊', 4424 => '😋', 4425 => '😌', 4426 => '😍', 4427 => '😎', 4428 => '😏', 4429 => '😐', 4430 => '😒', 4431 => '😓', 4432 => '😔', 4433 => '😖', 4434 => '😘', 4435 => '😚', 4436 => '😜', 4437 => '😝', 4438 => '😞', 4439 => '😠', 4440 => '😡', 4441 => '😢', 4442 => '😣', 4443 => '😤', 4444 => '😥', 4445 => '😨', 4446 => '😩', 4447 => '😪', 4448 => '😫', 4449 => '😭', 4450 => '😰', 4451 => '😱', 4452 => '😲', 4453 => '😳', 4454 => '😵', 4455 => '😶', 4456 => '😷', 4457 => '😸', 4458 => '😹', 4459 => '😺', 4460 => '😻', 4461 => '😼', 4462 => '😽', 4463 => '😾', 4464 => '😿', 4465 => '🙀', 4466 => '🙅', 4467 => '🙆', 4468 => '🙇', 4469 => '🙈', 4470 => '🙉', 4471 => '🙊', 4472 => '🙋', 4473 => '🙌', 4474 => '🙍', 4475 => '🙎', 4476 => '🙏', 4477 => '🚀', 4478 => '🚁', 4479 => '🚂', 4480 => '🚃', 4481 => '🚄', 4482 => '🚅', 4483 => '🚆', 4484 => '🚇', 4485 => '🚈', 4486 => '🚉', 4487 => '🚊', 4488 => '🚋', 4489 => '🚌', 4490 => '🚍', 4491 => '🚎', 4492 => '🚏', 4493 => '🚐', 4494 => '🚑', 4495 => '🚒', 4496 => '🚓', 4497 => '🚔', 4498 => '🚕', 4499 => '🚖', 4500 => '🚗', 4501 => '🚘', 4502 => '🚙', 4503 => '🚚', 4504 => '🚛', 4505 => '🚜', 4506 => '🚝', 4507 => '🚞', 4508 => '🚟', 4509 => '🚠', 4510 => '🚡', 4511 => '🚢', 4512 => '🚣', 4513 => '🚤', 4514 => '🚥', 4515 => '🚦', 4516 => '🚧', 4517 => '🚨', 4518 => '🚩', 4519 => '🚪', 4520 => '🚫', 4521 => '🚬', 4522 => '🚭', 4523 => '🚮', 4524 => '🚯', 4525 => '🚰', 4526 => '🚱', 4527 => '🚲', 4528 => '🚳', 4529 => '🚴', 4530 => '🚵', 4531 => '🚶', 4532 => '🚷', 4533 => '🚸', 4534 => '🚹', 4535 => '🚺', 4536 => '🚻', 4537 => '🚼', 4538 => '🚽', 4539 => '🚾', 4540 => '🚿', 4541 => '🛀', 4542 => '🛁', 4543 => '🛂', 4544 => '🛃', 4545 => '🛄', 4546 => '🛅', 4547 => '🜀', 4548 => '🜁', 4549 => '🜂', 4550 => '🜃', 4551 => '🜄', 4552 => '🜅', 4553 => '🜆', 4554 => '🜇', 4555 => '🜈', 4556 => '🜉', 4557 => '🜊', 4558 => '🜋', 4559 => '🜌', 4560 => '🜍', 4561 => '🜎', 4562 => '🜏', 4563 => '🜐', 4564 => '🜑', 4565 => '🜒', 4566 => '🜓', 4567 => '🜔', 4568 => '🜕', 4569 => '🜖', 4570 => '🜗', 4571 => '🜘', 4572 => '🜙', 4573 => '🜚', 4574 => '🜛', 4575 => '🜜', 4576 => '🜝', 4577 => '🜞', 4578 => '🜟', 4579 => '🜠', 4580 => '🜡', 4581 => '🜢', 4582 => '🜣', 4583 => '🜤', 4584 => '🜥', 4585 => '🜦', 4586 => '🜧', 4587 => '🜨', 4588 => '🜩', 4589 => '🜪', 4590 => '🜫', 4591 => '🜬', 4592 => '🜭', 4593 => '🜮', 4594 => '🜯', 4595 => '🜰', 4596 => '🜱', 4597 => '🜲', 4598 => '🜳', 4599 => '🜴', 4600 => '🜵', 4601 => '🜶', 4602 => '🜷', 4603 => '🜸', 4604 => '🜹', 4605 => '🜺', 4606 => '🜻', 4607 => '🜼', 4608 => '🜽', 4609 => '🜾', 4610 => '🜿', 4611 => '🝀', 4612 => '🝁', 4613 => '🝂', 4614 => '🝃', 4615 => '🝄', 4616 => '🝅', 4617 => '🝆', 4618 => '🝇', 4619 => '🝈', 4620 => '🝉', 4621 => '🝊', 4622 => '🝋', 4623 => '🝌', 4624 => '🝍', 4625 => '🝎', 4626 => '🝏', 4627 => '🝐', 4628 => '🝑', 4629 => '🝒', 4630 => '🝓', 4631 => '🝔', 4632 => '🝕', 4633 => '🝖', 4634 => '🝗', 4635 => '🝘', 4636 => '🝙', 4637 => '🝚', 4638 => '🝛', 4639 => '🝜', 4640 => '🝝', 4641 => '🝞', 4642 => '🝟', 4643 => '🝠', 4644 => '🝡', 4645 => '🝢', 4646 => '🝣', 4647 => '🝤', 4648 => '🝥', 4649 => '🝦', 4650 => '🝧', 4651 => '🝨', 4652 => '🝩', 4653 => '🝪', 4654 => '🝫', 4655 => '🝬', 4656 => '🝭', 4657 => '🝮', 4658 => '🝯', 4659 => '🝰', 4660 => '🝱', 4661 => '🝲', 4662 => '🝳', 4663 => '㆐', 4664 => '㆑', 4665 => '', 4666 => '�', 4667 => '৴', 4668 => '৵', 4669 => '৶', 4670 => '৷', 4671 => '৸', 4672 => '৹', 4673 => '୲', 4674 => '୳', 4675 => '୴', 4676 => '୵', 4677 => '୶', 4678 => '୷', 4679 => '꠰', 4680 => '꠱', 4681 => '꠲', 4682 => '꠳', 4683 => '꠴', 4684 => '꠵', 4685 => '௰', 4686 => '௱', 4687 => '௲', 4688 => '൰', 4689 => '൱', 4690 => '൲', 4691 => '൳', 4692 => '൴', 4693 => '൵', 4694 => '፲', 4695 => '፳', 4696 => '፴', 4697 => '፵', 4698 => '፶', 4699 => '፷', 4700 => '፸', 4701 => '፹', 4702 => '፺', 4703 => '፻', 4704 => '፼', 4705 => 'ↀ', 4706 => 'ↁ', 4707 => 'ↂ', 4708 => 'ↆ', 4709 => 'ↇ', 4710 => 'ↈ', 4711 => '𐹩', 4712 => '𐹪', 4713 => '𐹫', 4714 => '𐹬', 4715 => '𐹭', 4716 => '𐹮', 4717 => '𐹯', 4718 => '𐹰', 4719 => '𐹱', 4720 => '𐹲', 4721 => '𐹳', 4722 => '𐹴', 4723 => '𐹵', 4724 => '𐹶', 4725 => '𐹷', 4726 => '𐹸', 4727 => '𐹹', 4728 => '𐹺', 4729 => '𐹻', 4730 => '𐹼', 4731 => '𐹽', 4732 => '𐹾', 4733 => '⳽', 4734 => '𐌢', 4735 => '𐌣', 4736 => '𐄐', 4737 => '𐄑', 4738 => '𐄒', 4739 => '𐄓', 4740 => '𐄔', 4741 => '𐄕', 4742 => '𐄖', 4743 => '𐄗', 4744 => '𐄘', 4745 => '𐄙', 4746 => '𐄚', 4747 => '𐄛', 4748 => '𐄜', 4749 => '𐄝', 4750 => '𐄞', 4751 => '𐄟', 4752 => '𐄠', 4753 => '𐄡', 4754 => '𐄢', 4755 => '𐄣', 4756 => '𐄤', 4757 => '𐄥', 4758 => '𐄦', 4759 => '𐄧', 4760 => '𐄨', 4761 => '𐄩', 4762 => '𐄪', 4763 => '𐄫', 4764 => '𐄬', 4765 => '𐄭', 4766 => '𐄮', 4767 => '𐄯', 4768 => '𐄰', 4769 => '𐄱', 4770 => '𐄲', 4771 => '𐄳', 4772 => '𐅀', 4773 => '𐅁', 4774 => '𐅄', 4775 => '𐅅', 4776 => '𐅆', 4777 => '𐅇', 4778 => '𐅉', 4779 => '𐅊', 4780 => '𐅋', 4781 => '𐅌', 4782 => '𐅍', 4783 => '𐅎', 4784 => '𐅐', 4785 => '𐅑', 4786 => '𐅒', 4787 => '𐅓', 4788 => '𐅔', 4789 => '𐅕', 4790 => '𐅖', 4791 => '𐅗', 4792 => '𐅠', 4793 => '𐅡', 4794 => '𐅢', 4795 => '𐅣', 4796 => '𐅤', 4797 => '𐅥', 4798 => '𐅦', 4799 => '𐅧', 4800 => '𐅨', 4801 => '𐅩', 4802 => '𐅪', 4803 => '𐅫', 4804 => '𐅬', 4805 => '𐅭', 4806 => '𐅮', 4807 => '𐅯', 4808 => '𐅰', 4809 => '𐅱', 4810 => '𐅲', 4811 => '𐅴', 4812 => '𐅵', 4813 => '𐅶', 4814 => '𐅷', 4815 => '𐅸', 4816 => '𐏓', 4817 => '𐏔', 4818 => '𐏕', 4819 => '𐩾', 4820 => '𐩿', 4821 => '𐤗', 4822 => '𐤘', 4823 => '𐤙', 4824 => '𐡛', 4825 => '𐡜', 4826 => '𐡝', 4827 => '𐡞', 4828 => '𐡟', 4829 => '𐭜', 4830 => '𐭝', 4831 => '𐭞', 4832 => '𐭟', 4833 => '𐭼', 4834 => '𐭽', 4835 => '𐭾', 4836 => '𐭿', 4837 => '𑁛', 4838 => '𑁜', 4839 => '𑁝', 4840 => '𑁞', 4841 => '𑁟', 4842 => '𑁠', 4843 => '𑁡', 4844 => '𑁢', 4845 => '𑁣', 4846 => '𑁤', 4847 => '𑁥', 4848 => '𐩄', 4849 => '𐩅', 4850 => '𐩆', 4851 => '𐩇', 4852 => '𒐲', 4853 => '𒐳', 4854 => '𒑖', 4855 => '𒑗', 4856 => '𒑚', 4857 => '𒑛', 4858 => '𒑜', 4859 => '𒑝', 4860 => '𒑞', 4861 => '𒑟', 4862 => '𒑠', 4863 => '𒑡', 4864 => '𒑢', 4865 => '𝍩', 4866 => '𝍪', 4867 => '𝍫', 4868 => '𝍬', 4869 => '𝍭', 4870 => '𝍮', 4871 => '𝍯', 4872 => '𝍰', 4873 => '𝍱', 4874 => 'ː', 4875 => 'ˑ', 4876 => 'ॱ', 4877 => 'ๆ', 4878 => 'ໆ', 4879 => 'ᪧ', 4880 => 'ꧏ', 4881 => 'ꩰ', 4882 => 'ꫝ', 4883 => 'ゝ', 4884 => 'ー', 4885 => 'ヽ', 4886 => '¤', 4887 => '¢', 4888 => '$', 4889 => '£', 4890 => '¥', 4891 => '؋', 4892 => '৲', 4893 => '৳', 4894 => '৻', 4895 => '૱', 4896 => '꠸', 4897 => '௹', 4898 => '฿', 4899 => '៛', 4900 => '₠', 4901 => '₡', 4902 => '₢', 4903 => '₣', 4904 => '₤', 4905 => '₥', 4906 => '₦', 4907 => '₧', 4908 => '₩', 4909 => '₪', 4910 => '₫', 4911 => '€', 4912 => '₭', 4913 => '₮', 4914 => '₯', 4915 => '₰', 4916 => '₱', 4917 => '₲', 4918 => '₳', 4919 => '₴', 4920 => '₵', 4921 => '₶', 4922 => '₷', 4923 => '₸', 4924 => '₹', 4925 => '0', 4926 => '1', 4927 => '2', 4928 => '3', 4929 => '4', 4930 => '5', 4931 => '6', 4932 => '7', 4933 => '8', 4934 => '9', 4935 => 'A', 4936 => 'ᴀ', 4937 => 'Ⱥ', 4938 => 'ᶏ', 4939 => 'ᴁ', 4940 => 'ᴂ', 4941 => 'Ɐ', 4942 => 'Ɑ', 4943 => 'ᶐ', 4944 => 'Ɒ', 4945 => 'B', 4946 => 'ʙ', 4947 => 'Ƀ', 4948 => 'ᴯ', 4949 => 'ᴃ', 4950 => 'ᵬ', 4951 => 'ᶀ', 4952 => 'Ɓ', 4953 => 'Ƃ', 4954 => 'C', 4955 => 'ᴄ', 4956 => 'Ȼ', 4957 => 'Ƈ', 4958 => 'ɕ', 4959 => 'Ↄ', 4960 => 'Ꜿ', 4961 => 'D', 4962 => 'ᴅ', 4963 => 'ᴆ', 4964 => 'ᵭ', 4965 => 'ᶁ', 4966 => 'Ɖ', 4967 => 'Ɗ', 4968 => 'ᶑ', 4969 => 'Ƌ', 4970 => 'ȡ', 4971 => 'ꝱ', 4972 => 'ẟ', 4973 => 'E', 4974 => 'ᴇ', 4975 => 'Ɇ', 4976 => 'ᶒ', 4977 => 'ⱸ', 4978 => 'Ǝ', 4979 => 'ⱻ', 4980 => 'Ə', 4981 => 'ᶕ', 4982 => 'Ɛ', 4983 => 'ᶓ', 4984 => 'ɘ', 4985 => 'ɚ', 4986 => 'ɜ', 4987 => 'ᶔ', 4988 => 'ᴈ', 4989 => 'ɝ', 4990 => 'ɞ', 4991 => 'ʚ', 4992 => 'ɤ', 4993 => 'F', 4994 => 'ꜰ', 4995 => 'ᵮ', 4996 => 'ᶂ', 4997 => 'Ƒ', 4998 => 'Ⅎ', 4999 => 'ꟻ', 5000 => 'G', 5001 => 'ɡ', 5002 => 'ɢ', 5003 => 'Ǥ', 5004 => 'ᶃ', 5005 => 'Ɠ', 5006 => 'ʛ', 5007 => 'ᵷ', 5008 => 'Ꝿ', 5009 => 'Ɣ', 5010 => 'Ƣ', 5011 => 'H', 5012 => 'ʜ', 5013 => 'Ƕ', 5014 => 'ɦ', 5015 => 'Ⱨ', 5016 => 'Ⱶ', 5017 => 'Ꜧ', 5018 => 'ɧ', 5019 => 'ʻ', 5020 => 'ʽ', 5021 => 'I', 5022 => 'ı', 5023 => 'ɪ', 5024 => 'ꟾ', 5025 => 'ᴉ', 5026 => 'Ɨ', 5027 => 'ᵻ', 5028 => 'ᶖ', 5029 => 'Ɩ', 5030 => 'ᵼ', 5031 => 'J', 5032 => 'ȷ', 5033 => 'ᴊ', 5034 => 'Ɉ', 5035 => 'ʝ', 5036 => 'ɟ', 5037 => 'ʄ', 5038 => 'K', 5039 => 'ᴋ', 5040 => 'ᶄ', 5041 => 'Ƙ', 5042 => 'Ⱪ', 5043 => 'Ꝁ', 5044 => 'Ꝃ', 5045 => 'Ꝅ', 5046 => 'ʞ', 5047 => 'L', 5048 => 'ʟ', 5049 => 'Ꝇ', 5050 => 'ᴌ', 5051 => 'Ꝉ', 5052 => 'Ƚ', 5053 => 'Ⱡ', 5054 => 'Ɫ', 5055 => 'ɬ', 5056 => 'ᶅ', 5057 => 'ɭ', 5058 => 'ꞎ', 5059 => 'ȴ', 5060 => 'ꝲ', 5061 => 'ɮ', 5062 => 'Ꞁ', 5063 => 'ƛ', 5064 => 'ʎ', 5065 => 'M', 5066 => 'ᴍ', 5067 => 'ᵯ', 5068 => 'ᶆ', 5069 => 'Ɱ', 5070 => 'ꟽ', 5071 => 'ꟿ', 5072 => 'ꝳ', 5073 => 'N', 5074 => 'ɴ', 5075 => 'ᴻ', 5076 => 'ᴎ', 5077 => 'ᵰ', 5078 => 'Ɲ', 5079 => 'Ƞ', 5080 => 'Ꞑ', 5081 => 'ᶇ', 5082 => 'ɳ', 5083 => 'ȵ', 5084 => 'ꝴ', 5085 => 'Ŋ', 5086 => 'O', 5087 => 'ᴏ', 5088 => 'ᴑ', 5089 => 'ɶ', 5090 => 'ᴔ', 5091 => 'ᴓ', 5092 => 'Ɔ', 5093 => 'ᴐ', 5094 => 'ᴒ', 5095 => 'ᶗ', 5096 => 'Ꝍ', 5097 => 'ᴖ', 5098 => 'ᴗ', 5099 => 'ⱺ', 5100 => 'Ɵ', 5101 => 'Ꝋ', 5102 => 'ɷ', 5103 => 'Ȣ', 5104 => 'ᴕ', 5105 => 'P', 5106 => 'ᴘ', 5107 => 'Ᵽ', 5108 => 'Ꝑ', 5109 => 'ᵱ', 5110 => 'ᶈ', 5111 => 'Ƥ', 5112 => 'Ꝓ', 5113 => 'Ꝕ', 5114 => 'ꟼ', 5115 => 'ɸ', 5116 => 'ⱷ', 5117 => 'Q', 5118 => 'Ꝗ', 5119 => 'Ꝙ', 5120 => 'ʠ', 5121 => 'Ɋ', 5122 => 'ĸ', 5123 => 'R', 5124 => 'Ʀ', 5125 => 'Ꝛ', 5126 => 'ᴙ', 5127 => 'Ɍ', 5128 => 'ᵲ', 5129 => 'ɹ', 5130 => 'ᴚ', 5131 => 'ɺ', 5132 => 'ᶉ', 5133 => 'ɻ', 5134 => 'ⱹ', 5135 => 'ɼ', 5136 => 'Ɽ', 5137 => 'ɾ', 5138 => 'ᵳ', 5139 => 'ɿ', 5140 => 'ʁ', 5141 => 'ꝵ', 5142 => 'ꝶ', 5143 => 'Ꝝ', 5144 => 'S', 5145 => 'ꜱ', 5146 => 'ᵴ', 5147 => 'ᶊ', 5148 => 'ʂ', 5149 => 'Ȿ', 5150 => 'ẜ', 5151 => 'ẝ', 5152 => 'Ʃ', 5153 => 'ᶋ', 5154 => 'ƪ', 5155 => 'ʅ', 5156 => 'ᶘ', 5157 => 'ʆ', 5158 => 'T', 5159 => 'ᴛ', 5160 => 'Ŧ', 5161 => 'Ⱦ', 5162 => 'ᵵ', 5163 => 'ƫ', 5164 => 'Ƭ', 5165 => 'Ʈ', 5166 => 'ȶ', 5167 => 'ꝷ', 5168 => 'ʇ', 5169 => 'U', 5170 => 'ᴜ', 5171 => 'ᴝ', 5172 => 'ᴞ', 5173 => 'ᵫ', 5174 => 'Ʉ', 5175 => 'ᵾ', 5176 => 'ᶙ', 5177 => 'Ɥ', 5178 => 'ʮ', 5179 => 'ʯ', 5180 => 'Ɯ', 5181 => 'ꟺ', 5182 => 'ᴟ', 5183 => 'ɰ', 5184 => 'Ʊ', 5185 => 'ᵿ', 5186 => 'V', 5187 => 'ᴠ', 5188 => 'Ꝟ', 5189 => 'ᶌ', 5190 => 'Ʋ', 5191 => 'ⱱ', 5192 => 'ⱴ', 5193 => 'Ỽ', 5194 => 'Ʌ', 5195 => 'W', 5196 => 'ᴡ', 5197 => 'Ⱳ', 5198 => 'ʍ', 5199 => 'X', 5200 => 'ᶍ', 5201 => 'Y', 5202 => 'ʏ', 5203 => 'Ɏ', 5204 => 'Ƴ', 5205 => 'Ỿ', 5206 => 'Z', 5207 => 'ᴢ', 5208 => 'Ƶ', 5209 => 'ᵶ', 5210 => 'ᶎ', 5211 => 'Ȥ', 5212 => 'ʐ', 5213 => 'ʑ', 5214 => 'Ɀ', 5215 => 'Ⱬ', 5216 => 'Ꝣ', 5217 => 'Ʒ', 5218 => 'ᴣ', 5219 => 'Ƹ', 5220 => 'ᶚ', 5221 => 'ƺ', 5222 => 'ʓ', 5223 => 'Ȝ', 5224 => 'Þ', 5225 => 'Ꝥ', 5226 => 'Ꝧ', 5227 => 'Ƿ', 5228 => 'Ꝩ', 5229 => 'Ꝫ', 5230 => 'Ꝭ', 5231 => 'Ꝯ', 5232 => 'ꝸ', 5233 => 'ƻ', 5234 => 'Ꜫ', 5235 => 'Ꜭ', 5236 => 'Ꜯ', 5237 => 'Ƨ', 5238 => 'Ƽ', 5239 => 'Ƅ', 5240 => 'ʔ', 5241 => 'Ɂ', 5242 => 'ˀ', 5243 => 'ʼ', 5244 => 'ˮ', 5245 => 'ʾ', 5246 => 'Ꜣ', 5247 => 'Ꞌ', 5248 => 'ʕ', 5249 => 'ʿ', 5250 => 'ˁ', 5251 => 'ᴤ', 5252 => 'ᴥ', 5253 => 'Ꜥ', 5254 => 'ʡ', 5255 => 'ʢ', 5256 => 'ʖ', 5257 => 'ǀ', 5258 => 'ǁ', 5259 => 'ǂ', 5260 => 'ǃ', 5261 => 'ʗ', 5262 => 'ʘ', 5263 => 'ʬ', 5264 => 'ʭ', 5265 => 'Α', 5266 => 'Β', 5267 => 'Γ', 5268 => 'ᴦ', 5269 => 'Δ', 5270 => 'Ε', 5271 => 'Ϝ', 5272 => 'Ͷ', 5273 => 'Ϛ', 5274 => 'Ζ', 5275 => 'Ͱ', 5276 => 'Η', 5277 => 'Θ', 5278 => 'Ι', 5279 => 'ϳ', 5280 => 'Κ', 5281 => 'Λ', 5282 => 'ᴧ', 5283 => 'Μ', 5284 => 'Ν', 5285 => 'Ξ', 5286 => 'Ο', 5287 => 'Π', 5288 => 'ᴨ', 5289 => 'Ϻ', 5290 => 'Ϟ', 5291 => 'Ϙ', 5292 => 'Ρ', 5293 => 'ᴩ', 5294 => 'ϼ', 5295 => 'Σ', 5296 => 'Ͼ', 5297 => 'Ͻ', 5298 => 'Ͽ', 5299 => 'Τ', 5300 => 'Υ', 5301 => 'Φ', 5302 => 'Χ', 5303 => 'Ψ', 5304 => 'ᴪ', 5305 => 'Ω', 5306 => 'Ϡ', 5307 => 'Ͳ', 5308 => 'Ϸ', 5309 => 'Ⲁ', 5310 => 'Ⲃ', 5311 => 'Ⲅ', 5312 => 'Ⲇ', 5313 => 'Ⲉ', 5314 => 'Ⲷ', 5315 => 'Ⲋ', 5316 => 'Ⲍ', 5317 => 'Ⲏ', 5318 => 'Ⲑ', 5319 => 'Ⲓ', 5320 => 'Ⲕ', 5321 => 'Ⲹ', 5322 => 'Ⲗ', 5323 => 'Ⲙ', 5324 => 'Ⲛ', 5325 => 'Ⲻ', 5326 => 'Ⲽ', 5327 => 'Ⲝ', 5328 => 'Ⲟ', 5329 => 'Ⲡ', 5330 => 'Ⲣ', 5331 => 'Ⲥ', 5332 => 'Ⲧ', 5333 => 'Ⲩ', 5334 => 'Ⲫ', 5335 => 'Ⲭ', 5336 => 'Ⲯ', 5337 => 'Ⲱ', 5338 => 'Ⲿ', 5339 => 'Ⳁ', 5340 => 'Ϣ', 5341 => 'Ⳬ', 5342 => 'Ⳃ', 5343 => 'Ⳅ', 5344 => 'Ⳇ', 5345 => 'Ϥ', 5346 => 'Ϧ', 5347 => 'Ⳉ', 5348 => 'Ϩ', 5349 => 'Ⳋ', 5350 => 'Ⳍ', 5351 => 'Ⳏ', 5352 => 'Ⳑ', 5353 => 'Ⳓ', 5354 => 'Ⳕ', 5355 => 'Ϫ', 5356 => 'Ⳮ', 5357 => 'Ⳗ', 5358 => 'Ϭ', 5359 => 'Ⳙ', 5360 => 'Ⳛ', 5361 => 'Ⳝ', 5362 => 'Ϯ', 5363 => 'Ⲳ', 5364 => 'Ⲵ', 5365 => 'Ⳟ', 5366 => 'Ⳡ', 5367 => 'Ⳣ', 5368 => 'А', 5369 => 'Ӑ', 5370 => 'Ӓ', 5371 => 'Ә', 5372 => 'Ӛ', 5373 => 'Ӕ', 5374 => 'Б', 5375 => 'В', 5376 => 'Г', 5377 => 'Ғ', 5378 => 'Ӻ', 5379 => 'Ҕ', 5380 => 'Ӷ', 5381 => 'Д', 5382 => 'Ԁ', 5383 => 'Ꚁ', 5384 => 'Ђ', 5385 => 'Ꙣ', 5386 => 'Ԃ', 5387 => 'Ѓ', 5388 => 'Ҙ', 5389 => 'Е', 5390 => 'Ӗ', 5391 => 'Є', 5392 => 'Ж', 5393 => 'Ꚅ', 5394 => 'Ӝ', 5395 => 'Җ', 5396 => 'З', 5397 => 'Ꙁ', 5398 => 'Ԅ', 5399 => 'Ԑ', 5400 => 'Ӟ', 5401 => 'Ꙃ', 5402 => 'Ѕ', 5403 => 'Ꙅ', 5404 => 'Ӡ', 5405 => 'Ꚉ', 5406 => 'Ԇ', 5407 => 'Ꚃ', 5408 => 'И', 5409 => 'Ҋ', 5410 => 'Ӥ', 5411 => 'І', 5412 => 'Ꙇ', 5413 => 'Ї', 5414 => 'Й', 5415 => 'Ј', 5416 => 'Ꙉ', 5417 => 'К', 5418 => 'Қ', 5419 => 'Ӄ', 5420 => 'Ҡ', 5421 => 'Ҟ', 5422 => 'Ҝ', 5423 => 'Ԟ', 5424 => 'Ԛ', 5425 => 'Л', 5426 => 'ᴫ', 5427 => 'Ӆ', 5428 => 'Ԓ', 5429 => 'Ԡ', 5430 => 'Љ', 5431 => 'Ꙥ', 5432 => 'Ԉ', 5433 => 'Ԕ', 5434 => 'М', 5435 => 'Ӎ', 5436 => 'Ꙧ', 5437 => 'Н', 5438 => 'Ӊ', 5439 => 'Ң', 5440 => 'Ӈ', 5441 => 'Ԣ', 5442 => 'Ҥ', 5443 => 'Њ', 5444 => 'Ԋ', 5445 => 'О', 5446 => 'Ӧ', 5447 => 'Ө', 5448 => 'Ӫ', 5449 => 'П', 5450 => 'Ԥ', 5451 => 'Ҧ', 5452 => 'Ҁ', 5453 => 'Р', 5454 => 'Ҏ', 5455 => 'Ԗ', 5456 => 'С', 5457 => 'Ԍ', 5458 => 'Ҫ', 5459 => 'Т', 5460 => 'Ꚍ', 5461 => 'Ԏ', 5462 => 'Ҭ', 5463 => 'Ꚋ', 5464 => 'Ћ', 5465 => 'Ќ', 5466 => 'У', 5467 => 'Ў', 5468 => 'Ӱ', 5469 => 'Ӳ', 5470 => 'Ү', 5471 => 'Ұ', 5472 => 'Ꙋ', 5473 => 'Ѹ', 5474 => 'Ф', 5475 => 'Х', 5476 => 'Ӽ', 5477 => 'Ӿ', 5478 => 'Ҳ', 5479 => 'Һ', 5480 => 'Ԧ', 5481 => 'Ꚕ', 5482 => 'Ѡ', 5483 => 'Ѿ', 5484 => 'Ꙍ', 5485 => 'Ѽ', 5486 => 'Ѻ', 5487 => 'Ц', 5488 => 'Ꙡ', 5489 => 'Ꚏ', 5490 => 'Ҵ', 5491 => 'Ꚑ', 5492 => 'Ч', 5493 => 'Ꚓ', 5494 => 'Ӵ', 5495 => 'Ҷ', 5496 => 'Ӌ', 5497 => 'Ҹ', 5498 => 'Ꚇ', 5499 => 'Ҽ', 5500 => 'Ҿ', 5501 => 'Џ', 5502 => 'Ш', 5503 => 'Ꚗ', 5504 => 'Щ', 5505 => 'Ꙏ', 5506 => 'ⸯ', 5507 => 'ꙿ', 5508 => 'Ъ', 5509 => 'Ꙑ', 5510 => 'Ы', 5511 => 'Ӹ', 5512 => 'Ь', 5513 => 'Ҍ', 5514 => 'Ѣ', 5515 => 'Ꙓ', 5516 => 'Э', 5517 => 'Ӭ', 5518 => 'Ю', 5519 => 'Ꙕ', 5520 => 'Ꙗ', 5521 => 'Я', 5522 => 'Ԙ', 5523 => 'Ѥ', 5524 => 'Ѧ', 5525 => 'Ꙙ', 5526 => 'Ѫ', 5527 => 'Ꙛ', 5528 => 'Ѩ', 5529 => 'Ꙝ', 5530 => 'Ѭ', 5531 => 'Ѯ', 5532 => 'Ѱ', 5533 => 'Ѳ', 5534 => 'Ѵ', 5535 => 'Ѷ', 5536 => 'Ꙟ', 5537 => 'Ҩ', 5538 => 'Ԝ', 5539 => 'Ӏ', 5540 => 'Ⰰ', 5541 => 'Ⰱ', 5542 => 'Ⰲ', 5543 => 'Ⰳ', 5544 => 'Ⰴ', 5545 => 'Ⰵ', 5546 => 'Ⰶ', 5547 => 'Ⰷ', 5548 => 'Ⰸ', 5549 => 'Ⰹ', 5550 => 'Ⰺ', 5551 => 'Ⰻ', 5552 => 'Ⰼ', 5553 => 'Ⰽ', 5554 => 'Ⰾ', 5555 => 'Ⰿ', 5556 => 'Ⱀ', 5557 => 'Ⱁ', 5558 => 'Ⱂ', 5559 => 'Ⱃ', 5560 => 'Ⱄ', 5561 => 'Ⱅ', 5562 => 'Ⱆ', 5563 => 'Ⱇ', 5564 => 'Ⱈ', 5565 => 'Ⱉ', 5566 => 'Ⱊ', 5567 => 'Ⱋ', 5568 => 'Ⱌ', 5569 => 'Ⱍ', 5570 => 'Ⱎ', 5571 => 'Ⱏ', 5572 => 'Ⱐ', 5573 => 'Ⱑ', 5574 => 'Ⱒ', 5575 => 'Ⱓ', 5576 => 'Ⱔ', 5577 => 'Ⱕ', 5578 => 'Ⱖ', 5579 => 'Ⱗ', 5580 => 'Ⱘ', 5581 => 'Ⱙ', 5582 => 'Ⱚ', 5583 => 'Ⱛ', 5584 => 'Ⱜ', 5585 => 'Ⱝ', 5586 => 'Ⱞ', 5587 => 'ა', 5588 => 'Ⴀ', 5589 => 'ბ', 5590 => 'Ⴁ', 5591 => 'გ', 5592 => 'Ⴂ', 5593 => 'დ', 5594 => 'Ⴃ', 5595 => 'ე', 5596 => 'Ⴄ', 5597 => 'ვ', 5598 => 'Ⴅ', 5599 => 'ზ', 5600 => 'Ⴆ', 5601 => 'ჱ', 5602 => 'Ⴡ', 5603 => 'თ', 5604 => 'Ⴇ', 5605 => 'ი', 5606 => 'Ⴈ', 5607 => 'კ', 5608 => 'Ⴉ', 5609 => 'ლ', 5610 => 'Ⴊ', 5611 => 'მ', 5612 => 'Ⴋ', 5613 => 'ნ', 5614 => 'Ⴌ', 5615 => 'ჲ', 5616 => 'Ⴢ', 5617 => 'ო', 5618 => 'Ⴍ', 5619 => 'პ', 5620 => 'Ⴎ', 5621 => 'ჟ', 5622 => 'Ⴏ', 5623 => 'რ', 5624 => 'Ⴐ', 5625 => 'ს', 5626 => 'Ⴑ', 5627 => 'ტ', 5628 => 'Ⴒ', 5629 => 'ჳ', 5630 => 'Ⴣ', 5631 => 'უ', 5632 => 'Ⴓ', 5633 => 'ფ', 5634 => 'Ⴔ', 5635 => 'ქ', 5636 => 'Ⴕ', 5637 => 'ღ', 5638 => 'Ⴖ', 5639 => 'ყ', 5640 => 'Ⴗ', 5641 => 'შ', 5642 => 'Ⴘ', 5643 => 'ჩ', 5644 => 'Ⴙ', 5645 => 'ც', 5646 => 'Ⴚ', 5647 => 'ძ', 5648 => 'Ⴛ', 5649 => 'წ', 5650 => 'Ⴜ', 5651 => 'ჭ', 5652 => 'Ⴝ', 5653 => 'ხ', 5654 => 'Ⴞ', 5655 => 'ჴ', 5656 => 'Ⴤ', 5657 => 'ჯ', 5658 => 'Ⴟ', 5659 => 'ჰ', 5660 => 'Ⴠ', 5661 => 'ჵ', 5662 => 'Ⴥ', 5663 => 'ჶ', 5664 => 'ჷ', 5665 => 'ჸ', 5666 => 'ჹ', 5667 => 'ჺ', 5668 => 'Ա', 5669 => 'Բ', 5670 => 'Գ', 5671 => 'Դ', 5672 => 'Ե', 5673 => 'Զ', 5674 => 'Է', 5675 => 'Ը', 5676 => 'Թ', 5677 => 'Ժ', 5678 => 'Ի', 5679 => 'Լ', 5680 => 'Խ', 5681 => 'Ծ', 5682 => 'Կ', 5683 => 'Հ', 5684 => 'Ձ', 5685 => 'Ղ', 5686 => 'Ճ', 5687 => 'Մ', 5688 => 'Յ', 5689 => 'Ն', 5690 => 'Շ', 5691 => 'Ո', 5692 => 'Չ', 5693 => 'Պ', 5694 => 'Ջ', 5695 => 'Ռ', 5696 => 'Ս', 5697 => 'Վ', 5698 => 'Տ', 5699 => 'Ր', 5700 => 'Ց', 5701 => 'Ւ', 5702 => 'Փ', 5703 => 'Ք', 5704 => 'Օ', 5705 => 'Ֆ', 5706 => 'ՙ', 5707 => 'א', 5708 => 'ב', 5709 => 'ג', 5710 => 'ד', 5711 => 'ה', 5712 => 'ו', 5713 => 'ז', 5714 => 'ח', 5715 => 'ט', 5716 => 'י', 5717 => 'ך', 5718 => 'ל', 5719 => 'ם', 5720 => 'ן', 5721 => 'ס', 5722 => 'ע', 5723 => 'ף', 5724 => 'ץ', 5725 => 'ק', 5726 => 'ר', 5727 => 'ש', 5728 => 'ת', 5729 => '𐤀', 5730 => '𐤁', 5731 => '𐤂', 5732 => '𐤃', 5733 => '𐤄', 5734 => '𐤅', 5735 => '𐤆', 5736 => '𐤇', 5737 => '𐤈', 5738 => '𐤉', 5739 => '𐤊', 5740 => '𐤋', 5741 => '𐤌', 5742 => '𐤍', 5743 => '𐤎', 5744 => '𐤏', 5745 => '𐤐', 5746 => '𐤑', 5747 => '𐤒', 5748 => '𐤓', 5749 => '𐤔', 5750 => '𐤕', 5751 => 'ࠀ', 5752 => 'ࠁ', 5753 => 'ࠂ', 5754 => 'ࠃ', 5755 => 'ࠄ', 5756 => 'ࠅ', 5757 => 'ࠆ', 5758 => 'ࠇ', 5759 => 'ࠈ', 5760 => 'ࠉ', 5761 => 'ࠊ', 5762 => 'ࠋ', 5763 => 'ࠌ', 5764 => 'ࠍ', 5765 => 'ࠎ', 5766 => 'ࠏ', 5767 => 'ࠐ', 5768 => 'ࠑ', 5769 => 'ࠒ', 5770 => 'ࠓ', 5771 => 'ࠔ', 5772 => 'ࠕ', 5773 => 'ࠚ', 5774 => 'ء', 5775 => 'آ', 5776 => 'أ', 5777 => 'ٲ', 5778 => 'ٱ', 5779 => 'ؤ', 5780 => 'إ', 5781 => 'ٳ', 5782 => 'ݳ', 5783 => 'ݴ', 5784 => 'ئ', 5785 => 'ا', 5786 => 'ٮ', 5787 => 'ب', 5788 => 'ٻ', 5789 => 'پ', 5790 => 'ڀ', 5791 => 'ݐ', 5792 => 'ݑ', 5793 => 'ݒ', 5794 => 'ݓ', 5795 => 'ݔ', 5796 => 'ݕ', 5797 => 'ݖ', 5798 => 'ة', 5799 => 'ت', 5800 => 'ث', 5801 => 'ٹ', 5802 => 'ٺ', 5803 => 'ټ', 5804 => 'ٽ', 5805 => 'ٿ', 5806 => 'ج', 5807 => 'ڃ', 5808 => 'ڄ', 5809 => 'چ', 5810 => 'ڿ', 5811 => 'ڇ', 5812 => 'ح', 5813 => 'خ', 5814 => 'ځ', 5815 => 'ڂ', 5816 => 'څ', 5817 => 'ݗ', 5818 => 'ݘ', 5819 => 'ݮ', 5820 => 'ݯ', 5821 => 'ݲ', 5822 => 'ݼ', 5823 => 'د', 5824 => 'ذ', 5825 => 'ڈ', 5826 => 'ډ', 5827 => 'ڊ', 5828 => 'ڋ', 5829 => 'ڌ', 5830 => 'ڍ', 5831 => 'ڎ', 5832 => 'ڏ', 5833 => 'ڐ', 5834 => 'ۮ', 5835 => 'ݙ', 5836 => 'ݚ', 5837 => 'ر', 5838 => 'ز', 5839 => 'ڑ', 5840 => 'ڒ', 5841 => 'ړ', 5842 => 'ڔ', 5843 => 'ڕ', 5844 => 'ږ', 5845 => 'ڗ', 5846 => 'ژ', 5847 => 'ڙ', 5848 => 'ۯ', 5849 => 'ݛ', 5850 => 'ݫ', 5851 => 'ݬ', 5852 => 'ݱ', 5853 => 'س', 5854 => 'ش', 5855 => 'ښ', 5856 => 'ڛ', 5857 => 'ڜ', 5858 => 'ۺ', 5859 => 'ݜ', 5860 => 'ݭ', 5861 => 'ݰ', 5862 => 'ݽ', 5863 => 'ݾ', 5864 => 'ص', 5865 => 'ض', 5866 => 'ڝ', 5867 => 'ڞ', 5868 => 'ۻ', 5869 => 'ط', 5870 => 'ظ', 5871 => 'ڟ', 5872 => 'ع', 5873 => 'غ', 5874 => 'ڠ', 5875 => 'ۼ', 5876 => 'ݝ', 5877 => 'ݞ', 5878 => 'ݟ', 5879 => 'ف', 5880 => 'ڡ', 5881 => 'ڢ', 5882 => 'ڣ', 5883 => 'ڤ', 5884 => 'ڥ', 5885 => 'ڦ', 5886 => 'ݠ', 5887 => 'ݡ', 5888 => 'ٯ', 5889 => 'ق', 5890 => 'ڧ', 5891 => 'ڨ', 5892 => 'ك', 5893 => 'ک', 5894 => 'ڪ', 5895 => 'ګ', 5896 => 'ڬ', 5897 => 'ݿ', 5898 => 'ڭ', 5899 => 'ڮ', 5900 => 'گ', 5901 => 'ڰ', 5902 => 'ڱ', 5903 => 'ڲ', 5904 => 'ڳ', 5905 => 'ڴ', 5906 => 'ݢ', 5907 => 'ػ', 5908 => 'ؼ', 5909 => 'ݣ', 5910 => 'ݤ', 5911 => 'ل', 5912 => 'ڵ', 5913 => 'ڶ', 5914 => 'ڷ', 5915 => 'ڸ', 5916 => 'ݪ', 5917 => 'م', 5918 => 'ݥ', 5919 => 'ݦ', 5920 => 'ن', 5921 => 'ں', 5922 => 'ڻ', 5923 => 'ڼ', 5924 => 'ڽ', 5925 => 'ڹ', 5926 => 'ݧ', 5927 => 'ݨ', 5928 => 'ݩ', 5929 => 'ه', 5930 => 'ھ', 5931 => 'ہ', 5932 => 'ۃ', 5933 => 'ۿ', 5934 => 'ە', 5935 => 'و', 5936 => 'ۄ', 5937 => 'ۅ', 5938 => 'ۆ', 5939 => 'ۇ', 5940 => 'ۈ', 5941 => 'ۉ', 5942 => 'ۊ', 5943 => 'ۋ', 5944 => 'ۏ', 5945 => 'ݸ', 5946 => 'ݹ', 5947 => 'ى', 5948 => 'ي', 5949 => 'ی', 5950 => 'ۍ', 5951 => 'ێ', 5952 => 'ې', 5953 => 'ۑ', 5954 => 'ؽ', 5955 => 'ؾ', 5956 => 'ؿ', 5957 => 'ؠ', 5958 => 'ݵ', 5959 => 'ݶ', 5960 => 'ݷ', 5961 => 'ے', 5962 => 'ݺ', 5963 => 'ݻ', 5964 => 'ܐ', 5965 => 'ܒ', 5966 => 'ܓ', 5967 => 'ܖ', 5968 => 'ܕ', 5969 => 'ܗ', 5970 => 'ܘ', 5971 => 'ܙ', 5972 => 'ݍ', 5973 => 'ܚ', 5974 => 'ܛ', 5975 => 'ܝ', 5976 => 'ܞ', 5977 => 'ܟ', 5978 => 'ݎ', 5979 => 'ܠ', 5980 => 'ܡ', 5981 => 'ܢ', 5982 => 'ܣ', 5983 => 'ܥ', 5984 => 'ܦ', 5985 => 'ݏ', 5986 => 'ܨ', 5987 => 'ܩ', 5988 => 'ܪ', 5989 => 'ܫ', 5990 => 'ܬ', 5991 => 'ࡀ', 5992 => 'ࡁ', 5993 => 'ࡂ', 5994 => 'ࡃ', 5995 => 'ࡄ', 5996 => 'ࡅ', 5997 => 'ࡆ', 5998 => 'ࡇ', 5999 => 'ࡈ', 6000 => 'ࡉ', 6001 => 'ࡊ', 6002 => 'ࡋ', 6003 => 'ࡌ', 6004 => 'ࡍ', 6005 => 'ࡎ', 6006 => 'ࡏ', 6007 => 'ࡐ', 6008 => 'ࡑ', 6009 => 'ࡒ', 6010 => 'ࡓ', 6011 => 'ࡔ', 6012 => 'ࡕ', 6013 => 'ࡖ', 6014 => 'ࡗ', 6015 => 'ࡘ', 6016 => 'ހ', 6017 => 'ޙ', 6018 => 'ޚ', 6019 => 'ށ', 6020 => 'ނ', 6021 => 'ރ', 6022 => 'ޜ', 6023 => 'ބ', 6024 => 'ޅ', 6025 => 'ކ', 6026 => 'އ', 6027 => 'ޢ', 6028 => 'ޣ', 6029 => 'ވ', 6030 => 'ޥ', 6031 => 'މ', 6032 => 'ފ', 6033 => 'ދ', 6034 => 'ޛ', 6035 => 'ތ', 6036 => 'ޘ', 6037 => 'ޠ', 6038 => 'ޡ', 6039 => 'ލ', 6040 => 'ގ', 6041 => 'ޤ', 6042 => 'ޏ', 6043 => 'ސ', 6044 => 'ޝ', 6045 => 'ޞ', 6046 => 'ޟ', 6047 => 'ޑ', 6048 => 'ޒ', 6049 => 'ޓ', 6050 => 'ޔ', 6051 => 'ޕ', 6052 => 'ޖ', 6053 => 'ޗ', 6054 => 'ޱ', 6055 => 'ߊ', 6056 => 'ߋ', 6057 => 'ߌ', 6058 => 'ߍ', 6059 => 'ߎ', 6060 => 'ߏ', 6061 => 'ߐ', 6062 => 'ߑ', 6063 => 'ߒ', 6064 => 'ߓ', 6065 => 'ߔ', 6066 => 'ߕ', 6067 => 'ߖ', 6068 => 'ߗ', 6069 => 'ߘ', 6070 => 'ߙ', 6071 => 'ߚ', 6072 => 'ߛ', 6073 => 'ߜ', 6074 => 'ߝ', 6075 => 'ߞ', 6076 => 'ߟ', 6077 => 'ߠ', 6078 => 'ߡ', 6079 => 'ߢ', 6080 => 'ߣ', 6081 => 'ߤ', 6082 => 'ߥ', 6083 => 'ߦ', 6084 => 'ߧ', 6085 => 'ߴ', 6086 => 'ߵ', 6087 => 'ⴰ', 6088 => 'ⴱ', 6089 => 'ⴲ', 6090 => 'ⴳ', 6091 => 'ⴴ', 6092 => 'ⴵ', 6093 => 'ⴶ', 6094 => 'ⴷ', 6095 => 'ⴸ', 6096 => 'ⴹ', 6097 => 'ⴺ', 6098 => 'ⴻ', 6099 => 'ⴼ', 6100 => 'ⴽ', 6101 => 'ⴾ', 6102 => 'ⴿ', 6103 => 'ⵀ', 6104 => 'ⵁ', 6105 => 'ⵂ', 6106 => 'ⵃ', 6107 => 'ⵄ', 6108 => 'ⵅ', 6109 => 'ⵆ', 6110 => 'ⵇ', 6111 => 'ⵈ', 6112 => 'ⵉ', 6113 => 'ⵊ', 6114 => 'ⵋ', 6115 => 'ⵌ', 6116 => 'ⵍ', 6117 => 'ⵎ', 6118 => 'ⵏ', 6119 => 'ⵐ', 6120 => 'ⵑ', 6121 => 'ⵒ', 6122 => 'ⵓ', 6123 => 'ⵔ', 6124 => 'ⵕ', 6125 => 'ⵖ', 6126 => 'ⵗ', 6127 => 'ⵘ', 6128 => 'ⵙ', 6129 => 'ⵚ', 6130 => 'ⵛ', 6131 => 'ⵜ', 6132 => 'ⵝ', 6133 => 'ⵞ', 6134 => 'ⵟ', 6135 => 'ⵠ', 6136 => 'ⵡ', 6137 => 'ⵢ', 6138 => 'ⵣ', 6139 => 'ⵤ', 6140 => 'ⵥ', 6141 => 'ⵯ', 6142 => 'ሀ', 6143 => 'ሁ', 6144 => 'ሂ', 6145 => 'ሃ', 6146 => 'ሄ', 6147 => 'ህ', 6148 => 'ሆ', 6149 => 'ሇ', 6150 => 'ለ', 6151 => 'ሉ', 6152 => 'ሊ', 6153 => 'ላ', 6154 => 'ሌ', 6155 => 'ል', 6156 => 'ሎ', 6157 => 'ሏ', 6158 => 'ⶀ', 6159 => 'ሐ', 6160 => 'ሑ', 6161 => 'ሒ', 6162 => 'ሓ', 6163 => 'ሔ', 6164 => 'ሕ', 6165 => 'ሖ', 6166 => 'ሗ', 6167 => 'መ', 6168 => 'ሙ', 6169 => 'ሚ', 6170 => 'ማ', 6171 => 'ሜ', 6172 => 'ም', 6173 => 'ሞ', 6174 => 'ሟ', 6175 => 'ᎀ', 6176 => 'ᎁ', 6177 => 'ᎂ', 6178 => 'ᎃ', 6179 => 'ⶁ', 6180 => 'ሠ', 6181 => 'ሡ', 6182 => 'ሢ', 6183 => 'ሣ', 6184 => 'ሤ', 6185 => 'ሥ', 6186 => 'ሦ', 6187 => 'ሧ', 6188 => 'ረ', 6189 => 'ሩ', 6190 => 'ሪ', 6191 => 'ራ', 6192 => 'ሬ', 6193 => 'ር', 6194 => 'ሮ', 6195 => 'ሯ', 6196 => 'ⶂ', 6197 => 'ሰ', 6198 => 'ሱ', 6199 => 'ሲ', 6200 => 'ሳ', 6201 => 'ሴ', 6202 => 'ስ', 6203 => 'ሶ', 6204 => 'ሷ', 6205 => 'ⶃ', 6206 => 'ꬁ', 6207 => 'ꬂ', 6208 => 'ꬃ', 6209 => 'ꬄ', 6210 => 'ꬅ', 6211 => 'ꬆ', 6212 => 'ሸ', 6213 => 'ሹ', 6214 => 'ሺ', 6215 => 'ሻ', 6216 => 'ሼ', 6217 => 'ሽ', 6218 => 'ሾ', 6219 => 'ሿ', 6220 => 'ⶄ', 6221 => 'ቀ', 6222 => 'ቁ', 6223 => 'ቂ', 6224 => 'ቃ', 6225 => 'ቄ', 6226 => 'ቅ', 6227 => 'ቆ', 6228 => 'ቇ', 6229 => 'ቈ', 6230 => 'ቊ', 6231 => 'ቋ', 6232 => 'ቌ', 6233 => 'ቍ', 6234 => 'ቐ', 6235 => 'ቑ', 6236 => 'ቒ', 6237 => 'ቓ', 6238 => 'ቔ', 6239 => 'ቕ', 6240 => 'ቖ', 6241 => 'ቘ', 6242 => 'ቚ', 6243 => 'ቛ', 6244 => 'ቜ', 6245 => 'ቝ', 6246 => 'በ', 6247 => 'ቡ', 6248 => 'ቢ', 6249 => 'ባ', 6250 => 'ቤ', 6251 => 'ብ', 6252 => 'ቦ', 6253 => 'ቧ', 6254 => 'ᎄ', 6255 => 'ᎅ', 6256 => 'ᎆ', 6257 => 'ᎇ', 6258 => 'ⶅ', 6259 => 'ቨ', 6260 => 'ቩ', 6261 => 'ቪ', 6262 => 'ቫ', 6263 => 'ቬ', 6264 => 'ቭ', 6265 => 'ቮ', 6266 => 'ቯ', 6267 => 'ተ', 6268 => 'ቱ', 6269 => 'ቲ', 6270 => 'ታ', 6271 => 'ቴ', 6272 => 'ት', 6273 => 'ቶ', 6274 => 'ቷ', 6275 => 'ⶆ', 6276 => 'ቸ', 6277 => 'ቹ', 6278 => 'ቺ', 6279 => 'ቻ', 6280 => 'ቼ', 6281 => 'ች', 6282 => 'ቾ', 6283 => 'ቿ', 6284 => 'ⶇ', 6285 => 'ኀ', 6286 => 'ኁ', 6287 => 'ኂ', 6288 => 'ኃ', 6289 => 'ኄ', 6290 => 'ኅ', 6291 => 'ኆ', 6292 => 'ኇ', 6293 => 'ኈ', 6294 => 'ኊ', 6295 => 'ኋ', 6296 => 'ኌ', 6297 => 'ኍ', 6298 => 'ነ', 6299 => 'ኑ', 6300 => 'ኒ', 6301 => 'ና', 6302 => 'ኔ', 6303 => 'ን', 6304 => 'ኖ', 6305 => 'ኗ', 6306 => 'ⶈ', 6307 => 'ኘ', 6308 => 'ኙ', 6309 => 'ኚ', 6310 => 'ኛ', 6311 => 'ኜ', 6312 => 'ኝ', 6313 => 'ኞ', 6314 => 'ኟ', 6315 => 'ⶉ', 6316 => 'አ', 6317 => 'ኡ', 6318 => 'ኢ', 6319 => 'ኣ', 6320 => 'ኤ', 6321 => 'እ', 6322 => 'ኦ', 6323 => 'ኧ', 6324 => 'ⶊ', 6325 => 'ከ', 6326 => 'ኩ', 6327 => 'ኪ', 6328 => 'ካ', 6329 => 'ኬ', 6330 => 'ክ', 6331 => 'ኮ', 6332 => 'ኯ', 6333 => 'ኰ', 6334 => 'ኲ', 6335 => 'ኳ', 6336 => 'ኴ', 6337 => 'ኵ', 6338 => 'ኸ', 6339 => 'ኹ', 6340 => 'ኺ', 6341 => 'ኻ', 6342 => 'ኼ', 6343 => 'ኽ', 6344 => 'ኾ', 6345 => 'ዀ', 6346 => 'ዂ', 6347 => 'ዃ', 6348 => 'ዄ', 6349 => 'ዅ', 6350 => 'ወ', 6351 => 'ዉ', 6352 => 'ዊ', 6353 => 'ዋ', 6354 => 'ዌ', 6355 => 'ው', 6356 => 'ዎ', 6357 => 'ዏ', 6358 => 'ዐ', 6359 => 'ዑ', 6360 => 'ዒ', 6361 => 'ዓ', 6362 => 'ዔ', 6363 => 'ዕ', 6364 => 'ዖ', 6365 => 'ዘ', 6366 => 'ዙ', 6367 => 'ዚ', 6368 => 'ዛ', 6369 => 'ዜ', 6370 => 'ዝ', 6371 => 'ዞ', 6372 => 'ዟ', 6373 => 'ⶋ', 6374 => 'ꬑ', 6375 => 'ꬒ', 6376 => 'ꬓ', 6377 => 'ꬔ', 6378 => 'ꬕ', 6379 => 'ꬖ', 6380 => 'ዠ', 6381 => 'ዡ', 6382 => 'ዢ', 6383 => 'ዣ', 6384 => 'ዤ', 6385 => 'ዥ', 6386 => 'ዦ', 6387 => 'ዧ', 6388 => 'የ', 6389 => 'ዩ', 6390 => 'ዪ', 6391 => 'ያ', 6392 => 'ዬ', 6393 => 'ይ', 6394 => 'ዮ', 6395 => 'ዯ', 6396 => 'ደ', 6397 => 'ዱ', 6398 => 'ዲ', 6399 => 'ዳ', 6400 => 'ዴ', 6401 => 'ድ', 6402 => 'ዶ', 6403 => 'ዷ', 6404 => 'ⶌ', 6405 => 'ꬉ', 6406 => 'ꬊ', 6407 => 'ꬋ', 6408 => 'ꬌ', 6409 => 'ꬍ', 6410 => 'ꬎ', 6411 => 'ዸ', 6412 => 'ዹ', 6413 => 'ዺ', 6414 => 'ዻ', 6415 => 'ዼ', 6416 => 'ዽ', 6417 => 'ዾ', 6418 => 'ዿ', 6419 => 'ⶍ', 6420 => 'ጀ', 6421 => 'ጁ', 6422 => 'ጂ', 6423 => 'ጃ', 6424 => 'ጄ', 6425 => 'ጅ', 6426 => 'ጆ', 6427 => 'ጇ', 6428 => 'ⶎ', 6429 => 'ገ', 6430 => 'ጉ', 6431 => 'ጊ', 6432 => 'ጋ', 6433 => 'ጌ', 6434 => 'ግ', 6435 => 'ጎ', 6436 => 'ጏ', 6437 => 'ጐ', 6438 => 'ጒ', 6439 => 'ጓ', 6440 => 'ጔ', 6441 => 'ጕ', 6442 => 'ጘ', 6443 => 'ጙ', 6444 => 'ጚ', 6445 => 'ጛ', 6446 => 'ጜ', 6447 => 'ጝ', 6448 => 'ጞ', 6449 => 'ጟ', 6450 => 'ⶓ', 6451 => 'ⶔ', 6452 => 'ⶕ', 6453 => 'ⶖ', 6454 => 'ጠ', 6455 => 'ጡ', 6456 => 'ጢ', 6457 => 'ጣ', 6458 => 'ጤ', 6459 => 'ጥ', 6460 => 'ጦ', 6461 => 'ጧ', 6462 => 'ⶏ', 6463 => 'ጨ', 6464 => 'ጩ', 6465 => 'ጪ', 6466 => 'ጫ', 6467 => 'ጬ', 6468 => 'ጭ', 6469 => 'ጮ', 6470 => 'ጯ', 6471 => 'ⶐ', 6472 => 'ꬠ', 6473 => 'ꬡ', 6474 => 'ꬢ', 6475 => 'ꬣ', 6476 => 'ꬤ', 6477 => 'ꬥ', 6478 => 'ꬦ', 6479 => 'ጰ', 6480 => 'ጱ', 6481 => 'ጲ', 6482 => 'ጳ', 6483 => 'ጴ', 6484 => 'ጵ', 6485 => 'ጶ', 6486 => 'ጷ', 6487 => 'ⶑ', 6488 => 'ጸ', 6489 => 'ጹ', 6490 => 'ጺ', 6491 => 'ጻ', 6492 => 'ጼ', 6493 => 'ጽ', 6494 => 'ጾ', 6495 => 'ጿ', 6496 => 'ꬨ', 6497 => 'ꬩ', 6498 => 'ꬪ', 6499 => 'ꬫ', 6500 => 'ꬬ', 6501 => 'ꬭ', 6502 => 'ꬮ', 6503 => 'ፀ', 6504 => 'ፁ', 6505 => 'ፂ', 6506 => 'ፃ', 6507 => 'ፄ', 6508 => 'ፅ', 6509 => 'ፆ', 6510 => 'ፇ', 6511 => 'ፈ', 6512 => 'ፉ', 6513 => 'ፊ', 6514 => 'ፋ', 6515 => 'ፌ', 6516 => 'ፍ', 6517 => 'ፎ', 6518 => 'ፏ', 6519 => 'ᎈ', 6520 => 'ᎉ', 6521 => 'ᎊ', 6522 => 'ᎋ', 6523 => 'ፐ', 6524 => 'ፑ', 6525 => 'ፒ', 6526 => 'ፓ', 6527 => 'ፔ', 6528 => 'ፕ', 6529 => 'ፖ', 6530 => 'ፗ', 6531 => 'ᎌ', 6532 => 'ᎍ', 6533 => 'ᎎ', 6534 => 'ᎏ', 6535 => 'ⶒ', 6536 => 'ፘ', 6537 => 'ፙ', 6538 => 'ፚ', 6539 => 'ⶠ', 6540 => 'ⶡ', 6541 => 'ⶢ', 6542 => 'ⶣ', 6543 => 'ⶤ', 6544 => 'ⶥ', 6545 => 'ⶦ', 6546 => 'ⶨ', 6547 => 'ⶩ', 6548 => 'ⶪ', 6549 => 'ⶫ', 6550 => 'ⶬ', 6551 => 'ⶭ', 6552 => 'ⶮ', 6553 => 'ⶰ', 6554 => 'ⶱ', 6555 => 'ⶲ', 6556 => 'ⶳ', 6557 => 'ⶴ', 6558 => 'ⶵ', 6559 => 'ⶶ', 6560 => 'ⶸ', 6561 => 'ⶹ', 6562 => 'ⶺ', 6563 => 'ⶻ', 6564 => 'ⶼ', 6565 => 'ⶽ', 6566 => 'ⶾ', 6567 => 'ⷀ', 6568 => 'ⷁ', 6569 => 'ⷂ', 6570 => 'ⷃ', 6571 => 'ⷄ', 6572 => 'ⷅ', 6573 => 'ⷆ', 6574 => 'ⷈ', 6575 => 'ⷉ', 6576 => 'ⷊ', 6577 => 'ⷋ', 6578 => 'ⷌ', 6579 => 'ⷍ', 6580 => 'ⷎ', 6581 => 'ⷐ', 6582 => 'ⷑ', 6583 => 'ⷒ', 6584 => 'ⷓ', 6585 => 'ⷔ', 6586 => 'ⷕ', 6587 => 'ⷖ', 6588 => 'ⷘ', 6589 => 'ⷙ', 6590 => 'ⷚ', 6591 => 'ⷛ', 6592 => 'ⷜ', 6593 => 'ⷝ', 6594 => 'ⷞ', 6595 => 'ॐ', 6596 => 'ॲ', 6597 => 'ऄ', 6598 => 'अ', 6599 => 'आ', 6600 => 'ॳ', 6601 => 'ॴ', 6602 => 'ॵ', 6603 => 'ॶ', 6604 => 'ॷ', 6605 => 'इ', 6606 => 'ई', 6607 => 'उ', 6608 => 'ऊ', 6609 => 'ऋ', 6610 => 'ॠ', 6611 => 'ऌ', 6612 => 'ॡ', 6613 => 'ऍ', 6614 => 'ऎ', 6615 => 'ए', 6616 => 'ऐ', 6617 => 'ऑ', 6618 => 'ऒ', 6619 => 'ओ', 6620 => 'औ', 6621 => 'क', 6622 => 'ख', 6623 => 'ग', 6624 => 'ॻ', 6625 => 'घ', 6626 => 'ङ', 6627 => 'च', 6628 => 'छ', 6629 => 'ज', 6630 => 'ॹ', 6631 => 'ॼ', 6632 => 'झ', 6633 => 'ञ', 6634 => 'ट', 6635 => 'ठ', 6636 => 'ड', 6637 => 'ॾ', 6638 => 'ढ', 6639 => 'ण', 6640 => 'त', 6641 => 'थ', 6642 => 'द', 6643 => 'ध', 6644 => 'न', 6645 => 'प', 6646 => 'फ', 6647 => 'ब', 6648 => 'ॿ', 6649 => 'भ', 6650 => 'म', 6651 => 'य', 6652 => 'ॺ', 6653 => 'र', 6654 => 'ल', 6655 => 'ळ', 6656 => 'व', 6657 => 'श', 6658 => 'ष', 6659 => 'स', 6660 => 'ह', 6661 => 'ऽ', 6662 => 'ॽ', 6663 => 'ᳩ', 6664 => 'ꣲ', 6665 => 'ꣻ', 6666 => 'অ', 6667 => 'আ', 6668 => 'ই', 6669 => 'ঈ', 6670 => 'উ', 6671 => 'ঊ', 6672 => 'ঋ', 6673 => 'ৠ', 6674 => 'ঌ', 6675 => 'ৡ', 6676 => 'এ', 6677 => 'ঐ', 6678 => 'ও', 6679 => 'ঔ', 6680 => 'ক', 6681 => 'খ', 6682 => 'গ', 6683 => 'ঘ', 6684 => 'ঙ', 6685 => 'চ', 6686 => 'ছ', 6687 => 'জ', 6688 => 'ঝ', 6689 => 'ঞ', 6690 => 'ট', 6691 => 'ঠ', 6692 => 'ড', 6693 => 'ঢ', 6694 => 'ণ', 6695 => 'ত', 6696 => 'থ', 6697 => 'দ', 6698 => 'ধ', 6699 => 'ন', 6700 => 'প', 6701 => 'ফ', 6702 => 'ব', 6703 => 'ভ', 6704 => 'ম', 6705 => 'য', 6706 => 'র', 6707 => 'ৰ', 6708 => 'ল', 6709 => 'ৱ', 6710 => 'শ', 6711 => 'ষ', 6712 => 'স', 6713 => 'হ', 6714 => 'ঽ', 6715 => 'ੴ', 6716 => 'ੳ', 6717 => 'ਉ', 6718 => 'ਊ', 6719 => 'ਓ', 6720 => 'ਅ', 6721 => 'ਆ', 6722 => 'ਐ', 6723 => 'ਔ', 6724 => 'ੲ', 6725 => 'ਇ', 6726 => 'ਈ', 6727 => 'ਏ', 6728 => 'ਸ', 6729 => 'ਹ', 6730 => 'ਕ', 6731 => 'ਖ', 6732 => 'ਗ', 6733 => 'ਘ', 6734 => 'ਙ', 6735 => 'ਚ', 6736 => 'ਛ', 6737 => 'ਜ', 6738 => 'ਝ', 6739 => 'ਞ', 6740 => 'ਟ', 6741 => 'ਠ', 6742 => 'ਡ', 6743 => 'ਢ', 6744 => 'ਣ', 6745 => 'ਤ', 6746 => 'ਥ', 6747 => 'ਦ', 6748 => 'ਧ', 6749 => 'ਨ', 6750 => 'ਪ', 6751 => 'ਫ', 6752 => 'ਬ', 6753 => 'ਭ', 6754 => 'ਮ', 6755 => 'ਯ', 6756 => 'ਰ', 6757 => 'ਲ', 6758 => 'ਵ', 6759 => 'ੜ', 6760 => 'ૐ', 6761 => 'અ', 6762 => 'આ', 6763 => 'ઇ', 6764 => 'ઈ', 6765 => 'ઉ', 6766 => 'ઊ', 6767 => 'ઋ', 6768 => 'ૠ', 6769 => 'ઌ', 6770 => 'ૡ', 6771 => 'ઍ', 6772 => 'એ', 6773 => 'ઐ', 6774 => 'ઑ', 6775 => 'ઓ', 6776 => 'ઔ', 6777 => 'ક', 6778 => 'ખ', 6779 => 'ગ', 6780 => 'ઘ', 6781 => 'ઙ', 6782 => 'ચ', 6783 => 'છ', 6784 => 'જ', 6785 => 'ઝ', 6786 => 'ઞ', 6787 => 'ટ', 6788 => 'ઠ', 6789 => 'ડ', 6790 => 'ઢ', 6791 => 'ણ', 6792 => 'ત', 6793 => 'થ', 6794 => 'દ', 6795 => 'ધ', 6796 => 'ન', 6797 => 'પ', 6798 => 'ફ', 6799 => 'બ', 6800 => 'ભ', 6801 => 'મ', 6802 => 'ય', 6803 => 'ર', 6804 => 'લ', 6805 => 'વ', 6806 => 'શ', 6807 => 'ષ', 6808 => 'સ', 6809 => 'હ', 6810 => 'ળ', 6811 => 'ઽ', 6812 => 'ଅ', 6813 => 'ଆ', 6814 => 'ଇ', 6815 => 'ଈ', 6816 => 'ଉ', 6817 => 'ଊ', 6818 => 'ଋ', 6819 => 'ୠ', 6820 => 'ଌ', 6821 => 'ୡ', 6822 => 'ଏ', 6823 => 'ଐ', 6824 => 'ଓ', 6825 => 'ଔ', 6826 => 'କ', 6827 => 'ଖ', 6828 => 'ଗ', 6829 => 'ଘ', 6830 => 'ଙ', 6831 => 'ଚ', 6832 => 'ଛ', 6833 => 'ଜ', 6834 => 'ଝ', 6835 => 'ଞ', 6836 => 'ଟ', 6837 => 'ଠ', 6838 => 'ଡ', 6839 => 'ଢ', 6840 => 'ଣ', 6841 => 'ତ', 6842 => 'ଥ', 6843 => 'ଦ', 6844 => 'ଧ', 6845 => 'ନ', 6846 => 'ପ', 6847 => 'ଫ', 6848 => 'ବ', 6849 => 'ଭ', 6850 => 'ମ', 6851 => 'ଯ', 6852 => 'ୟ', 6853 => 'ର', 6854 => 'ଲ', 6855 => 'ଳ', 6856 => 'ଵ', 6857 => 'ୱ', 6858 => 'ଶ', 6859 => 'ଷ', 6860 => 'ସ', 6861 => 'ହ', 6862 => 'ଽ', 6863 => 'ௐ', 6864 => 'அ', 6865 => 'ஆ', 6866 => 'இ', 6867 => 'ஈ', 6868 => 'உ', 6869 => 'ஊ', 6870 => 'எ', 6871 => 'ஏ', 6872 => 'ஐ', 6873 => 'ஒ', 6874 => 'ஓ', 6875 => 'ஔ', 6876 => 'ஃ', 6877 => 'க', 6878 => 'ங', 6879 => 'ச', 6880 => 'ஞ', 6881 => 'ட', 6882 => 'ண', 6883 => 'த', 6884 => 'ந', 6885 => 'ப', 6886 => 'ம', 6887 => 'ய', 6888 => 'ர', 6889 => 'ல', 6890 => 'வ', 6891 => 'ழ', 6892 => 'ள', 6893 => 'ற', 6894 => 'ன', 6895 => 'ஜ', 6896 => 'ஶ', 6897 => 'ஷ', 6898 => 'ஸ', 6899 => 'ஹ', 6900 => 'అ', 6901 => 'ఆ', 6902 => 'ఇ', 6903 => 'ఈ', 6904 => 'ఉ', 6905 => 'ఊ', 6906 => 'ఋ', 6907 => 'ౠ', 6908 => 'ఌ', 6909 => 'ౡ', 6910 => 'ఎ', 6911 => 'ఏ', 6912 => 'ఐ', 6913 => 'ఒ', 6914 => 'ఓ', 6915 => 'ఔ', 6916 => 'క', 6917 => 'ఖ', 6918 => 'గ', 6919 => 'ఘ', 6920 => 'ఙ', 6921 => 'చ', 6922 => 'ౘ', 6923 => 'ఛ', 6924 => 'జ', 6925 => 'ౙ', 6926 => 'ఝ', 6927 => 'ఞ', 6928 => 'ట', 6929 => 'ఠ', 6930 => 'డ', 6931 => 'ఢ', 6932 => 'ణ', 6933 => 'త', 6934 => 'థ', 6935 => 'ద', 6936 => 'ధ', 6937 => 'న', 6938 => 'ప', 6939 => 'ఫ', 6940 => 'బ', 6941 => 'భ', 6942 => 'మ', 6943 => 'య', 6944 => 'ర', 6945 => 'ఱ', 6946 => 'ల', 6947 => 'వ', 6948 => 'శ', 6949 => 'ష', 6950 => 'స', 6951 => 'హ', 6952 => 'ళ', 6953 => 'ఽ', 6954 => 'ಅ', 6955 => 'ಆ', 6956 => 'ಇ', 6957 => 'ಈ', 6958 => 'ಉ', 6959 => 'ಊ', 6960 => 'ಋ', 6961 => 'ೠ', 6962 => 'ಌ', 6963 => 'ೡ', 6964 => 'ಎ', 6965 => 'ಏ', 6966 => 'ಐ', 6967 => 'ಒ', 6968 => 'ಓ', 6969 => 'ಔ', 6970 => 'ಕ', 6971 => 'ಖ', 6972 => 'ಗ', 6973 => 'ಘ', 6974 => 'ಙ', 6975 => 'ಚ', 6976 => 'ಛ', 6977 => 'ಜ', 6978 => 'ಝ', 6979 => 'ಞ', 6980 => 'ಟ', 6981 => 'ಠ', 6982 => 'ಡ', 6983 => 'ಢ', 6984 => 'ಣ', 6985 => 'ತ', 6986 => 'ಥ', 6987 => 'ದ', 6988 => 'ಧ', 6989 => 'ನ', 6990 => 'ಪ', 6991 => 'ಫ', 6992 => 'ಬ', 6993 => 'ಭ', 6994 => 'ಮ', 6995 => 'ಯ', 6996 => 'ರ', 6997 => 'ಱ', 6998 => 'ಲ', 6999 => 'ವ', 7000 => 'ಶ', 7001 => 'ಷ', 7002 => 'ಸ', 7003 => 'ಹ', 7004 => 'ಳ', 7005 => 'ೞ', 7006 => 'ಽ', 7007 => 'ೱ', 7008 => 'ೲ', 7009 => 'അ', 7010 => 'ആ', 7011 => 'ഇ', 7012 => 'ഈ', 7013 => 'ഉ', 7014 => 'ഊ', 7015 => 'ഋ', 7016 => 'ൠ', 7017 => 'ഌ', 7018 => 'ൡ', 7019 => 'എ', 7020 => 'ഏ', 7021 => 'ഐ', 7022 => 'ഒ', 7023 => 'ഓ', 7024 => 'ഔ', 7025 => 'ക', 7026 => 'ഖ', 7027 => 'ഗ', 7028 => 'ഘ', 7029 => 'ങ', 7030 => 'ച', 7031 => 'ഛ', 7032 => 'ജ', 7033 => 'ഝ', 7034 => 'ഞ', 7035 => 'ട', 7036 => 'ഠ', 7037 => 'ഡ', 7038 => 'ഢ', 7039 => 'ണ', 7040 => 'ത', 7041 => 'ഥ', 7042 => 'ദ', 7043 => 'ധ', 7044 => 'ന', 7045 => 'ഩ', 7046 => 'പ', 7047 => 'ഫ', 7048 => 'ബ', 7049 => 'ഭ', 7050 => 'മ', 7051 => 'യ', 7052 => 'ര', 7053 => 'ല', 7054 => 'വ', 7055 => 'ശ', 7056 => 'ഷ', 7057 => 'സ', 7058 => 'ഹ', 7059 => 'ള', 7060 => 'ഴ', 7061 => 'റ', 7062 => 'ഺ', 7063 => 'ഽ', 7064 => 'අ', 7065 => 'ආ', 7066 => 'ඇ', 7067 => 'ඈ', 7068 => 'ඉ', 7069 => 'ඊ', 7070 => 'උ', 7071 => 'ඌ', 7072 => 'ඍ', 7073 => 'ඎ', 7074 => 'ඏ', 7075 => 'ඐ', 7076 => 'එ', 7077 => 'ඒ', 7078 => 'ඓ', 7079 => 'ඔ', 7080 => 'ඕ', 7081 => 'ඖ', 7082 => 'ක', 7083 => 'ඛ', 7084 => 'ග', 7085 => 'ඝ', 7086 => 'ඞ', 7087 => 'ඟ', 7088 => 'ච', 7089 => 'ඡ', 7090 => 'ජ', 7091 => 'ඣ', 7092 => 'ඤ', 7093 => 'ඥ', 7094 => 'ඦ', 7095 => 'ට', 7096 => 'ඨ', 7097 => 'ඩ', 7098 => 'ඪ', 7099 => 'ණ', 7100 => 'ඬ', 7101 => 'ත', 7102 => 'ථ', 7103 => 'ද', 7104 => 'ධ', 7105 => 'න', 7106 => 'ඳ', 7107 => 'ප', 7108 => 'ඵ', 7109 => 'බ', 7110 => 'භ', 7111 => 'ම', 7112 => 'ඹ', 7113 => 'ය', 7114 => 'ර', 7115 => 'ල', 7116 => 'ව', 7117 => 'ශ', 7118 => 'ෂ', 7119 => 'ස', 7120 => 'හ', 7121 => 'ළ', 7122 => 'ෆ', 7123 => 'ꯀ', 7124 => 'ꯁ', 7125 => 'ꯂ', 7126 => 'ꯃ', 7127 => 'ꯄ', 7128 => 'ꯅ', 7129 => 'ꯆ', 7130 => 'ꯇ', 7131 => 'ꯈ', 7132 => 'ꯉ', 7133 => 'ꯊ', 7134 => 'ꯋ', 7135 => 'ꯌ', 7136 => 'ꯍ', 7137 => 'ꯎ', 7138 => 'ꯏ', 7139 => 'ꯐ', 7140 => 'ꯑ', 7141 => 'ꯒ', 7142 => 'ꯓ', 7143 => 'ꯔ', 7144 => 'ꯕ', 7145 => 'ꯖ', 7146 => 'ꯗ', 7147 => 'ꯘ', 7148 => 'ꯙ', 7149 => 'ꯚ', 7150 => 'ꯛ', 7151 => 'ꯜ', 7152 => 'ꯝ', 7153 => 'ꯞ', 7154 => 'ꯟ', 7155 => 'ꯠ', 7156 => 'ꯡ', 7157 => 'ꯢ', 7158 => 'ꠀ', 7159 => 'ꠁ', 7160 => 'ꠃ', 7161 => 'ꠄ', 7162 => 'ꠅ', 7163 => 'ꠇ', 7164 => 'ꠈ', 7165 => 'ꠉ', 7166 => 'ꠊ', 7167 => 'ꠌ', 7168 => 'ꠍ', 7169 => 'ꠎ', 7170 => 'ꠏ', 7171 => 'ꠐ', 7172 => 'ꠑ', 7173 => 'ꠒ', 7174 => 'ꠓ', 7175 => 'ꠔ', 7176 => 'ꠕ', 7177 => 'ꠖ', 7178 => 'ꠗ', 7179 => 'ꠘ', 7180 => 'ꠙ', 7181 => 'ꠚ', 7182 => 'ꠛ', 7183 => 'ꠜ', 7184 => 'ꠝ', 7185 => 'ꠞ', 7186 => 'ꠟ', 7187 => 'ꠠ', 7188 => 'ꠡ', 7189 => 'ꠢ', 7190 => 'ꢂ', 7191 => 'ꢃ', 7192 => 'ꢄ', 7193 => 'ꢅ', 7194 => 'ꢆ', 7195 => 'ꢇ', 7196 => 'ꢈ', 7197 => 'ꢉ', 7198 => 'ꢊ', 7199 => 'ꢋ', 7200 => 'ꢌ', 7201 => 'ꢍ', 7202 => 'ꢎ', 7203 => 'ꢏ', 7204 => 'ꢐ', 7205 => 'ꢑ', 7206 => 'ꢒ', 7207 => 'ꢓ', 7208 => 'ꢔ', 7209 => 'ꢕ', 7210 => 'ꢖ', 7211 => 'ꢗ', 7212 => 'ꢘ', 7213 => 'ꢙ', 7214 => 'ꢚ', 7215 => 'ꢛ', 7216 => 'ꢜ', 7217 => 'ꢝ', 7218 => 'ꢞ', 7219 => 'ꢟ', 7220 => 'ꢠ', 7221 => 'ꢡ', 7222 => 'ꢢ', 7223 => 'ꢣ', 7224 => 'ꢤ', 7225 => 'ꢥ', 7226 => 'ꢦ', 7227 => 'ꢧ', 7228 => 'ꢨ', 7229 => 'ꢩ', 7230 => 'ꢪ', 7231 => 'ꢫ', 7232 => 'ꢬ', 7233 => 'ꢭ', 7234 => 'ꢮ', 7235 => 'ꢯ', 7236 => 'ꢰ', 7237 => 'ꢱ', 7238 => 'ꢲ', 7239 => 'ꢳ', 7240 => '𑂃', 7241 => '𑂄', 7242 => '𑂅', 7243 => '𑂆', 7244 => '𑂇', 7245 => '𑂈', 7246 => '𑂉', 7247 => '𑂊', 7248 => '𑂋', 7249 => '𑂌', 7250 => '𑂍', 7251 => '𑂎', 7252 => '𑂏', 7253 => '𑂐', 7254 => '𑂑', 7255 => '𑂒', 7256 => '𑂓', 7257 => '𑂔', 7258 => '𑂕', 7259 => '𑂖', 7260 => '𑂗', 7261 => '𑂘', 7262 => '𑂙', 7263 => '𑂛', 7264 => '𑂝', 7265 => '𑂞', 7266 => '𑂟', 7267 => '𑂠', 7268 => '𑂡', 7269 => '𑂢', 7270 => '𑂣', 7271 => '𑂤', 7272 => '𑂥', 7273 => '𑂦', 7274 => '𑂧', 7275 => '𑂨', 7276 => '𑂩', 7277 => '𑂪', 7278 => '𑂬', 7279 => '𑂭', 7280 => '𑂮', 7281 => '𑂯', 7282 => 'ᮃ', 7283 => 'ᮄ', 7284 => 'ᮅ', 7285 => 'ᮆ', 7286 => 'ᮇ', 7287 => 'ᮈ', 7288 => 'ᮉ', 7289 => 'ᮊ', 7290 => 'ᮮ', 7291 => 'ᮋ', 7292 => 'ᮌ', 7293 => 'ᮍ', 7294 => 'ᮎ', 7295 => 'ᮏ', 7296 => 'ᮐ', 7297 => 'ᮑ', 7298 => 'ᮒ', 7299 => 'ᮓ', 7300 => 'ᮔ', 7301 => 'ᮕ', 7302 => 'ᮖ', 7303 => 'ᮗ', 7304 => 'ᮘ', 7305 => 'ᮙ', 7306 => 'ᮚ', 7307 => 'ᮛ', 7308 => 'ᮜ', 7309 => 'ᮝ', 7310 => 'ᮞ', 7311 => 'ᮟ', 7312 => 'ᮯ', 7313 => 'ᮠ', 7314 => '𑀅', 7315 => '𑀆', 7316 => '𑀇', 7317 => '𑀈', 7318 => '𑀉', 7319 => '𑀊', 7320 => '𑀋', 7321 => '𑀌', 7322 => '𑀍', 7323 => '𑀎', 7324 => '𑀏', 7325 => '𑀐', 7326 => '𑀑', 7327 => '𑀒', 7328 => '𑀓', 7329 => '𑀔', 7330 => '𑀕', 7331 => '𑀖', 7332 => '𑀗', 7333 => '𑀘', 7334 => '𑀙', 7335 => '𑀚', 7336 => '𑀛', 7337 => '𑀜', 7338 => '𑀝', 7339 => '𑀞', 7340 => '𑀟', 7341 => '𑀠', 7342 => '𑀡', 7343 => '𑀢', 7344 => '𑀣', 7345 => '𑀤', 7346 => '𑀥', 7347 => '𑀦', 7348 => '𑀧', 7349 => '𑀨', 7350 => '𑀩', 7351 => '𑀪', 7352 => '𑀫', 7353 => '𑀬', 7354 => '𑀭', 7355 => '𑀮', 7356 => '𑀯', 7357 => '𑀰', 7358 => '𑀱', 7359 => '𑀲', 7360 => '𑀳', 7361 => '𑀃', 7362 => '𑀄', 7363 => '𑀴', 7364 => '𑀵', 7365 => '𑀶', 7366 => '𑀷', 7367 => '𐨀', 7368 => '𐨐', 7369 => '𐨑', 7370 => '𐨒', 7371 => '𐨓', 7372 => '𐨕', 7373 => '𐨖', 7374 => '𐨗', 7375 => '𐨙', 7376 => '𐨚', 7377 => '𐨛', 7378 => '𐨜', 7379 => '𐨝', 7380 => '𐨞', 7381 => '𐨟', 7382 => '𐨠', 7383 => '𐨡', 7384 => '𐨢', 7385 => '𐨣', 7386 => '𐨤', 7387 => '𐨥', 7388 => '𐨦', 7389 => '𐨧', 7390 => '𐨨', 7391 => '𐨩', 7392 => '𐨪', 7393 => '𐨫', 7394 => '𐨬', 7395 => '𐨭', 7396 => '𐨮', 7397 => '𐨯', 7398 => '𐨰', 7399 => '𐨱', 7400 => '𐨲', 7401 => '𐨳', 7402 => 'ก', 7403 => 'ข', 7404 => 'ฃ', 7405 => 'ค', 7406 => 'ฅ', 7407 => 'ฆ', 7408 => 'ง', 7409 => 'จ', 7410 => 'ฉ', 7411 => 'ช', 7412 => 'ซ', 7413 => 'ฌ', 7414 => 'ญ', 7415 => 'ฎ', 7416 => 'ฏ', 7417 => 'ฐ', 7418 => 'ฑ', 7419 => 'ฒ', 7420 => 'ณ', 7421 => 'ด', 7422 => 'ต', 7423 => 'ถ', 7424 => 'ท', 7425 => 'ธ', 7426 => 'น', 7427 => 'บ', 7428 => 'ป', 7429 => 'ผ', 7430 => 'ฝ', 7431 => 'พ', 7432 => 'ฟ', 7433 => 'ภ', 7434 => 'ม', 7435 => 'ย', 7436 => 'ร', 7437 => 'ฤ', 7438 => 'ล', 7439 => 'ฦ', 7440 => 'ว', 7441 => 'ศ', 7442 => 'ษ', 7443 => 'ส', 7444 => 'ห', 7445 => 'ฬ', 7446 => 'อ', 7447 => 'ฮ', 7448 => 'ฯ', 7449 => 'ะ', 7450 => 'า', 7451 => 'ำ', 7452 => 'เ', 7453 => 'แ', 7454 => 'โ', 7455 => 'ใ', 7456 => 'ไ', 7457 => 'ๅ', 7458 => 'ກ', 7459 => 'ຂ', 7460 => 'ຄ', 7461 => 'ງ', 7462 => 'ຈ', 7463 => 'ສ', 7464 => 'ຊ', 7465 => 'ຍ', 7466 => 'ດ', 7467 => 'ຕ', 7468 => 'ຖ', 7469 => 'ທ', 7470 => 'ນ', 7471 => 'ບ', 7472 => 'ປ', 7473 => 'ຜ', 7474 => 'ຝ', 7475 => 'ພ', 7476 => 'ຟ', 7477 => 'ມ', 7478 => 'ຢ', 7479 => 'ຣ', 7480 => 'ລ', 7481 => 'ວ', 7482 => 'ຫ', 7483 => 'ອ', 7484 => 'ຮ', 7485 => 'ຯ', 7486 => 'ະ', 7487 => 'າ', 7488 => 'ຳ', 7489 => 'ຽ', 7490 => 'ເ', 7491 => 'ແ', 7492 => 'ໂ', 7493 => 'ໃ', 7494 => 'ໄ', 7495 => 'ꪀ', 7496 => 'ꪁ', 7497 => 'ꪂ', 7498 => 'ꪃ', 7499 => 'ꪄ', 7500 => 'ꪅ', 7501 => 'ꪆ', 7502 => 'ꪇ', 7503 => 'ꪈ', 7504 => 'ꪉ', 7505 => 'ꪊ', 7506 => 'ꪋ', 7507 => 'ꪌ', 7508 => 'ꪍ', 7509 => 'ꪎ', 7510 => 'ꪏ', 7511 => 'ꪐ', 7512 => 'ꪑ', 7513 => 'ꪒ', 7514 => 'ꪓ', 7515 => 'ꪔ', 7516 => 'ꪕ', 7517 => 'ꪖ', 7518 => 'ꪗ', 7519 => 'ꪘ', 7520 => 'ꪙ', 7521 => 'ꪚ', 7522 => 'ꪛ', 7523 => 'ꪜ', 7524 => 'ꪝ', 7525 => 'ꪞ', 7526 => 'ꪟ', 7527 => 'ꪠ', 7528 => 'ꪡ', 7529 => 'ꪢ', 7530 => 'ꪣ', 7531 => 'ꪤ', 7532 => 'ꪥ', 7533 => 'ꪦ', 7534 => 'ꪧ', 7535 => 'ꪨ', 7536 => 'ꪩ', 7537 => 'ꪪ', 7538 => 'ꪫ', 7539 => 'ꪬ', 7540 => 'ꪭ', 7541 => 'ꪮ', 7542 => 'ꪯ', 7543 => 'ꪱ', 7544 => 'ꪵ', 7545 => 'ꪶ', 7546 => 'ꪹ', 7547 => 'ꪺ', 7548 => 'ꪻ', 7549 => 'ꪼ', 7550 => 'ꪽ', 7551 => 'ꫀ', 7552 => 'ꫂ', 7553 => 'ꫛ', 7554 => 'ꫜ', 7555 => 'ཀ', 7556 => 'ཫ', 7557 => 'ཁ', 7558 => 'ག', 7559 => 'ང', 7560 => 'ཅ', 7561 => 'ཆ', 7562 => 'ཇ', 7563 => 'ཉ', 7564 => 'ཊ', 7565 => 'ཋ', 7566 => 'ཌ', 7567 => 'ཎ', 7568 => 'ཏ', 7569 => 'ཐ', 7570 => 'ད', 7571 => 'ན', 7572 => 'པ', 7573 => 'ཕ', 7574 => 'བ', 7575 => 'མ', 7576 => 'ཙ', 7577 => 'ཚ', 7578 => 'ཛ', 7579 => 'ཝ', 7580 => 'ཞ', 7581 => 'ཟ', 7582 => 'འ', 7583 => 'ཡ', 7584 => 'ར', 7585 => 'ཬ', 7586 => 'ལ', 7587 => 'ཤ', 7588 => 'ཥ', 7589 => 'ས', 7590 => 'ཧ', 7591 => 'ཨ', 7592 => 'ྈ', 7593 => 'ྉ', 7594 => 'ྌ', 7595 => 'ྊ', 7596 => 'ྋ', 7597 => 'ᰀ', 7598 => 'ᰁ', 7599 => 'ᰂ', 7600 => 'ᰃ', 7601 => 'ᰄ', 7602 => 'ᰅ', 7603 => 'ᰆ', 7604 => 'ᰇ', 7605 => 'ᰈ', 7606 => 'ᰉ', 7607 => 'ᱍ', 7608 => 'ᱎ', 7609 => 'ᱏ', 7610 => 'ᰊ', 7611 => 'ᰋ', 7612 => 'ᰌ', 7613 => 'ᰍ', 7614 => 'ᰎ', 7615 => 'ᰏ', 7616 => 'ᰐ', 7617 => 'ᰑ', 7618 => 'ᰒ', 7619 => 'ᰓ', 7620 => 'ᰔ', 7621 => 'ᰕ', 7622 => 'ᰖ', 7623 => 'ᰗ', 7624 => 'ᰘ', 7625 => 'ᰙ', 7626 => 'ᰚ', 7627 => 'ᰛ', 7628 => 'ᰜ', 7629 => 'ᰝ', 7630 => 'ᰞ', 7631 => 'ᰟ', 7632 => 'ᰠ', 7633 => 'ᰡ', 7634 => 'ᰢ', 7635 => 'ᰣ', 7636 => 'ꡀ', 7637 => 'ꡁ', 7638 => 'ꡂ', 7639 => 'ꡃ', 7640 => 'ꡄ', 7641 => 'ꡅ', 7642 => 'ꡆ', 7643 => 'ꡇ', 7644 => 'ꡩ', 7645 => 'ꡪ', 7646 => 'ꡫ', 7647 => 'ꡬ', 7648 => 'ꡈ', 7649 => 'ꡉ', 7650 => 'ꡊ', 7651 => 'ꡋ', 7652 => 'ꡌ', 7653 => 'ꡍ', 7654 => 'ꡎ', 7655 => 'ꡏ', 7656 => 'ꡐ', 7657 => 'ꡑ', 7658 => 'ꡒ', 7659 => 'ꡓ', 7660 => 'ꡧ', 7661 => 'ꡔ', 7662 => 'ꡕ', 7663 => 'ꡖ', 7664 => 'ꡗ', 7665 => 'ꡨ', 7666 => 'ꡭ', 7667 => 'ꡘ', 7668 => 'ꡱ', 7669 => 'ꡲ', 7670 => 'ꡙ', 7671 => 'ꡚ', 7672 => 'ꡮ', 7673 => 'ꡛ', 7674 => 'ꡜ', 7675 => 'ꡯ', 7676 => 'ꡰ', 7677 => 'ꡝ', 7678 => 'ꡢ', 7679 => 'ꡣ', 7680 => 'ꡤ', 7681 => 'ꡥ', 7682 => 'ꡞ', 7683 => 'ꡟ', 7684 => 'ꡠ', 7685 => 'ꡡ', 7686 => 'ꡦ', 7687 => 'ꡳ', 7688 => 'ᤀ', 7689 => 'ᤁ', 7690 => 'ᤂ', 7691 => 'ᤃ', 7692 => 'ᤄ', 7693 => 'ᤅ', 7694 => 'ᤆ', 7695 => 'ᤇ', 7696 => 'ᤈ', 7697 => 'ᤉ', 7698 => 'ᤊ', 7699 => 'ᤋ', 7700 => 'ᤌ', 7701 => 'ᤍ', 7702 => 'ᤎ', 7703 => 'ᤏ', 7704 => 'ᤐ', 7705 => 'ᤑ', 7706 => 'ᤒ', 7707 => 'ᤓ', 7708 => 'ᤔ', 7709 => 'ᤕ', 7710 => 'ᤖ', 7711 => 'ᤗ', 7712 => 'ᤘ', 7713 => 'ᤙ', 7714 => 'ᤚ', 7715 => 'ᤛ', 7716 => 'ᤜ', 7717 => 'ᜀ', 7718 => 'ᜁ', 7719 => 'ᜂ', 7720 => 'ᜃ', 7721 => 'ᜄ', 7722 => 'ᜅ', 7723 => 'ᜆ', 7724 => 'ᜇ', 7725 => 'ᜈ', 7726 => 'ᜉ', 7727 => 'ᜊ', 7728 => 'ᜋ', 7729 => 'ᜌ', 7730 => 'ᜎ', 7731 => 'ᜏ', 7732 => 'ᜐ', 7733 => 'ᜑ', 7734 => 'ᜠ', 7735 => 'ᜡ', 7736 => 'ᜢ', 7737 => 'ᜣ', 7738 => 'ᜤ', 7739 => 'ᜥ', 7740 => 'ᜦ', 7741 => 'ᜧ', 7742 => 'ᜨ', 7743 => 'ᜩ', 7744 => 'ᜪ', 7745 => 'ᜫ', 7746 => 'ᜬ', 7747 => 'ᜭ', 7748 => 'ᜮ', 7749 => 'ᜯ', 7750 => 'ᜰ', 7751 => 'ᜱ', 7752 => 'ᝀ', 7753 => 'ᝁ', 7754 => 'ᝂ', 7755 => 'ᝃ', 7756 => 'ᝄ', 7757 => 'ᝅ', 7758 => 'ᝆ', 7759 => 'ᝇ', 7760 => 'ᝈ', 7761 => 'ᝉ', 7762 => 'ᝊ', 7763 => 'ᝋ', 7764 => 'ᝌ', 7765 => 'ᝍ', 7766 => 'ᝎ', 7767 => 'ᝏ', 7768 => 'ᝐ', 7769 => 'ᝑ', 7770 => 'ᝠ', 7771 => 'ᝡ', 7772 => 'ᝢ', 7773 => 'ᝣ', 7774 => 'ᝤ', 7775 => 'ᝥ', 7776 => 'ᝦ', 7777 => 'ᝧ', 7778 => 'ᝨ', 7779 => 'ᝩ', 7780 => 'ᝪ', 7781 => 'ᝫ', 7782 => 'ᝬ', 7783 => 'ᝮ', 7784 => 'ᝯ', 7785 => 'ᝰ', 7786 => 'ᨀ', 7787 => 'ᨁ', 7788 => 'ᨂ', 7789 => 'ᨃ', 7790 => 'ᨄ', 7791 => 'ᨅ', 7792 => 'ᨆ', 7793 => 'ᨇ', 7794 => 'ᨈ', 7795 => 'ᨉ', 7796 => 'ᨊ', 7797 => 'ᨋ', 7798 => 'ᨌ', 7799 => 'ᨍ', 7800 => 'ᨎ', 7801 => 'ᨏ', 7802 => 'ᨐ', 7803 => 'ᨑ', 7804 => 'ᨒ', 7805 => 'ᨓ', 7806 => 'ᨔ', 7807 => 'ᨕ', 7808 => 'ᨖ', 7809 => 'ᯀ', 7810 => 'ᯂ', 7811 => 'ᯅ', 7812 => 'ᯇ', 7813 => 'ᯉ', 7814 => 'ᯋ', 7815 => 'ᯎ', 7816 => 'ᯐ', 7817 => 'ᯑ', 7818 => 'ᯒ', 7819 => 'ᯔ', 7820 => 'ᯖ', 7821 => 'ᯘ', 7822 => 'ᯛ', 7823 => 'ᯝ', 7824 => 'ᯞ', 7825 => 'ᯠ', 7826 => 'ᯡ', 7827 => 'ᯢ', 7828 => 'ᯣ', 7829 => 'ᯤ', 7830 => 'ᯥ', 7831 => 'ꤰ', 7832 => 'ꤱ', 7833 => 'ꤲ', 7834 => 'ꤳ', 7835 => 'ꤴ', 7836 => 'ꤵ', 7837 => 'ꤶ', 7838 => 'ꤷ', 7839 => 'ꤸ', 7840 => 'ꤹ', 7841 => 'ꤺ', 7842 => 'ꤻ', 7843 => 'ꤼ', 7844 => 'ꤽ', 7845 => 'ꤾ', 7846 => 'ꤿ', 7847 => 'ꥀ', 7848 => 'ꥁ', 7849 => 'ꥂ', 7850 => 'ꥃ', 7851 => 'ꥄ', 7852 => 'ꥅ', 7853 => 'ꥆ', 7854 => 'ꤊ', 7855 => 'ꤋ', 7856 => 'ꤌ', 7857 => 'ꤍ', 7858 => 'ꤎ', 7859 => 'ꤏ', 7860 => 'ꤐ', 7861 => 'ꤑ', 7862 => 'ꤒ', 7863 => 'ꤓ', 7864 => 'ꤔ', 7865 => 'ꤕ', 7866 => 'ꤖ', 7867 => 'ꤗ', 7868 => 'ꤘ', 7869 => 'ꤙ', 7870 => 'ꤚ', 7871 => 'ꤛ', 7872 => 'ꤜ', 7873 => 'ꤝ', 7874 => 'ꤞ', 7875 => 'ꤟ', 7876 => 'ꤠ', 7877 => 'ꤡ', 7878 => 'ꤢ', 7879 => 'ꤣ', 7880 => 'ꤤ', 7881 => 'ꤥ', 7882 => 'က', 7883 => 'ၵ', 7884 => 'ခ', 7885 => 'ၶ', 7886 => 'ဂ', 7887 => 'ၷ', 7888 => 'ꩠ', 7889 => 'ဃ', 7890 => 'င', 7891 => 'ၚ', 7892 => 'စ', 7893 => 'ၸ', 7894 => 'ꩡ', 7895 => 'ဆ', 7896 => 'ꩢ', 7897 => 'ဇ', 7898 => 'ꩣ', 7899 => 'ၹ', 7900 => 'ꩲ', 7901 => 'ဈ', 7902 => 'ၛ', 7903 => 'ꩤ', 7904 => 'ၡ', 7905 => 'ဉ', 7906 => 'ၺ', 7907 => 'ꩥ', 7908 => 'ည', 7909 => 'ဋ', 7910 => 'ꩦ', 7911 => 'ဌ', 7912 => 'ꩧ', 7913 => 'ဍ', 7914 => 'ꩨ', 7915 => 'ဎ', 7916 => 'ꩩ', 7917 => 'ဏ', 7918 => 'ၮ', 7919 => 'တ', 7920 => 'ထ', 7921 => 'ဒ', 7922 => 'ၻ', 7923 => 'ဓ', 7924 => 'ꩪ', 7925 => 'န', 7926 => 'ၼ', 7927 => 'ꩫ', 7928 => 'ပ', 7929 => 'ဖ', 7930 => 'ၽ', 7931 => 'ၾ', 7932 => 'ꩯ', 7933 => 'ႎ', 7934 => 'ဗ', 7935 => 'ၿ', 7936 => 'ဘ', 7937 => 'မ', 7938 => 'ယ', 7939 => 'ရ', 7940 => 'ꩳ', 7941 => 'ꩺ', 7942 => 'လ', 7943 => 'ဝ', 7944 => 'ႀ', 7945 => 'ၐ', 7946 => 'ၑ', 7947 => 'ၥ', 7948 => 'သ', 7949 => 'ꩬ', 7950 => 'ဟ', 7951 => 'ႁ', 7952 => 'ꩭ', 7953 => 'ꩮ', 7954 => 'ꩱ', 7955 => 'ဠ', 7956 => 'ၜ', 7957 => 'ၝ', 7958 => 'ၯ', 7959 => 'ၰ', 7960 => 'ၦ', 7961 => 'အ', 7962 => 'ဢ', 7963 => 'ဣ', 7964 => 'ဤ', 7965 => 'ဥ', 7966 => 'ဦ', 7967 => 'ၒ', 7968 => 'ၓ', 7969 => 'ၔ', 7970 => 'ၕ', 7971 => 'ဧ', 7972 => 'ဨ', 7973 => 'ဩ', 7974 => 'ဪ', 7975 => 'ꩴ', 7976 => 'ꩵ', 7977 => 'ꩶ', 7978 => 'ក', 7979 => 'ខ', 7980 => 'គ', 7981 => 'ឃ', 7982 => 'ង', 7983 => 'ច', 7984 => 'ឆ', 7985 => 'ជ', 7986 => 'ឈ', 7987 => 'ញ', 7988 => 'ដ', 7989 => 'ឋ', 7990 => 'ឌ', 7991 => 'ឍ', 7992 => 'ណ', 7993 => 'ត', 7994 => 'ថ', 7995 => 'ទ', 7996 => 'ធ', 7997 => 'ន', 7998 => 'ប', 7999 => 'ផ', 8000 => 'ព', 8001 => 'ភ', 8002 => 'ម', 8003 => 'យ', 8004 => 'រ', 8005 => 'ល', 8006 => 'វ', 8007 => 'ឝ', 8008 => 'ឞ', 8009 => 'ស', 8010 => 'ហ', 8011 => 'ឡ', 8012 => 'អ', 8013 => 'ៜ', 8014 => 'ឣ', 8015 => 'ឤ', 8016 => 'ឥ', 8017 => 'ឦ', 8018 => 'ឧ', 8019 => 'ឨ', 8020 => 'ឩ', 8021 => 'ឪ', 8022 => 'ឫ', 8023 => 'ឬ', 8024 => 'ឭ', 8025 => 'ឮ', 8026 => 'ឯ', 8027 => 'ឰ', 8028 => 'ឱ', 8029 => 'ឲ', 8030 => 'ឳ', 8031 => 'ᥐ', 8032 => 'ᥑ', 8033 => 'ᥒ', 8034 => 'ᥓ', 8035 => 'ᥔ', 8036 => 'ᥕ', 8037 => 'ᥖ', 8038 => 'ᥗ', 8039 => 'ᥘ', 8040 => 'ᥙ', 8041 => 'ᥚ', 8042 => 'ᥛ', 8043 => 'ᥜ', 8044 => 'ᥝ', 8045 => 'ᥞ', 8046 => 'ᥟ', 8047 => 'ᥠ', 8048 => 'ᥡ', 8049 => 'ᥢ', 8050 => 'ᥣ', 8051 => 'ᥤ', 8052 => 'ᥥ', 8053 => 'ᥦ', 8054 => 'ᥧ', 8055 => 'ᥨ', 8056 => 'ᥩ', 8057 => 'ᥪ', 8058 => 'ᥫ', 8059 => 'ᥬ', 8060 => 'ᥭ', 8061 => 'ᥰ', 8062 => 'ᥱ', 8063 => 'ᥲ', 8064 => 'ᥳ', 8065 => 'ᥴ', 8066 => 'ᦀ', 8067 => 'ᦁ', 8068 => 'ᦂ', 8069 => 'ᦃ', 8070 => 'ᦄ', 8071 => 'ᦅ', 8072 => 'ᦆ', 8073 => 'ᦇ', 8074 => 'ᦈ', 8075 => 'ᦉ', 8076 => 'ᦊ', 8077 => 'ᦋ', 8078 => 'ᦌ', 8079 => 'ᦍ', 8080 => 'ᦎ', 8081 => 'ᦏ', 8082 => 'ᦐ', 8083 => 'ᦑ', 8084 => 'ᦒ', 8085 => 'ᦓ', 8086 => 'ᦔ', 8087 => 'ᦕ', 8088 => 'ᦖ', 8089 => 'ᦗ', 8090 => 'ᦘ', 8091 => 'ᦙ', 8092 => 'ᦚ', 8093 => 'ᦛ', 8094 => 'ᦜ', 8095 => 'ᦝ', 8096 => 'ᦞ', 8097 => 'ᦟ', 8098 => 'ᦠ', 8099 => 'ᦡ', 8100 => 'ᦢ', 8101 => 'ᦣ', 8102 => 'ᦤ', 8103 => 'ᦥ', 8104 => 'ᦦ', 8105 => 'ᦧ', 8106 => 'ᦨ', 8107 => 'ᦩ', 8108 => 'ᦪ', 8109 => 'ᦫ', 8110 => 'ᧁ', 8111 => 'ᧂ', 8112 => 'ᧃ', 8113 => 'ᧄ', 8114 => 'ᧅ', 8115 => 'ᧆ', 8116 => 'ᧇ', 8117 => 'ᨠ', 8118 => 'ᨡ', 8119 => 'ᨢ', 8120 => 'ᨣ', 8121 => 'ᨤ', 8122 => 'ᨥ', 8123 => 'ᨦ', 8124 => 'ᨧ', 8125 => 'ᨨ', 8126 => 'ᨩ', 8127 => 'ᨪ', 8128 => 'ᨫ', 8129 => 'ᨬ', 8130 => 'ᨭ', 8131 => 'ᨮ', 8132 => 'ᨯ', 8133 => 'ᨰ', 8134 => 'ᨱ', 8135 => 'ᨲ', 8136 => 'ᨳ', 8137 => 'ᨴ', 8138 => 'ᨵ', 8139 => 'ᨶ', 8140 => 'ᨷ', 8141 => 'ᨸ', 8142 => 'ᨹ', 8143 => 'ᨺ', 8144 => 'ᨻ', 8145 => 'ᨼ', 8146 => 'ᨽ', 8147 => 'ᨾ', 8148 => 'ᨿ', 8149 => 'ᩀ', 8150 => 'ᩁ', 8151 => 'ᩂ', 8152 => 'ᩃ', 8153 => 'ᩄ', 8154 => 'ᩅ', 8155 => 'ᩆ', 8156 => 'ᩇ', 8157 => 'ᩈ', 8158 => 'ᩉ', 8159 => 'ᩊ', 8160 => 'ᩋ', 8161 => 'ᩌ', 8162 => 'ᩓ', 8163 => 'ᩍ', 8164 => 'ᩎ', 8165 => 'ᩏ', 8166 => 'ᩐ', 8167 => 'ᩑ', 8168 => 'ᩒ', 8169 => 'ꨀ', 8170 => 'ꨁ', 8171 => 'ꨂ', 8172 => 'ꨃ', 8173 => 'ꨄ', 8174 => 'ꨅ', 8175 => 'ꨆ', 8176 => 'ꨇ', 8177 => 'ꨈ', 8178 => 'ꨉ', 8179 => 'ꨊ', 8180 => 'ꨋ', 8181 => 'ꨌ', 8182 => 'ꨍ', 8183 => 'ꨎ', 8184 => 'ꨏ', 8185 => 'ꨐ', 8186 => 'ꨑ', 8187 => 'ꨒ', 8188 => 'ꨓ', 8189 => 'ꨔ', 8190 => 'ꨕ', 8191 => 'ꨖ', 8192 => 'ꨗ', 8193 => 'ꨘ', 8194 => 'ꨙ', 8195 => 'ꨚ', 8196 => 'ꨛ', 8197 => 'ꨜ', 8198 => 'ꨝ', 8199 => 'ꨞ', 8200 => 'ꨟ', 8201 => 'ꨠ', 8202 => 'ꨡ', 8203 => 'ꨢ', 8204 => 'ꨣ', 8205 => 'ꨤ', 8206 => 'ꨥ', 8207 => 'ꨦ', 8208 => 'ꨧ', 8209 => 'ꨨ', 8210 => 'ꩀ', 8211 => 'ꩁ', 8212 => 'ꩂ', 8213 => 'ꩄ', 8214 => 'ꩅ', 8215 => 'ꩆ', 8216 => 'ꩇ', 8217 => 'ꩈ', 8218 => 'ꩉ', 8219 => 'ꩊ', 8220 => 'ꩋ', 8221 => 'ᬅ', 8222 => 'ᬆ', 8223 => 'ᬇ', 8224 => 'ᬈ', 8225 => 'ᬉ', 8226 => 'ᬊ', 8227 => 'ᬋ', 8228 => 'ᬌ', 8229 => 'ᬍ', 8230 => 'ᬎ', 8231 => 'ᬏ', 8232 => 'ᬐ', 8233 => 'ᬑ', 8234 => 'ᬒ', 8235 => 'ᬓ', 8236 => 'ᭅ', 8237 => 'ᭆ', 8238 => 'ᬔ', 8239 => 'ᬕ', 8240 => 'ᬖ', 8241 => 'ᬗ', 8242 => 'ᬘ', 8243 => 'ᬙ', 8244 => 'ᬚ', 8245 => 'ᬛ', 8246 => 'ᬜ', 8247 => 'ᬝ', 8248 => 'ᬞ', 8249 => 'ᬟ', 8250 => 'ᬠ', 8251 => 'ᬡ', 8252 => 'ᬢ', 8253 => 'ᭇ', 8254 => 'ᬣ', 8255 => 'ᬤ', 8256 => 'ᬥ', 8257 => 'ᬦ', 8258 => 'ᬧ', 8259 => 'ᭈ', 8260 => 'ᬨ', 8261 => 'ᬩ', 8262 => 'ᬪ', 8263 => 'ᬫ', 8264 => 'ᬬ', 8265 => 'ᬭ', 8266 => 'ᬮ', 8267 => 'ᬯ', 8268 => 'ᭉ', 8269 => 'ᬰ', 8270 => 'ᬱ', 8271 => 'ᬲ', 8272 => 'ᭊ', 8273 => 'ᭋ', 8274 => 'ᬳ', 8275 => 'ꦄ', 8276 => 'ꦅ', 8277 => 'ꦆ', 8278 => 'ꦇ', 8279 => 'ꦈ', 8280 => 'ꦉ', 8281 => 'ꦊ', 8282 => 'ꦋ', 8283 => 'ꦌ', 8284 => 'ꦍ', 8285 => 'ꦎ', 8286 => 'ꦏ', 8287 => 'ꦐ', 8288 => 'ꦑ', 8289 => 'ꦒ', 8290 => 'ꦓ', 8291 => 'ꦔ', 8292 => 'ꦕ', 8293 => 'ꦖ', 8294 => 'ꦗ', 8295 => 'ꦘ', 8296 => 'ꦙ', 8297 => 'ꦚ', 8298 => 'ꦛ', 8299 => 'ꦜ', 8300 => 'ꦝ', 8301 => 'ꦞ', 8302 => 'ꦟ', 8303 => 'ꦠ', 8304 => 'ꦡ', 8305 => 'ꦢ', 8306 => 'ꦣ', 8307 => 'ꦤ', 8308 => 'ꦥ', 8309 => 'ꦦ', 8310 => 'ꦧ', 8311 => 'ꦨ', 8312 => 'ꦩ', 8313 => 'ꦪ', 8314 => 'ꦫ', 8315 => 'ꦭ', 8316 => 'ꦮ', 8317 => 'ꦯ', 8318 => 'ꦰ', 8319 => 'ꦱ', 8320 => 'ꦲ', 8321 => 'ᢀ', 8322 => 'ᢁ', 8323 => 'ᢂ', 8324 => 'ᢃ', 8325 => 'ᢄ', 8326 => 'ᢅ', 8327 => 'ᢆ', 8328 => 'ᡃ', 8329 => 'ᠠ', 8330 => 'ᢇ', 8331 => 'ᠡ', 8332 => 'ᡄ', 8333 => 'ᡝ', 8334 => 'ᠢ', 8335 => 'ᡅ', 8336 => 'ᡞ', 8337 => 'ᡳ', 8338 => 'ᢈ', 8339 => 'ᡟ', 8340 => 'ᠣ', 8341 => 'ᡆ', 8342 => 'ᠤ', 8343 => 'ᡇ', 8344 => 'ᡡ', 8345 => 'ᠥ', 8346 => 'ᡈ', 8347 => 'ᠦ', 8348 => 'ᡉ', 8349 => 'ᡠ', 8350 => 'ᠧ', 8351 => 'ᠨ', 8352 => 'ᠩ', 8353 => 'ᡊ', 8354 => 'ᡢ', 8355 => 'ᢊ', 8356 => 'ᢛ', 8357 => 'ᠪ', 8358 => 'ᡋ', 8359 => 'ᠫ', 8360 => 'ᡌ', 8361 => 'ᡦ', 8362 => 'ᠬ', 8363 => 'ᡍ', 8364 => 'ᠭ', 8365 => 'ᡎ', 8366 => 'ᡤ', 8367 => 'ᢚ', 8368 => 'ᡥ', 8369 => 'ᠮ', 8370 => 'ᡏ', 8371 => 'ᠯ', 8372 => 'ᠰ', 8373 => 'ᠱ', 8374 => 'ᡧ', 8375 => 'ᢜ', 8376 => 'ᢝ', 8377 => 'ᢢ', 8378 => 'ᢤ', 8379 => 'ᢥ', 8380 => 'ᠲ', 8381 => 'ᡐ', 8382 => 'ᡨ', 8383 => 'ᠳ', 8384 => 'ᡑ', 8385 => 'ᡩ', 8386 => 'ᠴ', 8387 => 'ᡒ', 8388 => 'ᡱ', 8389 => 'ᡜ', 8390 => 'ᢋ', 8391 => 'ᠵ', 8392 => 'ᡓ', 8393 => 'ᡪ', 8394 => 'ᡷ', 8395 => 'ᠶ', 8396 => 'ᡕ', 8397 => 'ᡲ', 8398 => 'ᠷ', 8399 => 'ᡵ', 8400 => 'ᠸ', 8401 => 'ᡖ', 8402 => 'ᠹ', 8403 => 'ᡫ', 8404 => 'ᡶ', 8405 => 'ᠺ', 8406 => 'ᡗ', 8407 => 'ᡣ', 8408 => 'ᡴ', 8409 => 'ᢉ', 8410 => 'ᠻ', 8411 => 'ᠼ', 8412 => 'ᡔ', 8413 => 'ᡮ', 8414 => 'ᠽ', 8415 => 'ᡯ', 8416 => 'ᡘ', 8417 => 'ᡬ', 8418 => 'ᠾ', 8419 => 'ᡙ', 8420 => 'ᡭ', 8421 => 'ᠿ', 8422 => 'ᡀ', 8423 => 'ᡁ', 8424 => 'ᡂ', 8425 => 'ᡚ', 8426 => 'ᡛ', 8427 => 'ᡰ', 8428 => 'ᢌ', 8429 => 'ᢞ', 8430 => 'ᢍ', 8431 => 'ᢎ', 8432 => 'ᢟ', 8433 => 'ᢏ', 8434 => 'ᢐ', 8435 => 'ᢘ', 8436 => 'ᢠ', 8437 => 'ᢑ', 8438 => 'ᢡ', 8439 => 'ᢒ', 8440 => 'ᢓ', 8441 => 'ᢨ', 8442 => 'ᢔ', 8443 => 'ᢣ', 8444 => 'ᢕ', 8445 => 'ᢙ', 8446 => 'ᢖ', 8447 => 'ᢗ', 8448 => 'ᢦ', 8449 => 'ᢧ', 8450 => 'ᢪ', 8451 => 'ᱚ', 8452 => 'ᱛ', 8453 => 'ᱜ', 8454 => 'ᱝ', 8455 => 'ᱞ', 8456 => 'ᱟ', 8457 => 'ᱠ', 8458 => 'ᱡ', 8459 => 'ᱢ', 8460 => 'ᱣ', 8461 => 'ᱤ', 8462 => 'ᱥ', 8463 => 'ᱦ', 8464 => 'ᱧ', 8465 => 'ᱨ', 8466 => 'ᱩ', 8467 => 'ᱪ', 8468 => 'ᱫ', 8469 => 'ᱬ', 8470 => 'ᱭ', 8471 => 'ᱮ', 8472 => 'ᱯ', 8473 => 'ᱰ', 8474 => 'ᱱ', 8475 => 'ᱲ', 8476 => 'ᱳ', 8477 => 'ᱴ', 8478 => 'ᱵ', 8479 => 'ᱶ', 8480 => 'ᱷ', 8481 => 'ᱸ', 8482 => 'ᱹ', 8483 => 'ᱺ', 8484 => 'ᱻ', 8485 => 'ᱼ', 8486 => 'ᱽ', 8487 => 'Ꭰ', 8488 => 'Ꭱ', 8489 => 'Ꭲ', 8490 => 'Ꭳ', 8491 => 'Ꭴ', 8492 => 'Ꭵ', 8493 => 'Ꭶ', 8494 => 'Ꭷ', 8495 => 'Ꭸ', 8496 => 'Ꭹ', 8497 => 'Ꭺ', 8498 => 'Ꭻ', 8499 => 'Ꭼ', 8500 => 'Ꭽ', 8501 => 'Ꭾ', 8502 => 'Ꭿ', 8503 => 'Ꮀ', 8504 => 'Ꮁ', 8505 => 'Ꮂ', 8506 => 'Ꮃ', 8507 => 'Ꮄ', 8508 => 'Ꮅ', 8509 => 'Ꮆ', 8510 => 'Ꮇ', 8511 => 'Ꮈ', 8512 => 'Ꮉ', 8513 => 'Ꮊ', 8514 => 'Ꮋ', 8515 => 'Ꮌ', 8516 => 'Ꮍ', 8517 => 'Ꮎ', 8518 => 'Ꮏ', 8519 => 'Ꮐ', 8520 => 'Ꮑ', 8521 => 'Ꮒ', 8522 => 'Ꮓ', 8523 => 'Ꮔ', 8524 => 'Ꮕ', 8525 => 'Ꮖ', 8526 => 'Ꮗ', 8527 => 'Ꮘ', 8528 => 'Ꮙ', 8529 => 'Ꮚ', 8530 => 'Ꮛ', 8531 => 'Ꮜ', 8532 => 'Ꮝ', 8533 => 'Ꮞ', 8534 => 'Ꮟ', 8535 => 'Ꮠ', 8536 => 'Ꮡ', 8537 => 'Ꮢ', 8538 => 'Ꮣ', 8539 => 'Ꮤ', 8540 => 'Ꮥ', 8541 => 'Ꮦ', 8542 => 'Ꮧ', 8543 => 'Ꮨ', 8544 => 'Ꮩ', 8545 => 'Ꮪ', 8546 => 'Ꮫ', 8547 => 'Ꮬ', 8548 => 'Ꮭ', 8549 => 'Ꮮ', 8550 => 'Ꮯ', 8551 => 'Ꮰ', 8552 => 'Ꮱ', 8553 => 'Ꮲ', 8554 => 'Ꮳ', 8555 => 'Ꮴ', 8556 => 'Ꮵ', 8557 => 'Ꮶ', 8558 => 'Ꮷ', 8559 => 'Ꮸ', 8560 => 'Ꮹ', 8561 => 'Ꮺ', 8562 => 'Ꮻ', 8563 => 'Ꮼ', 8564 => 'Ꮽ', 8565 => 'Ꮾ', 8566 => 'Ꮿ', 8567 => 'Ᏸ', 8568 => 'Ᏹ', 8569 => 'Ᏺ', 8570 => 'Ᏻ', 8571 => 'Ᏼ', 8572 => 'ᐁ', 8573 => 'ᐂ', 8574 => 'ᐃ', 8575 => 'ᐄ', 8576 => 'ᐅ', 8577 => 'ᐆ', 8578 => 'ᐇ', 8579 => 'ᐈ', 8580 => 'ᐉ', 8581 => 'ᐊ', 8582 => 'ᐋ', 8583 => 'ᐌ', 8584 => 'ᐍ', 8585 => 'ᐎ', 8586 => 'ᐏ', 8587 => 'ᐐ', 8588 => 'ᐑ', 8589 => 'ᐒ', 8590 => 'ᐓ', 8591 => 'ᐔ', 8592 => 'ᐕ', 8593 => 'ᐖ', 8594 => 'ᐗ', 8595 => 'ᐘ', 8596 => 'ᐙ', 8597 => 'ᐚ', 8598 => 'ᐛ', 8599 => 'ᐜ', 8600 => 'ᐝ', 8601 => 'ᐞ', 8602 => 'ᐟ', 8603 => 'ᐠ', 8604 => 'ᐡ', 8605 => 'ᐢ', 8606 => 'ᐣ', 8607 => 'ᐤ', 8608 => 'ᐥ', 8609 => 'ᐦ', 8610 => 'ᐧ', 8611 => 'ᐨ', 8612 => 'ᐩ', 8613 => 'ᐪ', 8614 => 'ᐫ', 8615 => 'ᐬ', 8616 => 'ᐭ', 8617 => 'ᐮ', 8618 => 'ᐯ', 8619 => 'ᐰ', 8620 => 'ᐱ', 8621 => 'ᐲ', 8622 => 'ᐳ', 8623 => 'ᐴ', 8624 => 'ᐵ', 8625 => 'ᐶ', 8626 => 'ᐷ', 8627 => 'ᐸ', 8628 => 'ᐹ', 8629 => 'ᐺ', 8630 => 'ᐻ', 8631 => 'ᐼ', 8632 => 'ᐽ', 8633 => 'ᐾ', 8634 => 'ᐿ', 8635 => 'ᑀ', 8636 => 'ᑁ', 8637 => 'ᑂ', 8638 => 'ᑃ', 8639 => 'ᑄ', 8640 => 'ᑅ', 8641 => 'ᑆ', 8642 => 'ᑇ', 8643 => 'ᑈ', 8644 => 'ᑉ', 8645 => 'ᑊ', 8646 => 'ᑋ', 8647 => 'ᑌ', 8648 => 'ᑍ', 8649 => 'ᑎ', 8650 => 'ᑏ', 8651 => 'ᑐ', 8652 => 'ᑑ', 8653 => 'ᑒ', 8654 => 'ᑓ', 8655 => 'ᑔ', 8656 => 'ᑕ', 8657 => 'ᑖ', 8658 => 'ᑗ', 8659 => 'ᑘ', 8660 => 'ᑙ', 8661 => 'ᑚ', 8662 => 'ᑛ', 8663 => 'ᑜ', 8664 => 'ᑝ', 8665 => 'ᑞ', 8666 => 'ᑟ', 8667 => 'ᑠ', 8668 => 'ᑡ', 8669 => 'ᑢ', 8670 => 'ᑣ', 8671 => 'ᑤ', 8672 => 'ᑥ', 8673 => 'ᑦ', 8674 => 'ᑧ', 8675 => 'ᑨ', 8676 => 'ᑩ', 8677 => 'ᑪ', 8678 => 'ᑫ', 8679 => 'ᑬ', 8680 => 'ᑭ', 8681 => 'ᑮ', 8682 => 'ᑯ', 8683 => 'ᑰ', 8684 => 'ᑱ', 8685 => 'ᑲ', 8686 => 'ᑳ', 8687 => 'ᑴ', 8688 => 'ᑵ', 8689 => 'ᑶ', 8690 => 'ᑷ', 8691 => 'ᑸ', 8692 => 'ᑹ', 8693 => 'ᑺ', 8694 => 'ᑻ', 8695 => 'ᑼ', 8696 => 'ᑽ', 8697 => 'ᑾ', 8698 => 'ᑿ', 8699 => 'ᒀ', 8700 => 'ᒁ', 8701 => 'ᒂ', 8702 => 'ᒃ', 8703 => 'ᒄ', 8704 => 'ᒅ', 8705 => 'ᒆ', 8706 => 'ᒇ', 8707 => 'ᒈ', 8708 => 'ᒉ', 8709 => 'ᒊ', 8710 => 'ᒋ', 8711 => 'ᒌ', 8712 => 'ᒍ', 8713 => 'ᒎ', 8714 => 'ᒏ', 8715 => 'ᒐ', 8716 => 'ᒑ', 8717 => 'ᒒ', 8718 => 'ᒓ', 8719 => 'ᒔ', 8720 => 'ᒕ', 8721 => 'ᒖ', 8722 => 'ᒗ', 8723 => 'ᒘ', 8724 => 'ᒙ', 8725 => 'ᒚ', 8726 => 'ᒛ', 8727 => 'ᒜ', 8728 => 'ᒝ', 8729 => 'ᒞ', 8730 => 'ᒟ', 8731 => 'ᒠ', 8732 => 'ᒡ', 8733 => 'ᒢ', 8734 => 'ᒣ', 8735 => 'ᒤ', 8736 => 'ᒥ', 8737 => 'ᒦ', 8738 => 'ᒧ', 8739 => 'ᒨ', 8740 => 'ᒩ', 8741 => 'ᒪ', 8742 => 'ᒫ', 8743 => 'ᒬ', 8744 => 'ᒭ', 8745 => 'ᒮ', 8746 => 'ᒯ', 8747 => 'ᒰ', 8748 => 'ᒱ', 8749 => 'ᒲ', 8750 => 'ᒳ', 8751 => 'ᒴ', 8752 => 'ᒵ', 8753 => 'ᒶ', 8754 => 'ᒷ', 8755 => 'ᒸ', 8756 => 'ᒹ', 8757 => 'ᒺ', 8758 => 'ᒻ', 8759 => 'ᒼ', 8760 => 'ᒽ', 8761 => 'ᒾ', 8762 => 'ᒿ', 8763 => 'ᓀ', 8764 => 'ᓁ', 8765 => 'ᓂ', 8766 => 'ᓃ', 8767 => 'ᓄ', 8768 => 'ᓅ', 8769 => 'ᓆ', 8770 => 'ᓇ', 8771 => 'ᓈ', 8772 => 'ᓉ', 8773 => 'ᓊ', 8774 => 'ᓋ', 8775 => 'ᓌ', 8776 => 'ᓍ', 8777 => 'ᓎ', 8778 => 'ᓏ', 8779 => 'ᓐ', 8780 => 'ᓑ', 8781 => 'ᓒ', 8782 => 'ᓓ', 8783 => 'ᓔ', 8784 => 'ᓕ', 8785 => 'ᓖ', 8786 => 'ᓗ', 8787 => 'ᓘ', 8788 => 'ᓙ', 8789 => 'ᓚ', 8790 => 'ᓛ', 8791 => 'ᓜ', 8792 => 'ᓝ', 8793 => 'ᓞ', 8794 => 'ᓟ', 8795 => 'ᓠ', 8796 => 'ᓡ', 8797 => 'ᓢ', 8798 => 'ᓣ', 8799 => 'ᓤ', 8800 => 'ᓥ', 8801 => 'ᓦ', 8802 => 'ᓧ', 8803 => 'ᓨ', 8804 => 'ᓩ', 8805 => 'ᓪ', 8806 => 'ᓫ', 8807 => 'ᓬ', 8808 => 'ᓭ', 8809 => 'ᓮ', 8810 => 'ᓯ', 8811 => 'ᓰ', 8812 => 'ᓱ', 8813 => 'ᓲ', 8814 => 'ᓳ', 8815 => 'ᓴ', 8816 => 'ᓵ', 8817 => 'ᓶ', 8818 => 'ᓷ', 8819 => 'ᓸ', 8820 => 'ᓹ', 8821 => 'ᓺ', 8822 => 'ᓻ', 8823 => 'ᓼ', 8824 => 'ᓽ', 8825 => 'ᓾ', 8826 => 'ᓿ', 8827 => 'ᔀ', 8828 => 'ᔁ', 8829 => 'ᔂ', 8830 => 'ᔃ', 8831 => 'ᔄ', 8832 => 'ᔅ', 8833 => 'ᔆ', 8834 => 'ᔇ', 8835 => 'ᔈ', 8836 => 'ᔉ', 8837 => 'ᔊ', 8838 => 'ᔋ', 8839 => 'ᔌ', 8840 => 'ᔍ', 8841 => 'ᔎ', 8842 => 'ᔏ', 8843 => 'ᔐ', 8844 => 'ᔑ', 8845 => 'ᔒ', 8846 => 'ᔓ', 8847 => 'ᔔ', 8848 => 'ᔕ', 8849 => 'ᔖ', 8850 => 'ᔗ', 8851 => 'ᔘ', 8852 => 'ᔙ', 8853 => 'ᔚ', 8854 => 'ᔛ', 8855 => 'ᔜ', 8856 => 'ᔝ', 8857 => 'ᔞ', 8858 => 'ᔟ', 8859 => 'ᔠ', 8860 => 'ᔡ', 8861 => 'ᔢ', 8862 => 'ᔣ', 8863 => 'ᔤ', 8864 => 'ᔥ', 8865 => 'ᔦ', 8866 => 'ᔧ', 8867 => 'ᔨ', 8868 => 'ᔩ', 8869 => 'ᔪ', 8870 => 'ᔫ', 8871 => 'ᔬ', 8872 => 'ᔭ', 8873 => 'ᔮ', 8874 => 'ᔯ', 8875 => 'ᔰ', 8876 => 'ᔱ', 8877 => 'ᔲ', 8878 => 'ᔳ', 8879 => 'ᔴ', 8880 => 'ᔵ', 8881 => 'ᔶ', 8882 => 'ᔷ', 8883 => 'ᔸ', 8884 => 'ᔹ', 8885 => 'ᔺ', 8886 => 'ᔻ', 8887 => 'ᔼ', 8888 => 'ᔽ', 8889 => 'ᔾ', 8890 => 'ᔿ', 8891 => 'ᕀ', 8892 => 'ᕁ', 8893 => 'ᕂ', 8894 => 'ᕃ', 8895 => 'ᕄ', 8896 => 'ᕅ', 8897 => 'ᕆ', 8898 => 'ᕇ', 8899 => 'ᕈ', 8900 => 'ᕉ', 8901 => 'ᕊ', 8902 => 'ᕋ', 8903 => 'ᕌ', 8904 => 'ᕍ', 8905 => 'ᕎ', 8906 => 'ᕏ', 8907 => 'ᕐ', 8908 => 'ᕑ', 8909 => 'ᕒ', 8910 => 'ᕓ', 8911 => 'ᕔ', 8912 => 'ᕕ', 8913 => 'ᕖ', 8914 => 'ᕗ', 8915 => 'ᕘ', 8916 => 'ᕙ', 8917 => 'ᕚ', 8918 => 'ᕛ', 8919 => 'ᕜ', 8920 => 'ᕝ', 8921 => 'ᕞ', 8922 => 'ᕟ', 8923 => 'ᕠ', 8924 => 'ᕡ', 8925 => 'ᕢ', 8926 => 'ᕣ', 8927 => 'ᕤ', 8928 => 'ᕥ', 8929 => 'ᕦ', 8930 => 'ᕧ', 8931 => 'ᕨ', 8932 => 'ᕩ', 8933 => 'ᕪ', 8934 => 'ᕫ', 8935 => 'ᕬ', 8936 => 'ᕭ', 8937 => 'ᕮ', 8938 => 'ᕯ', 8939 => 'ᕰ', 8940 => 'ᕱ', 8941 => 'ᕲ', 8942 => 'ᕳ', 8943 => 'ᕴ', 8944 => 'ᕵ', 8945 => 'ᕶ', 8946 => 'ᕷ', 8947 => 'ᕸ', 8948 => 'ᕹ', 8949 => 'ᕺ', 8950 => 'ᕻ', 8951 => 'ᕽ', 8952 => 'ᙯ', 8953 => 'ᕾ', 8954 => 'ᕿ', 8955 => 'ᖀ', 8956 => 'ᖁ', 8957 => 'ᖂ', 8958 => 'ᖃ', 8959 => 'ᖄ', 8960 => 'ᖅ', 8961 => 'ᖆ', 8962 => 'ᖇ', 8963 => 'ᖈ', 8964 => 'ᖉ', 8965 => 'ᖊ', 8966 => 'ᖋ', 8967 => 'ᖌ', 8968 => 'ᖍ', 8969 => 'ᙰ', 8970 => 'ᖎ', 8971 => 'ᖏ', 8972 => 'ᖐ', 8973 => 'ᖑ', 8974 => 'ᖒ', 8975 => 'ᖓ', 8976 => 'ᖔ', 8977 => 'ᖕ', 8978 => 'ᙱ', 8979 => 'ᙲ', 8980 => 'ᙳ', 8981 => 'ᙴ', 8982 => 'ᙵ', 8983 => 'ᙶ', 8984 => 'ᖖ', 8985 => 'ᖗ', 8986 => 'ᖘ', 8987 => 'ᖙ', 8988 => 'ᖚ', 8989 => 'ᖛ', 8990 => 'ᖜ', 8991 => 'ᖝ', 8992 => 'ᖞ', 8993 => 'ᖟ', 8994 => 'ᖠ', 8995 => 'ᖡ', 8996 => 'ᖢ', 8997 => 'ᖣ', 8998 => 'ᖤ', 8999 => 'ᖥ', 9000 => 'ᖦ', 9001 => 'ᕼ', 9002 => 'ᖧ', 9003 => 'ᖨ', 9004 => 'ᖩ', 9005 => 'ᖪ', 9006 => 'ᖫ', 9007 => 'ᖬ', 9008 => 'ᖭ', 9009 => 'ᖮ', 9010 => 'ᖯ', 9011 => 'ᖰ', 9012 => 'ᖱ', 9013 => 'ᖲ', 9014 => 'ᖳ', 9015 => 'ᖴ', 9016 => 'ᖵ', 9017 => 'ᖶ', 9018 => 'ᖷ', 9019 => 'ᖸ', 9020 => 'ᖹ', 9021 => 'ᖺ', 9022 => 'ᖻ', 9023 => 'ᖼ', 9024 => 'ᖽ', 9025 => 'ᖾ', 9026 => 'ᖿ', 9027 => 'ᗀ', 9028 => 'ᗁ', 9029 => 'ᗂ', 9030 => 'ᗃ', 9031 => 'ᗄ', 9032 => 'ᗅ', 9033 => 'ᗆ', 9034 => 'ᗇ', 9035 => 'ᗈ', 9036 => 'ᗉ', 9037 => 'ᗊ', 9038 => 'ᗋ', 9039 => 'ᗌ', 9040 => 'ᗍ', 9041 => 'ᗎ', 9042 => 'ᗏ', 9043 => 'ᗐ', 9044 => 'ᗑ', 9045 => 'ᗒ', 9046 => 'ᗓ', 9047 => 'ᗔ', 9048 => 'ᗕ', 9049 => 'ᗖ', 9050 => 'ᗗ', 9051 => 'ᗘ', 9052 => 'ᗙ', 9053 => 'ᗚ', 9054 => 'ᗛ', 9055 => 'ᗜ', 9056 => 'ᗝ', 9057 => 'ᗞ', 9058 => 'ᗟ', 9059 => 'ᗠ', 9060 => 'ᗡ', 9061 => 'ᗢ', 9062 => 'ᗣ', 9063 => 'ᗤ', 9064 => 'ᗥ', 9065 => 'ᗦ', 9066 => 'ᗧ', 9067 => 'ᗨ', 9068 => 'ᗩ', 9069 => 'ᗪ', 9070 => 'ᗫ', 9071 => 'ᗬ', 9072 => 'ᗭ', 9073 => 'ᗮ', 9074 => 'ᗯ', 9075 => 'ᗰ', 9076 => 'ᗱ', 9077 => 'ᗲ', 9078 => 'ᗳ', 9079 => 'ᗴ', 9080 => 'ᗵ', 9081 => 'ᗶ', 9082 => 'ᗷ', 9083 => 'ᗸ', 9084 => 'ᗹ', 9085 => 'ᗺ', 9086 => 'ᗻ'