Merge "Break up $wgDummyLanguageCodes"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Wed, 8 Mar 2017 20:46:46 +0000 (20:46 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Wed, 8 Mar 2017 20:46:47 +0000 (20:46 +0000)
1  2 
autoload.php
includes/DefaultSettings.php
includes/Setup.php

diff --combined autoload.php
@@@ -11,7 -11,6 +11,7 @@@ $wgAutoloadLocalClasses = 
        'ActiveUsersPager' => __DIR__ . '/includes/specials/pagers/ActiveUsersPager.php',
        'ActivityUpdateJob' => __DIR__ . '/includes/jobqueue/jobs/ActivityUpdateJob.php',
        'AddRFCAndPMIDInterwiki' => __DIR__ . '/maintenance/addRFCandPMIDInterwiki.php',
 +      'AddSite' => __DIR__ . '/maintenance/addSite.php',
        'AjaxDispatcher' => __DIR__ . '/includes/AjaxDispatcher.php',
        'AjaxResponse' => __DIR__ . '/includes/AjaxResponse.php',
        'AllMessagesTablePager' => __DIR__ . '/includes/specials/pagers/AllMessagesTablePager.php',
        'CheckStorage' => __DIR__ . '/maintenance/storage/checkStorage.php',
        'CheckSyntax' => __DIR__ . '/maintenance/checkSyntax.php',
        'CheckUsernames' => __DIR__ . '/maintenance/checkUsernames.php',
 -      'ChronologyProtector' => __DIR__ . '/includes/libs/rdbms/ChronologyProtector.php',
        'ClassCollector' => __DIR__ . '/includes/utils/AutoloadGenerator.php',
        'CleanupAncientTables' => __DIR__ . '/maintenance/cleanupAncientTables.php',
        'CleanupBlocks' => __DIR__ . '/maintenance/cleanupBlocks.php',
        'ClearInterwikiCache' => __DIR__ . '/maintenance/clearInterwikiCache.php',
        'CliInstaller' => __DIR__ . '/includes/installer/CliInstaller.php',
        'CloneDatabase' => __DIR__ . '/includes/db/CloneDatabase.php',
 +      'CodeCleanerGlobalsPass' => __DIR__ . '/maintenance/CodeCleanerGlobalsPass.inc',
        'CodeContentHandler' => __DIR__ . '/includes/content/CodeContentHandler.php',
        'Collation' => __DIR__ . '/includes/collation/Collation.php',
        'CollationCkb' => __DIR__ . '/includes/collation/CollationCkb.php',
        'ConvertLinks' => __DIR__ . '/maintenance/convertLinks.php',
        'ConvertUserOptions' => __DIR__ . '/maintenance/convertUserOptions.php',
        'ConverterRule' => __DIR__ . '/languages/ConverterRule.php',
 -      'ConvertibleTimestamp' => __DIR__ . '/includes/libs/time/ConvertibleTimestamp.php',
        'Cookie' => __DIR__ . '/includes/libs/Cookie.php',
        'CookieJar' => __DIR__ . '/includes/libs/CookieJar.php',
        'CopyFileBackend' => __DIR__ . '/maintenance/copyFileBackend.php',
        'DBExpectedError' => __DIR__ . '/includes/libs/rdbms/exception/DBExpectedError.php',
        'DBFileJournal' => __DIR__ . '/includes/filebackend/filejournal/DBFileJournal.php',
        'DBLockManager' => __DIR__ . '/includes/libs/lockmanager/DBLockManager.php',
 -      'DBMasterPos' => __DIR__ . '/includes/libs/rdbms/database/position/DBMasterPos.php',
        'DBQueryError' => __DIR__ . '/includes/libs/rdbms/exception/DBQueryError.php',
        'DBReadOnlyError' => __DIR__ . '/includes/libs/rdbms/exception/DBReadOnlyError.php',
        'DBReplicationWaitError' => __DIR__ . '/includes/libs/rdbms/exception/DBReplicationWaitError.php',
        'DataUpdate' => __DIR__ . '/includes/deferred/DataUpdate.php',
        'Database' => __DIR__ . '/includes/libs/rdbms/database/Database.php',
        'DatabaseBase' => __DIR__ . '/includes/libs/rdbms/database/Database.php',
 -      'DatabaseDomain' => __DIR__ . '/includes/libs/rdbms/database/DatabaseDomain.php',
        'DatabaseInstaller' => __DIR__ . '/includes/installer/DatabaseInstaller.php',
        'DatabaseLag' => __DIR__ . '/maintenance/lag.php',
        'DatabaseLogEntry' => __DIR__ . '/includes/logging/LogEntry.php',
 -      'DatabaseMssql' => __DIR__ . '/includes/db/DatabaseMssql.php',
 +      'DatabaseMssql' => __DIR__ . '/includes/libs/rdbms/database/DatabaseMssql.php',
        'DatabaseMysql' => __DIR__ . '/includes/libs/rdbms/database/DatabaseMysql.php',
        'DatabaseMysqlBase' => __DIR__ . '/includes/libs/rdbms/database/DatabaseMysqlBase.php',
        'DatabaseMysqli' => __DIR__ . '/includes/libs/rdbms/database/DatabaseMysqli.php',
        'FindHooks' => __DIR__ . '/maintenance/findHooks.php',
        'FindMissingFiles' => __DIR__ . '/maintenance/findMissingFiles.php',
        'FindOrphanedFiles' => __DIR__ . '/maintenance/findOrphanedFiles.php',
 -      'FixBug20757' => __DIR__ . '/maintenance/storage/fixBug20757.php',
        'FixDefaultJsonContentPages' => __DIR__ . '/maintenance/fixDefaultJsonContentPages.php',
        'FixDoubleRedirects' => __DIR__ . '/maintenance/fixDoubleRedirects.php',
        'FixExtLinksProtocolRelative' => __DIR__ . '/maintenance/fixExtLinksProtocolRelative.php',
 +      'FixT22757' => __DIR__ . '/maintenance/storage/fixT22757.php',
        'FixTimestamps' => __DIR__ . '/maintenance/fixTimestamps.php',
        'FixUserRegistration' => __DIR__ . '/maintenance/fixUserRegistration.php',
        'ForeignAPIFile' => __DIR__ . '/includes/filerepo/file/ForeignAPIFile.php',
        'FormSpecialPage' => __DIR__ . '/includes/specialpage/FormSpecialPage.php',
        'FormatJson' => __DIR__ . '/includes/json/FormatJson.php',
        'FormatMetadata' => __DIR__ . '/includes/media/FormatMetadata.php',
 +      'FormattedRCFeed' => __DIR__ . '/includes/rcfeed/FormattedRCFeed.php',
        'FormlessAction' => __DIR__ . '/includes/actions/FormlessAction.php',
        'GIFHandler' => __DIR__ . '/includes/media/GIF.php',
        'GIFMetadataExtractor' => __DIR__ . '/includes/media/GIFMetadataExtractor.php',
        'HTMLTextFieldWithButton' => __DIR__ . '/includes/htmlform/fields/HTMLTextFieldWithButton.php',
        'HTMLTitleTextField' => __DIR__ . '/includes/htmlform/fields/HTMLTitleTextField.php',
        'HTMLUserTextField' => __DIR__ . '/includes/htmlform/fields/HTMLUserTextField.php',
 +      'HTMLUsersMultiselectField' => __DIR__ . '/includes/htmlform/fields/HTMLUsersMultiselectField.php',
        'HTTPFileStreamer' => __DIR__ . '/includes/libs/filebackend/HTTPFileStreamer.php',
        'HWLDFWordAccumulator' => __DIR__ . '/includes/diff/DairikiDiff.php',
        'HashBagOStuff' => __DIR__ . '/includes/libs/objectcache/HashBagOStuff.php',
        'IEUrlExtension' => __DIR__ . '/includes/libs/IEUrlExtension.php',
        'IExpiringStore' => __DIR__ . '/includes/libs/objectcache/IExpiringStore.php',
        'IJobSpecification' => __DIR__ . '/includes/jobqueue/JobSpecification.php',
 -      'ILBFactory' => __DIR__ . '/includes/libs/rdbms/lbfactory/ILBFactory.php',
 -      'ILoadBalancer' => __DIR__ . '/includes/libs/rdbms/loadbalancer/ILoadBalancer.php',
 -      'ILoadMonitor' => __DIR__ . '/includes/libs/rdbms/loadmonitor/ILoadMonitor.php',
        'ILocalizedException' => __DIR__ . '/includes/exception/LocalizedException.php',
        'IMaintainableDatabase' => __DIR__ . '/includes/libs/rdbms/database/IMaintainableDatabase.php',
        'IP' => __DIR__ . '/includes/libs/IP.php',
        'InfoAction' => __DIR__ . '/includes/actions/InfoAction.php',
        'InitEditCount' => __DIR__ . '/maintenance/initEditCount.php',
        'InitSiteStats' => __DIR__ . '/maintenance/initSiteStats.php',
 +      'InitUserPreference' => __DIR__ . '/maintenance/initUserPreference.php',
        'InstallDocFormatter' => __DIR__ . '/includes/installer/InstallDocFormatter.php',
        'Installer' => __DIR__ . '/includes/installer/Installer.php',
        'InstallerOverrides' => __DIR__ . '/includes/installer/InstallerOverrides.php',
        'JsonContentHandler' => __DIR__ . '/includes/content/JsonContentHandler.php',
        'KkConverter' => __DIR__ . '/languages/classes/LanguageKk.php',
        'KuConverter' => __DIR__ . '/languages/classes/LanguageKu.php',
 -      'LBFactory' => __DIR__ . '/includes/libs/rdbms/lbfactory/LBFactory.php',
 -      'LBFactoryMulti' => __DIR__ . '/includes/libs/rdbms/lbfactory/LBFactoryMulti.php',
 -      'LBFactorySimple' => __DIR__ . '/includes/libs/rdbms/lbfactory/LBFactorySimple.php',
 -      'LBFactorySingle' => __DIR__ . '/includes/libs/rdbms/lbfactory/LBFactorySingle.php',
        'LCStore' => __DIR__ . '/includes/cache/localisation/LCStore.php',
        'LCStoreCDB' => __DIR__ . '/includes/cache/localisation/LCStoreCDB.php',
        'LCStoreDB' => __DIR__ . '/includes/cache/localisation/LCStoreDB.php',
        'LanguageBe_tarask' => __DIR__ . '/languages/classes/LanguageBe_tarask.php',
        'LanguageBg' => __DIR__ . '/languages/classes/LanguageBg.php',
        'LanguageBs' => __DIR__ . '/languages/classes/LanguageBs.php',
+       'LanguageCode' => __DIR__ . '/languages/LanguageCode.php',
        'LanguageConverter' => __DIR__ . '/languages/LanguageConverter.php',
        'LanguageCu' => __DIR__ . '/languages/classes/LanguageCu.php',
        'LanguageDsb' => __DIR__ . '/languages/classes/LanguageDsb.php',
        'LegacyLogFormatter' => __DIR__ . '/includes/logging/LogFormatter.php',
        'License' => __DIR__ . '/includes/Licenses.php',
        'Licenses' => __DIR__ . '/includes/Licenses.php',
 -      'LikeMatch' => __DIR__ . '/includes/libs/rdbms/encasing/LikeMatch.php',
        'LinkBatch' => __DIR__ . '/includes/cache/LinkBatch.php',
        'LinkCache' => __DIR__ . '/includes/cache/LinkCache.php',
        'LinkFilter' => __DIR__ . '/includes/LinkFilter.php',
        'ListredirectsPage' => __DIR__ . '/includes/specials/SpecialListredirects.php',
        'LoadBalancer' => __DIR__ . '/includes/libs/rdbms/loadbalancer/LoadBalancer.php',
        'LoadBalancerSingle' => __DIR__ . '/includes/libs/rdbms/loadbalancer/LoadBalancerSingle.php',
 -      'LoadMonitor' => __DIR__ . '/includes/libs/rdbms/loadmonitor/LoadMonitor.php',
 -      'LoadMonitorMySQL' => __DIR__ . '/includes/libs/rdbms/loadmonitor/LoadMonitorMySQL.php',
 -      'LoadMonitorNull' => __DIR__ . '/includes/libs/rdbms/loadmonitor/LoadMonitorNull.php',
        'LocalFile' => __DIR__ . '/includes/filerepo/file/LocalFile.php',
        'LocalFileDeleteBatch' => __DIR__ . '/includes/filerepo/file/LocalFile.php',
        'LocalFileLockError' => __DIR__ . '/includes/filerepo/file/LocalFile.php',
        'MaintenanceFormatInstallDoc' => __DIR__ . '/maintenance/formatInstallDoc.php',
        'MakeTestEdits' => __DIR__ . '/maintenance/makeTestEdits.php',
        'MalformedTitleException' => __DIR__ . '/includes/title/MalformedTitleException.php',
 +      'ManageJobs' => __DIR__ . '/maintenance/manageJobs.php',
        'ManualLogEntry' => __DIR__ . '/includes/logging/LogEntry.php',
        'MapCacheLRU' => __DIR__ . '/includes/libs/MapCacheLRU.php',
        'MappedIterator' => __DIR__ . '/includes/libs/MappedIterator.php',
        'MediaTransformOutput' => __DIR__ . '/includes/media/MediaTransformOutput.php',
        'MediaWiki' => __DIR__ . '/includes/MediaWiki.php',
        'MediaWikiI18N' => __DIR__ . '/includes/skins/MediaWikiI18N.php',
 +      'MediaWikiShell' => __DIR__ . '/maintenance/shell.php',
        'MediaWikiSite' => __DIR__ . '/includes/site/MediaWikiSite.php',
        'MediaWikiTitleCodec' => __DIR__ . '/includes/title/MediaWikiTitleCodec.php',
        'MediaWikiVersionFetcher' => __DIR__ . '/includes/MediaWikiVersionFetcher.php',
        'MediaWiki\\Auth\\UsernameAuthenticationRequest' => __DIR__ . '/includes/auth/UsernameAuthenticationRequest.php',
        'MediaWiki\\Diff\\ComplexityException' => __DIR__ . '/includes/diff/ComplexityException.php',
        'MediaWiki\\Diff\\WordAccumulator' => __DIR__ . '/includes/diff/WordAccumulator.php',
 +      'MediaWiki\\HeaderCallback' => __DIR__ . '/includes/HeaderCallback.php',
        'MediaWiki\\Interwiki\\ClassicInterwikiLookup' => __DIR__ . '/includes/interwiki/ClassicInterwikiLookup.php',
        'MediaWiki\\Interwiki\\InterwikiLookup' => __DIR__ . '/includes/interwiki/InterwikiLookup.php',
        'MediaWiki\\Interwiki\\InterwikiLookupAdapter' => __DIR__ . '/includes/interwiki/InterwikiLookupAdapter.php',
        'MediaWiki\\Tidy\\RaggettInternalHHVM' => __DIR__ . '/includes/tidy/RaggettInternalHHVM.php',
        'MediaWiki\\Tidy\\RaggettInternalPHP' => __DIR__ . '/includes/tidy/RaggettInternalPHP.php',
        'MediaWiki\\Tidy\\RaggettWrapper' => __DIR__ . '/includes/tidy/RaggettWrapper.php',
 +      'MediaWiki\\Tidy\\RemexCompatFormatter' => __DIR__ . '/includes/tidy/RemexCompatFormatter.php',
 +      'MediaWiki\\Tidy\\RemexCompatMunger' => __DIR__ . '/includes/tidy/RemexCompatMunger.php',
 +      'MediaWiki\\Tidy\\RemexDriver' => __DIR__ . '/includes/tidy/RemexDriver.php',
 +      'MediaWiki\\Tidy\\RemexMungerData' => __DIR__ . '/includes/tidy/RemexMungerData.php',
        'MediaWiki\\Tidy\\TidyDriverBase' => __DIR__ . '/includes/tidy/TidyDriverBase.php',
        'MediaWiki\\Widget\\ComplexNamespaceInputWidget' => __DIR__ . '/includes/widget/ComplexNamespaceInputWidget.php',
        'MediaWiki\\Widget\\ComplexTitleInputWidget' => __DIR__ . '/includes/widget/ComplexTitleInputWidget.php',
        'MediaWiki\\Widget\\DateTimeInputWidget' => __DIR__ . '/includes/widget/DateTimeInputWidget.php',
        'MediaWiki\\Widget\\NamespaceInputWidget' => __DIR__ . '/includes/widget/NamespaceInputWidget.php',
        'MediaWiki\\Widget\\SearchInputWidget' => __DIR__ . '/includes/widget/SearchInputWidget.php',
 +      'MediaWiki\\Widget\\Search\\BasicSearchResultSetWidget' => __DIR__ . '/includes/widget/search/BasicSearchResultSetWidget.php',
 +      'MediaWiki\\Widget\\Search\\DidYouMeanWidget' => __DIR__ . '/includes/widget/search/DidYouMeanWidget.php',
 +      'MediaWiki\\Widget\\Search\\FullSearchResultWidget' => __DIR__ . '/includes/widget/search/FullSearchResultWidget.php',
 +      'MediaWiki\\Widget\\Search\\InterwikiSearchResultSetWidget' => __DIR__ . '/includes/widget/search/InterwikiSearchResultSetWidget.php',
 +      'MediaWiki\\Widget\\Search\\InterwikiSearchResultWidget' => __DIR__ . '/includes/widget/search/InterwikiSearchResultWidget.php',
 +      'MediaWiki\\Widget\\Search\\SearchFormWidget' => __DIR__ . '/includes/widget/search/SearchFormWidget.php',
 +      'MediaWiki\\Widget\\Search\\SearchResultSetWidget' => __DIR__ . '/includes/widget/search/SearchResultSetWidget.php',
 +      'MediaWiki\\Widget\\Search\\SearchResultWidget' => __DIR__ . '/includes/widget/search/SearchResultWidget.php',
 +      'MediaWiki\\Widget\\Search\\SimpleSearchResultSetWidget' => __DIR__ . '/includes/widget/search/SimpleSearchResultSetWidget.php',
 +      'MediaWiki\\Widget\\Search\\SimpleSearchResultWidget' => __DIR__ . '/includes/widget/search/SimpleSearchResultWidget.php',
        'MediaWiki\\Widget\\TitleInputWidget' => __DIR__ . '/includes/widget/TitleInputWidget.php',
        'MediaWiki\\Widget\\UserInputWidget' => __DIR__ . '/includes/widget/UserInputWidget.php',
 +      'MediaWiki\\Widget\\UsersMultiselectWidget' => __DIR__ . '/includes/widget/UsersMultiselectWidget.php',
        'MemCachedClientforWiki' => __DIR__ . '/includes/compat/MemcachedClientCompat.php',
        'MemcLockManager' => __DIR__ . '/includes/libs/lockmanager/MemcLockManager.php',
        'MemcachedBagOStuff' => __DIR__ . '/includes/libs/objectcache/MemcachedBagOStuff.php',
        'MoveLogFormatter' => __DIR__ . '/includes/logging/MoveLogFormatter.php',
        'MovePage' => __DIR__ . '/includes/MovePage.php',
        'MovePageForm' => __DIR__ . '/includes/specials/SpecialMovepage.php',
 -      'MssqlBlob' => __DIR__ . '/includes/libs/rdbms/encasing/MssqlBlob.php',
 -      'MssqlField' => __DIR__ . '/includes/libs/rdbms/field/MssqlField.php',
        'MssqlInstaller' => __DIR__ . '/includes/installer/MssqlInstaller.php',
 -      'MssqlResultWrapper' => __DIR__ . '/includes/libs/rdbms/database/resultwrapper/MssqlResultWrapper.php',
        'MssqlUpdater' => __DIR__ . '/includes/installer/MssqlUpdater.php',
        'MultiConfig' => __DIR__ . '/includes/config/MultiConfig.php',
        'MultiHttpClient' => __DIR__ . '/includes/libs/MultiHttpClient.php',
        'MutableConfig' => __DIR__ . '/includes/config/MutableConfig.php',
        'MutableContext' => __DIR__ . '/includes/context/MutableContext.php',
        'MwSql' => __DIR__ . '/maintenance/sql.php',
 -      'MySQLField' => __DIR__ . '/includes/libs/rdbms/field/MySQLField.php',
 -      'MySQLMasterPos' => __DIR__ . '/includes/libs/rdbms/database/position/MySQLMasterPos.php',
        'MySqlLockManager' => __DIR__ . '/includes/filebackend/lockmanager/MySqlLockManager.php',
        'MysqlInstaller' => __DIR__ . '/includes/installer/MysqlInstaller.php',
        'MysqlUpdater' => __DIR__ . '/includes/installer/MysqlUpdater.php',
        'NullStatsdDataFactory' => __DIR__ . '/includes/libs/stats/NullStatsdDataFactory.php',
        'NumericUppercaseCollation' => __DIR__ . '/includes/collation/NumericUppercaseCollation.php',
        'OOUIHTMLForm' => __DIR__ . '/includes/htmlform/OOUIHTMLForm.php',
 -      'ORAField' => __DIR__ . '/includes/libs/rdbms/field/ORAField.php',
 -      'ORAResult' => __DIR__ . '/includes/db/DatabaseOracle.php',
 +      'ORAField' => __DIR__ . '/includes/db/ORAField.php',
 +      'ORAResult' => __DIR__ . '/includes/db/ORAResult.php',
        'ObjectCache' => __DIR__ . '/includes/objectcache/ObjectCache.php',
        'ObjectFactory' => __DIR__ . '/includes/libs/ObjectFactory.php',
        'OldChangesList' => __DIR__ . '/includes/changes/OldChangesList.php',
        'PackedImageGallery' => __DIR__ . '/includes/gallery/PackedImageGallery.php',
        'PackedOverlayImageGallery' => __DIR__ . '/includes/gallery/PackedOverlayImageGallery.php',
        'Page' => __DIR__ . '/includes/page/Page.php',
 -      'PageArchive' => __DIR__ . '/includes/specials/SpecialUndelete.php',
 +      'PageArchive' => __DIR__ . '/includes/page/PageArchive.php',
        'PageExists' => __DIR__ . '/maintenance/pageExists.php',
        'PageLangLogFormatter' => __DIR__ . '/includes/logging/PageLangLogFormatter.php',
        'PageProps' => __DIR__ . '/includes/PageProps.php',
        'PopulateRevisionLength' => __DIR__ . '/maintenance/populateRevisionLength.php',
        'PopulateRevisionSha1' => __DIR__ . '/maintenance/populateRevisionSha1.php',
        'PostgreSqlLockManager' => __DIR__ . '/includes/libs/lockmanager/PostgreSqlLockManager.php',
 -      'PostgresBlob' => __DIR__ . '/includes/libs/rdbms/encasing/PostgresBlob.php',
 -      'PostgresField' => __DIR__ . '/includes/libs/rdbms/field/PostgresField.php',
        'PostgresInstaller' => __DIR__ . '/includes/installer/PostgresInstaller.php',
        'PostgresUpdater' => __DIR__ . '/includes/installer/PostgresUpdater.php',
        'Preferences' => __DIR__ . '/includes/Preferences.php',
        'Protect' => __DIR__ . '/maintenance/protect.php',
        'ProtectAction' => __DIR__ . '/includes/actions/ProtectAction.php',
        'ProtectLogFormatter' => __DIR__ . '/includes/logging/ProtectLogFormatter.php',
 -      'ProtectedPagesPager' => __DIR__ . '/includes/specials/SpecialProtectedpages.php',
 +      'ProtectedPagesPager' => __DIR__ . '/includes/specials/pagers/ProtectedPagesPager.php',
        'ProtectedTitlesPager' => __DIR__ . '/includes/specials/pagers/ProtectedTitlesPager.php',
        'ProtectionForm' => __DIR__ . '/includes/ProtectionForm.php',
        'ProxyLookup' => __DIR__ . '/includes/ProxyLookup.php',
        'PurgeChangedPages' => __DIR__ . '/maintenance/purgeChangedPages.php',
        'PurgeJobUtils' => __DIR__ . '/includes/jobqueue/utils/PurgeJobUtils.php',
        'PurgeList' => __DIR__ . '/maintenance/purgeList.php',
 +      'PurgeModuleDeps' => __DIR__ . '/maintenance/purgeModuleDeps.php',
        'PurgeOldText' => __DIR__ . '/maintenance/purgeOldText.php',
        'PurgeParserCache' => __DIR__ . '/maintenance/purgeParserCache.php',
        'QueryPage' => __DIR__ . '/includes/specialpage/QueryPage.php',
        'RCCacheEntry' => __DIR__ . '/includes/changes/RCCacheEntry.php',
        'RCCacheEntryFactory' => __DIR__ . '/includes/changes/RCCacheEntryFactory.php',
        'RCDatabaseLogEntry' => __DIR__ . '/includes/logging/LogEntry.php',
 +      'RCFeed' => __DIR__ . '/includes/rcfeed/RCFeed.php',
        'RCFeedEngine' => __DIR__ . '/includes/rcfeed/RCFeedEngine.php',
        'RCFeedFormatter' => __DIR__ . '/includes/rcfeed/RCFeedFormatter.php',
        'RESTBagOStuff' => __DIR__ . '/includes/libs/objectcache/RESTBagOStuff.php',
        'RowUpdateGenerator' => __DIR__ . '/includes/utils/RowUpdateGenerator.php',
        'RunJobs' => __DIR__ . '/maintenance/runJobs.php',
        'RunningStat' => __DIR__ . '/includes/compat/RunningStatCompat.php',
 -      'SQLiteField' => __DIR__ . '/includes/libs/rdbms/field/SQLiteField.php',
        'SVGMetadataExtractor' => __DIR__ . '/includes/media/SVGMetadataExtractor.php',
        'SVGReader' => __DIR__ . '/includes/media/SVGMetadataExtractor.php',
        'SamplingStatsdClient' => __DIR__ . '/includes/libs/stats/SamplingStatsdClient.php',
        'ThumbnailRenderJob' => __DIR__ . '/includes/jobqueue/jobs/ThumbnailRenderJob.php',
        'TidyUpBug37714' => __DIR__ . '/maintenance/tidyUpBug37714.php',
        'TiffHandler' => __DIR__ . '/includes/media/Tiff.php',
 -      'TimestampException' => __DIR__ . '/includes/libs/time/TimestampException.php',
        'Timing' => __DIR__ . '/includes/libs/Timing.php',
        'Title' => __DIR__ . '/includes/Title.php',
        'TitleArray' => __DIR__ . '/includes/TitleArray.php',
        'TitlePrefixSearch' => __DIR__ . '/includes/PrefixSearch.php',
        'TitleValue' => __DIR__ . '/includes/title/TitleValue.php',
        'TrackBlobs' => __DIR__ . '/maintenance/storage/trackBlobs.php',
 +      'TrackingCategories' => __DIR__ . '/includes/TrackingCategories.php',
        'TraditionalImageGallery' => __DIR__ . '/includes/gallery/TraditionalImageGallery.php',
 -      'TransactionProfiler' => __DIR__ . '/includes/libs/rdbms/TransactionProfiler.php',
        'TransformParameterError' => __DIR__ . '/includes/media/MediaTransformOutput.php',
        'TransformTooBigImageAreaError' => __DIR__ . '/includes/media/MediaTransformOutput.php',
        'TransformationalImageHandler' => __DIR__ . '/includes/media/TransformationalImageHandler.php',
        'UserBlockedError' => __DIR__ . '/includes/exception/UserBlockedError.php',
        'UserCache' => __DIR__ . '/includes/cache/UserCache.php',
        'UserDupes' => __DIR__ . '/maintenance/userDupes.inc',
 +      'UserGroupMembership' => __DIR__ . '/includes/user/UserGroupMembership.php',
        'UserMailer' => __DIR__ . '/includes/mail/UserMailer.php',
        'UserNamePrefixSearch' => __DIR__ . '/includes/user/UserNamePrefixSearch.php',
        'UserNotLoggedIn' => __DIR__ . '/includes/exception/UserNotLoggedIn.php',
        'ViewCLI' => __DIR__ . '/maintenance/view.php',
        'VirtualRESTService' => __DIR__ . '/includes/libs/virtualrest/VirtualRESTService.php',
        'VirtualRESTServiceClient' => __DIR__ . '/includes/libs/virtualrest/VirtualRESTServiceClient.php',
 +      'WANCacheReapUpdate' => __DIR__ . '/includes/deferred/WANCacheReapUpdate.php',
        'WANObjectCache' => __DIR__ . '/includes/libs/objectcache/WANObjectCache.php',
 +      'WANObjectCacheReaper' => __DIR__ . '/includes/libs/objectcache/WANObjectCacheReaper.php',
        'WantedCategoriesPage' => __DIR__ . '/includes/specials/SpecialWantedcategories.php',
        'WantedFilesPage' => __DIR__ . '/includes/specials/SpecialWantedfiles.php',
        'WantedPagesPage' => __DIR__ . '/includes/specials/SpecialWantedpages.php',
        'WikiRevision' => __DIR__ . '/includes/import/WikiRevision.php',
        'WikiStatsOutput' => __DIR__ . '/maintenance/language/StatOutputs.php',
        'WikiTextStructure' => __DIR__ . '/includes/content/WikiTextStructure.php',
 +      'Wikimedia\\Rdbms\\Blob' => __DIR__ . '/includes/libs/rdbms/encasing/Blob.php',
 +      'Wikimedia\\Rdbms\\ChronologyProtector' => __DIR__ . '/includes/libs/rdbms/ChronologyProtector.php',
        'Wikimedia\\Rdbms\\ConnectionManager' => __DIR__ . '/includes/libs/rdbms/connectionmanager/ConnectionManager.php',
 +      'Wikimedia\\Rdbms\\DBMasterPos' => __DIR__ . '/includes/libs/rdbms/database/position/DBMasterPos.php',
 +      'Wikimedia\\Rdbms\\DatabaseDomain' => __DIR__ . '/includes/libs/rdbms/database/DatabaseDomain.php',
 +      'Wikimedia\\Rdbms\\FakeResultWrapper' => __DIR__ . '/includes/libs/rdbms/database/resultwrapper/FakeResultWrapper.php',
 +      'Wikimedia\\Rdbms\\Field' => __DIR__ . '/includes/libs/rdbms/field/Field.php',
 +      'Wikimedia\\Rdbms\\IBlob' => __DIR__ . '/includes/libs/rdbms/encasing/IBlob.php',
 +      'Wikimedia\\Rdbms\\ILBFactory' => __DIR__ . '/includes/libs/rdbms/lbfactory/ILBFactory.php',
 +      'Wikimedia\\Rdbms\\ILoadBalancer' => __DIR__ . '/includes/libs/rdbms/loadbalancer/ILoadBalancer.php',
 +      'Wikimedia\\Rdbms\\ILoadMonitor' => __DIR__ . '/includes/libs/rdbms/loadmonitor/ILoadMonitor.php',
 +      'Wikimedia\\Rdbms\\IResultWrapper' => __DIR__ . '/includes/libs/rdbms/database/resultwrapper/IResultWrapper.php',
 +      'Wikimedia\\Rdbms\\LBFactory' => __DIR__ . '/includes/libs/rdbms/lbfactory/LBFactory.php',
 +      'Wikimedia\\Rdbms\\LBFactoryMulti' => __DIR__ . '/includes/libs/rdbms/lbfactory/LBFactoryMulti.php',
 +      'Wikimedia\\Rdbms\\LBFactorySimple' => __DIR__ . '/includes/libs/rdbms/lbfactory/LBFactorySimple.php',
 +      'Wikimedia\\Rdbms\\LBFactorySingle' => __DIR__ . '/includes/libs/rdbms/lbfactory/LBFactorySingle.php',
 +      'Wikimedia\\Rdbms\\LikeMatch' => __DIR__ . '/includes/libs/rdbms/encasing/LikeMatch.php',
 +      'Wikimedia\\Rdbms\\LoadBalancer' => __DIR__ . '/includes/libs/rdbms/loadbalancer/LoadBalancer.php',
 +      'Wikimedia\\Rdbms\\LoadBalancerSingle' => __DIR__ . '/includes/libs/rdbms/loadbalancer/LoadBalancerSingle.php',
 +      'Wikimedia\\Rdbms\\LoadMonitor' => __DIR__ . '/includes/libs/rdbms/loadmonitor/LoadMonitor.php',
 +      'Wikimedia\\Rdbms\\LoadMonitorMySQL' => __DIR__ . '/includes/libs/rdbms/loadmonitor/LoadMonitorMySQL.php',
 +      'Wikimedia\\Rdbms\\LoadMonitorNull' => __DIR__ . '/includes/libs/rdbms/loadmonitor/LoadMonitorNull.php',
 +      'Wikimedia\\Rdbms\\MssqlBlob' => __DIR__ . '/includes/libs/rdbms/encasing/MssqlBlob.php',
 +      'Wikimedia\\Rdbms\\MssqlField' => __DIR__ . '/includes/libs/rdbms/field/MssqlField.php',
 +      'Wikimedia\\Rdbms\\MssqlResultWrapper' => __DIR__ . '/includes/libs/rdbms/database/resultwrapper/MssqlResultWrapper.php',
 +      'Wikimedia\\Rdbms\\MySQLField' => __DIR__ . '/includes/libs/rdbms/field/MySQLField.php',
 +      'Wikimedia\\Rdbms\\MySQLMasterPos' => __DIR__ . '/includes/libs/rdbms/database/position/MySQLMasterPos.php',
 +      'Wikimedia\\Rdbms\\PostgresBlob' => __DIR__ . '/includes/libs/rdbms/encasing/PostgresBlob.php',
 +      'Wikimedia\\Rdbms\\PostgresField' => __DIR__ . '/includes/libs/rdbms/field/PostgresField.php',
 +      'Wikimedia\\Rdbms\\ResultWrapper' => __DIR__ . '/includes/libs/rdbms/database/resultwrapper/ResultWrapper.php',
 +      'Wikimedia\\Rdbms\\SQLiteField' => __DIR__ . '/includes/libs/rdbms/field/SQLiteField.php',
        'Wikimedia\\Rdbms\\SessionConsistentConnectionManager' => __DIR__ . '/includes/libs/rdbms/connectionmanager/SessionConsistentConnectionManager.php',
 +      'Wikimedia\\Rdbms\\TransactionProfiler' => __DIR__ . '/includes/libs/rdbms/TransactionProfiler.php',
        'WikitextContent' => __DIR__ . '/includes/content/WikitextContent.php',
        'WikitextContentHandler' => __DIR__ . '/includes/content/WikitextContentHandler.php',
        'WinCacheBagOStuff' => __DIR__ . '/includes/libs/objectcache/WinCacheBagOStuff.php',
@@@ -443,6 -443,7 +443,6 @@@ $wgImgAuthUrlPathMap = []
   * Properties required for all repos:
   *   - class            The class name for the repository. May come from the core or an extension.
   *                      The core repository classes are FileRepo, LocalRepo, ForeignDBRepo.
 - *                      FSRepo is also supported for backwards compatibility.
   *
   *   - name             A unique name for the repository (but $wgLocalFileRepo should be 'local').
   *                      The name should consist of alpha-numeric characters.
@@@ -1337,7 -1338,7 +1337,7 @@@ $wgXMLMimeTypes = 
   * to reduce disk usage, limits can only be selected from a list.
   * The user preference is saved as an array offset in the database, by default
   * the offset is set with $wgDefaultUserOptions['imagesize']. Make sure you
 - * change it if you alter the array (see bug 8858).
 + * change it if you alter the array (see T10858).
   * This is the list of settings the user can choose from:
   */
  $wgImageLimits = [
@@@ -1442,19 -1443,14 +1442,19 @@@ $wgUseTinyRGBForJPGThumbnails = false
   * Default parameters for the "<gallery>" tag
   */
  $wgGalleryOptions = [
 -      'imagesPerRow' => 0, // Default number of images per-row in the gallery. 0 -> Adapt to screensize
 -      'imageWidth' => 120, // Width of the cells containing images in galleries (in "px")
 -      'imageHeight' => 120, // Height of the cells containing images in galleries (in "px")
 -      'captionLength' => true, // Deprecated @since 1.28
 -                               // Length to truncate filename to in caption when using "showfilename".
 -                               // A value of 'true' will truncate the filename to one line using CSS
 -                               // and will be the behaviour after deprecation.
 -      'showBytes' => true, // Show the filesize in bytes in categories
 +      // Default number of images per-row in the gallery. 0 -> Adapt to screensize
 +      'imagesPerRow' => 0,
 +      // Width of the cells containing images in galleries (in "px")
 +      'imageWidth' => 120,
 +      // Height of the cells containing images in galleries (in "px")
 +      'imageHeight' => 120,
 +      // Length to truncate filename to in caption when using "showfilename".
 +      // A value of 'true' will truncate the filename to one line using CSS
 +      // and will be the behaviour after deprecation.
 +      // @deprecated since 1.28
 +      'captionLength' => true,
 +      // Show the filesize in bytes in categories
 +      'showBytes' => true,
        'mode' => 'traditional',
  ];
  
@@@ -2347,19 -2343,6 +2347,19 @@@ $wgWANObjectCaches = 
        */
  ];
  
 +/**
 + * Verify and enforce WAN cache purges using reliable DB sources as streams.
 + *
 + * These secondary cache purges are de-duplicated via simple cache mutexes.
 + * This improves consistency when cache purges are lost, which becomes more likely
 + * as more cache servers are added or if there are multiple datacenters. Only keys
 + * related to important mutable content will be checked.
 + *
 + * @var bool
 + * @since 1.29
 + */
 +$wgEnableWANCacheReaper = false;
 +
  /**
   * Main object stash type. This should be a fast storage system for storing
   * lightweight data like hit counters and user activity. Sites with multiple
@@@ -2825,8 -2808,9 +2825,9 @@@ $wgUsePrivateIPs = false
   * MediaWiki out of the box. Not all languages listed there have translations,
   * see languages/messages/ for the list of languages with some localisation.
   *
-  * Warning: Don't use language codes listed in $wgDummyLanguageCodes like "no"
-  * for Norwegian (use "nb" instead), or things will break unexpectedly.
+  * Warning: Don't use any of MediaWiki's deprecated language codes listed in
+  * LanguageCode::getDeprecatedCodeMapping or $wgDummyLanguageCodes, like "no"
+  * for Norwegian (use "nb" instead). If you do, things will break unexpectedly.
   *
   * This defines the default interface language for all users, but users can
   * change it in their preferences.
@@@ -2885,25 -2869,22 +2886,22 @@@ $wgExtraInterlanguageLinkPrefixes = []
  $wgExtraLanguageNames = [];
  
  /**
-  * List of language codes that don't correspond to an actual language.
-  * These codes are mostly left-offs from renames, or other legacy things.
-  * This array makes them not appear as a selectable language on the installer,
-  * and excludes them when running the transstat.php script.
-  */
- $wgDummyLanguageCodes = [
-       'als' => 'gsw',
-       'bat-smg' => 'sgs',
-       'be-x-old' => 'be-tarask',
-       'bh' => 'bho',
-       'fiu-vro' => 'vro',
-       'no' => 'nb',
-       'qqq' => 'qqq', # Used for message documentation.
-       'qqx' => 'qqx', # Used for viewing message keys.
-       'roa-rup' => 'rup',
-       'simple' => 'en',
-       'zh-classical' => 'lzh',
-       'zh-min-nan' => 'nan',
-       'zh-yue' => 'yue',
+  * List of mappings from one language code to another.
+  * This array makes the codes not appear as a selectable language on the
+  * installer, and excludes them when running the transstat.php script.
+  *
+  * In Setup.php, the variable $wgDummyLanguageCodes is created by combining
+  * these codes with a list of "deprecated" codes, which are mostly leftovers
+  * from renames or other legacy things, and the internal codes 'qqq' and 'qqx'.
+  * If a mapping in $wgExtraLanguageCodes collide with a built-in mapping, the
+  * value in $wgExtraLanguageCodes will be used.
+  *
+  * @since 1.29
+  */
+ $wgExtraLanguageCodes = [
+       'bh' => 'bho', // Bihari language family
+       'no' => 'nb', // Norwegian language family
+       'simple' => 'en', // Simple English
  ];
  
  /**
@@@ -3362,7 -3343,7 +3360,7 @@@ $wgDisableOutputCompression = false
   *
   * Currently this appears to work fine in all browsers, but it's disabled by
   * default because it normalizes id's a bit too aggressively, breaking preexisting
 - * content (particularly Cite).  See bug 27733, bug 27694, bug 27474.
 + * content (particularly Cite).  See T29733, T29694, T29474.
   */
  $wgExperimentalHtmlIds = false;
  
@@@ -4086,7 -4067,7 +4084,7 @@@ $wgMaxRedirects = 1
   * Attempting to create a redirect to any of the pages in this array
   * will make the redirect fail.
   * Userlogout is hard-coded, so it does not need to be listed here.
 - * (bug 10569) Disallow Mypage and Mytalk as well.
 + * (T12569) Disallow Mypage and Mytalk as well.
   *
   * As of now, this only checks special pages. Redirects to pages in
   * other namespaces cannot be invalidated by this variable.
@@@ -4570,8 -4551,8 +4568,8 @@@ $wgAuthManagerAutoConfig = 
                ],
                // Linking during login is experimental, enable at your own risk - T134952
                // MediaWiki\Auth\ConfirmLinkSecondaryAuthenticationProvider::class => [
 -              //      'class' => MediaWiki\Auth\ConfirmLinkSecondaryAuthenticationProvider::class,
 -              //      'sort' => 100,
 +              //   'class' => MediaWiki\Auth\ConfirmLinkSecondaryAuthenticationProvider::class,
 +              //   'sort' => 100,
                // ],
                MediaWiki\Auth\EmailNotificationSecondaryAuthenticationProvider::class => [
                        'class' => MediaWiki\Auth\EmailNotificationSecondaryAuthenticationProvider::class,
@@@ -4791,7 -4772,6 +4789,7 @@@ $wgReservedUsernames = 
        'Maintenance script', // Maintenance scripts which perform editing, image import script
        'Template namespace initialisation script', // Used in 1.2->1.3 upgrade
        'ScriptImporter', // Default user name used by maintenance/importSiteScripts.php
 +      'Unknown user', // Used in WikiImporter when importing revisions with no author
        'msg:double-redirect-fixer', // Automatic double redirect fix
        'msg:usermessage-editor', // Default user for leaving user messages
        'msg:proxyblocker', // For $wgProxyList and Special:Blockme (removed in 1.22)
   */
  $wgDefaultUserOptions = [
        'ccmeonemails' => 0,
 -      'cols' => 80,
 +      'cols' => 80, // @deprecated since 1.29 No longer used in core
        'date' => 'default',
        'diffonly' => 0,
        'disablemail' => 0,
        'rcdays' => 7,
        'rcenhancedfilters' => 0,
        'rclimit' => 50,
 -      'rows' => 25,
 +      'rows' => 25, // @deprecated since 1.29 No longer used in core
        'showhiddencats' => 0,
        'shownumberswatching' => 1,
        'showtoolbar' => 1,
  /**
   * An array of preferences to not show for the user
   */
 -$wgHiddenPrefs = [
 -      'rcenhancedfilters',
 -];
 +$wgHiddenPrefs = [];
  
  /**
   * Characters to prevent during new account creations.
@@@ -5342,60 -5324,26 +5340,60 @@@ $wgAutoConfirmAge = 0
  $wgAutoConfirmCount = 0;
  
  /**
 - * Automatically add a usergroup to any user who matches certain conditions.
 - *
 - * @todo Redocument $wgAutopromote
 - *
 - * The format is
 - *   [ '&' or '|' or '^' or '!', cond1, cond2, ... ]
 - * where cond1, cond2, ... are themselves conditions; *OR*
 - *   APCOND_EMAILCONFIRMED, *OR*
 - *   [ APCOND_EMAILCONFIRMED ], *OR*
 - *   [ APCOND_EDITCOUNT, number of edits ], *OR*
 - *   [ APCOND_AGE, seconds since registration ], *OR*
 - *   [ APCOND_INGROUPS, group1, group2, ... ], *OR*
 - *   [ APCOND_ISIP, ip ], *OR*
 - *   [ APCOND_IPINRANGE, range ], *OR*
 - *   [ APCOND_AGE_FROM_EDIT, seconds since first edit ], *OR*
 - *   [ APCOND_BLOCKED ], *OR*
 - *   [ APCOND_ISBOT ], *OR*
 - *   similar constructs defined by extensions.
 - *
 - * If $wgEmailAuthentication is off, APCOND_EMAILCONFIRMED will be true for any
 + * Array containing the conditions of automatic promotion of a user to specific groups.
 + *
 + * The basic syntax for `$wgAutopromote` is:
 + *
 + *     $wgAutopromote = array(
 + *         'groupname' => cond,
 + *         'group2' => cond2,
 + *     );
 + *
 + * A `cond` may be:
 + *  - a single condition without arguments:
 + *      Note that Autopromote wraps a single non-array value into an array
 + *      e.g. `APCOND_EMAILCONFIRMED` OR
 + *           array( `APCOND_EMAILCONFIRMED` )
 + *  - a single condition with arguments:
 + *      e.g. `array( APCOND_EDITCOUNT, 100 )`
 + *  - a set of conditions:
 + *      e.g. `array( 'operand', cond1, cond2, ... )`
 + *
 + * When constructing a set of conditions, the following conditions are available:
 + *  - `&` (**AND**):
 + *      promote if user matches **ALL** conditions
 + *  - `|` (**OR**):
 + *      promote if user matches **ANY** condition
 + *  - `^` (**XOR**):
 + *      promote if user matches **ONLY ONE OF THE CONDITIONS**
 + *  - `!` (**NOT**):
 + *      promote if user matces **NO** condition
 + *  - array( APCOND_EMAILCONFIRMED ):
 + *      true if user has a confirmed e-mail
 + *  - array( APCOND_EDITCOUNT, number of edits ):
 + *      true if user has the at least the number of edits as the passed parameter
 + *  - array( APCOND_AGE, seconds since registration ):
 + *      true if the length of time since the user created his/her account
 + *      is at least the same length of time as the passed parameter
 + *  - array( APCOND_AGE_FROM_EDIT, seconds since first edit ):
 + *      true if the length of time since the user made his/her first edit
 + *      is at least the same length of time as the passed parameter
 + *  - array( APCOND_INGROUPS, group1, group2, ... ):
 + *      true if the user is a member of each of the passed groups
 + *  - array( APCOND_ISIP, ip ):
 + *      true if the user has the passed IP address
 + *  - array( APCOND_IPINRANGE, range ):
 + *      true if the user has an IP address in the range of the passed parameter
 + *  - array( APCOND_BLOCKED ):
 + *      true if the user is blocked
 + *  - array( APCOND_ISBOT ):
 + *      true if the user is a bot
 + *  - similar constructs can be defined by extensions
 + *
 + * The sets of conditions are evaluated recursively, so you can use nested sets of conditions
 + * linked by operands.
 + *
 + * Note that if $wgEmailAuthentication is disabled, APCOND_EMAILCONFIRMED will be true for any
   * user who has provided an e-mail address.
   */
  $wgAutopromote = [
@@@ -5565,15 -5513,6 +5563,15 @@@ $wgDnsBlacklistUrls = [ 'http.dnsbl.sor
   */
  $wgProxyWhitelist = [];
  
 +/**
 + * IP ranges that should be considered soft-blocked (anon-only, account
 + * creation allowed). The intent is to use this to prevent anonymous edits from
 + * shared resources such as Wikimedia Labs.
 + * @since 1.29
 + * @var string[]
 + */
 +$wgSoftBlockRanges = [];
 +
  /**
   * Whether to look at the X-Forwarded-For header's list of (potentially spoofed)
   * IPs and apply IP blocks to them. This allows for IP blocks to work with correctly-configured
@@@ -5685,7 -5624,7 +5683,7 @@@ $wgRateLimits = 
  ];
  
  /**
 - * Array of IPs which should be excluded from rate limits.
 + * Array of IPs / CIDR ranges which should be excluded from rate limits.
   * This may be useful for whitelisting NAT gateways for conferences, etc.
   */
  $wgRateLimitsExcludedIPs = [];
@@@ -5887,15 -5826,6 +5885,15 @@@ $wgBotPasswordsCluster = false
   */
  $wgBotPasswordsDatabase = false;
  
 +/**
 + * Whether to disable user group expiry. This is a transitional feature flag
 + * in accordance with WMF schema change policy, and will be removed later
 + * (hopefully before MW 1.29 release).
 + *
 + * @since 1.29
 + */
 +$wgDisableUserGroupExpiry = false;
 +
  /** @} */ # end of user rights settings
  
  /************************************************************************//**
@@@ -5993,10 -5923,7 +5991,10 @@@ $wgSessionName = false
  
  /**
   * Whether to set a cookie when a user is autoblocked. Doing so means that a blocked user, even
 - * after logging out and moving to a new IP address, will still be blocked.
 + * after logging out and moving to a new IP address, will still be blocked. This cookie will contain
 + * an authentication code if $wgSecretKey is set, or otherwise will just be the block ID (in
 + * which case there is a possibility of an attacker discovering the names of revdeleted users, so
 + * it is best to use this in conjunction with $wgSecretKey being set).
   */
  $wgCookieSetOnAutoblock = false;
  
@@@ -6663,64 -6590,51 +6661,64 @@@ $wgRCLinkLimits = [ 50, 100, 250, 500 ]
  $wgRCLinkDays = [ 1, 3, 7, 14, 30 ];
  
  /**
 - * Destinations to which notifications about recent changes
 - * should be sent.
 + * Configuration for feeds to which notifications about recent changes will be sent.
 + *
 + * The following feed classes are available by default:
 + * - 'UDPRCFeedEngine' - sends recent changes over UDP to the specified server.
 + * - 'RedisPubSubFeedEngine' - send recent changes to Redis.
   *
 - * As of MediaWiki 1.22, there are 2 supported 'engine' parameter option in core:
 - *   * 'UDPRCFeedEngine', which is used to send recent changes over UDP to the
 - *      specified server.
 - *   * 'RedisPubSubFeedEngine', which is used to send recent changes to Redis.
 + * Only 'class' or 'uri' is required. If 'uri' is set instead of 'class', then
 + * RecentChange::getEngine() is used to determine the class. All options are
 + * passed to the constructor.
   *
 - * The common options are:
 - *   * 'uri' -- the address to which the notices are to be sent.
 - *   * 'formatter' -- the class name (implementing RCFeedFormatter) which will
 - *     produce the text to send. This can also be an object of the class.
 - *   * 'omit_bots' -- whether the bot edits should be in the feed
 - *   * 'omit_anon' -- whether anonymous edits should be in the feed
 - *   * 'omit_user' -- whether edits by registered users should be in the feed
 - *   * 'omit_minor' -- whether minor edits should be in the feed
 - *   * 'omit_patrolled' -- whether patrolled edits should be in the feed
 + * Common options:
 + * - 'class' -- The class to use for this feed (must implement RCFeed).
 + * - 'omit_bots' -- Exclude bot edits from the feed. (default: false)
 + * - 'omit_anon' -- Exclude anonymous edits from the feed. (default: false)
 + * - 'omit_user' -- Exclude edits by registered users from the feed. (default: false)
 + * - 'omit_minor' -- Exclude minor edits from the feed. (default: false)
 + * - 'omit_patrolled' -- Exclude patrolled edits from the feed. (default: false)
   *
 - *  The IRC-specific options are:
 - *   * 'add_interwiki_prefix' -- whether the titles should be prefixed with
 - *     the first entry in the $wgLocalInterwikis array (or the value of
 - *     $wgLocalInterwiki, if set)
 + * FormattedRCFeed-specific options:
 + * - 'uri' -- [required] The address to which the messages are sent.
 + *   The uri scheme of this string will be looked up in $wgRCEngines
 + *   to determine which RCFeedEngine class to use.
 + * - 'formatter' -- [required] The class (implementing RCFeedFormatter) which will
 + *   produce the text to send. This can also be an object of the class.
 + *   Formatters available by default: JSONRCFeedFormatter, XMLRCFeedFormatter,
 + *   IRCColourfulRCFeedFormatter.
   *
 - *  The JSON-specific options are:
 - *   * 'channel' -- if set, the 'channel' parameter is also set in JSON values.
 + * IRCColourfulRCFeedFormatter-specific options:
 + * - 'add_interwiki_prefix' -- whether the titles should be prefixed with
 + *   the first entry in the $wgLocalInterwikis array (or the value of
 + *   $wgLocalInterwiki, if set)
 + *
 + * JSONRCFeedFormatter-specific options:
 + * - 'channel' -- if set, the 'channel' parameter is also set in JSON values.
   *
   * @example $wgRCFeeds['example'] = [
 + *            'uri' => 'udp://localhost:1336',
   *            'formatter' => 'JSONRCFeedFormatter',
 - *            'uri' => "udp://localhost:1336",
   *            'add_interwiki_prefix' => false,
   *            'omit_bots' => true,
   *    ];
 - * @example $wgRCFeeds['exampleirc'] = [
 + * @example $wgRCFeeds['example'] = [
 + *            'uri' => 'udp://localhost:1338',
   *            'formatter' => 'IRCColourfulRCFeedFormatter',
 - *            'uri' => "udp://localhost:1338",
   *            'add_interwiki_prefix' => false,
   *            'omit_bots' => true,
   *    ];
 + * @example $wgRCFeeds['example'] = [
 + *            'class' => 'ExampleRCFeed',
 + *    ];
   * @since 1.22
   */
  $wgRCFeeds = [];
  
  /**
 - * Used by RecentChange::getEngine to find the correct engine to use for a given URI scheme.
 - * Keys are scheme names, values are names of engine classes.
 + * Used by RecentChange::getEngine to find the correct engine for a given URI scheme.
 + * Keys are scheme names, values are names of FormattedRCFeed sub classes.
 + * @since 1.22
   */
  $wgRCEngines = [
        'redis' => 'RedisPubSubFeedEngine',
@@@ -8273,19 -8187,7 +8271,19 @@@ $wgRedirectOnLogin = null
   * The remaining elements are passed through to the class as constructor
   * parameters.
   *
 - * @par Example:
 + * @par Example using local redis instance:
 + * @code
 + *   $wgPoolCounterConf = [ 'ArticleView' => [
 + *     'class' => 'PoolCounterRedis',
 + *     'timeout' => 15, // wait timeout in seconds
 + *     'workers' => 1, // maximum number of active threads in each pool
 + *     'maxqueue' => 5, // maximum number of total threads in each pool
 + *     'servers' => [ '127.0.0.1' ],
 + *     'redisConfig' => []
 + *   ] ];
 + * @endcode
 + *
 + * @par Example using C daemon from https://www.mediawiki.org/wiki/Extension:PoolCounter:
   * @code
   *   $wgPoolCounterConf = [ 'ArticleView' => [
   *     'class' => 'PoolCounter_Client',
   *     'workers' => 5, // maximum number of active threads in each pool
   *     'maxqueue' => 50, // maximum number of total threads in each pool
   *     ... any extension-specific options...
 - *   ];
 + *   ] ];
   * @endcode
   */
  $wgPoolCounterConf = null;
@@@ -8375,7 -8277,7 +8373,7 @@@ $wgPagePropsHaveSortkey = true
  /**
   * Port where you have HTTPS running
   * Supports HTTPS on non-standard ports
 - * @see bug 65184
 + * @see T67184
   * @since 1.24
   */
  $wgHttpsPort = 443;
@@@ -8563,7 -8465,6 +8561,7 @@@ $wgCSPFalsePositiveUrls = 
        'https://atpixel.alephd.com' => true,
        'https://rtb.metrigo.com' => true,
        'https://d5p.de17a.com' => true,
 +      'https://ad.lkqd.net/vpaid/vpaid.js' => true,
  ];
  
  /**
@@@ -8583,25 -8484,6 +8581,25 @@@ $wgLearnerMemberSince = 4; # day
  $wgExperiencedUserEdits = 500;
  $wgExperiencedUserMemberSince = 30; # days
  
 +/**
 + * Mapping of interwiki index prefixes to descriptors that
 + * can be used to change the display of interwiki search results.
 + *
 + * Descriptors are appended to CSS classes of interwiki results
 + * which using InterwikiSearchResultWidget.
 + *
 + * Predefined descriptors include the following words:
 + * definition, textbook, news, quotation, book, travel, course
 + *
 + * @par Example:
 + * @code
 + * $wgInterwikiPrefixDisplayTypes = [
 + *    'iwprefix' => 'definition'
 + *];
 + * @endcode
 + */
 +$wgInterwikiPrefixDisplayTypes = [];
 +
  /**
   * For really cool vim folding this needs to be at the end:
   * vim: foldmarker=@{,@} foldmethod=marker
diff --combined includes/Setup.php
@@@ -1,6 -1,6 +1,6 @@@
  <?php
  /**
 - * Include most things that are needed to make %MediaWiki work.
 + * Include most things that are needed to make MediaWiki work.
   *
   * This file is included by WebStart.php and doMaintenance.php so that both
   * web and maintenance scripts share a final set up phase to include necessary
@@@ -244,7 -244,7 +244,7 @@@ if ( $wgUseInstantCommons ) 
                'transformVia404' => true,
                'fetchDescription' => true,
                'descriptionCacheExpiry' => 43200,
 -              'apiThumbCacheExpiry' => 86400,
 +              'apiThumbCacheExpiry' => 0,
        ];
  }
  /*
@@@ -329,7 -329,7 +329,7 @@@ if ( $wgEnableEmail ) 
        $wgUseEnotif = $wgEnotifUserTalk || $wgEnotifWatchlist;
  } else {
        // Disable all other email settings automatically if $wgEnableEmail
 -      // is set to false. - bug 63678
 +      // is set to false. - T65678
        $wgAllowHTMLEmail = false;
        $wgEmailAuthentication = false; // do not require auth if you're not sending email anyway
        $wgEnableUserEmail = false;
@@@ -403,6 -403,14 +403,14 @@@ if ( is_array( $wgExtraNamespaces ) ) 
        $wgCanonicalNamespaceNames = $wgCanonicalNamespaceNames + $wgExtraNamespaces;
  }
  
+ // Merge in the legacy language codes, unless overridden in the config
+ if ( !isset( $wgDummyLanguageCodes ) ) {
+       $wgDummyLanguageCodes = [
+               'qqq' => 'qqq', // Used for message documentation
+               'qqx' => 'qqx', // Used for viewing message keys
+       ] + $wgExtraLanguageCodes + LanguageCode::getDeprecatedCodeMapping();
+ }
  // These are now the same, always
  // To determine the user language, use $wgLang->getCode()
  $wgContLanguageCode = $wgLanguageCode;
@@@ -499,6 -507,10 +507,6 @@@ if ( $wgDebugToolbar && !$wgCommandLine
        MWDebug::init();
  }
  
 -if ( !class_exists( 'AutoLoader' ) ) {
 -      require_once "$IP/includes/AutoLoader.php";
 -}
 -
  // Reset the global service locator, so any services that have already been created will be
  // re-created while taking into account any custom settings and extensions.
  MediaWikiServices::resetGlobalInstance( new GlobalVarConfig(), 'quick' );
@@@ -521,6 -533,35 +529,6 @@@ if ( $wgSharedDB && $wgSharedTables ) 
  // is complete.
  define( 'MW_SERVICE_BOOTSTRAP_COMPLETE', 1 );
  
 -// Install a header callback to prevent caching of responses with cookies (T127993)
 -if ( !$wgCommandLineMode ) {
 -      header_register_callback( function () {
 -              $headers = [];
 -              foreach ( headers_list() as $header ) {
 -                      list( $name, $value ) = explode( ':', $header, 2 );
 -                      $headers[strtolower( trim( $name ) )][] = trim( $value );
 -              }
 -
 -              if ( isset( $headers['set-cookie'] ) ) {
 -                      $cacheControl = isset( $headers['cache-control'] )
 -                              ? implode( ', ', $headers['cache-control'] )
 -                              : '';
 -
 -                      if ( !preg_match( '/(?:^|,)\s*(?:private|no-cache|no-store)\s*(?:$|,)/i', $cacheControl ) ) {
 -                              header( 'Expires: Thu, 01 Jan 1970 00:00:00 GMT' );
 -                              header( 'Cache-Control: private, max-age=0, s-maxage=0' );
 -                              MediaWiki\Logger\LoggerFactory::getInstance( 'cache-cookies' )->warning(
 -                                      'Cookies set on {url} with Cache-Control "{cache-control}"', [
 -                                              'url' => WebRequest::getGlobalRequestURL(),
 -                                              'cookies' => $headers['set-cookie'],
 -                                              'cache-control' => $cacheControl ?: '<not set>',
 -                                      ]
 -                              );
 -                      }
 -              }
 -      } );
 -}
 -
  MWExceptionHandler::installHandler();
  
  require_once "$IP/includes/compat/normal/UtfNormalUtil.php";
@@@ -847,6 -888,7 +855,6 @@@ if ( !$wgCommandLineMode ) 
        Pingback::schedulePingback();
  }
  
 -wfDebug( "Fully initialised\n" );
  $wgFullyInitialised = true;
  
  Profiler::instance()->scopedProfileOut( $ps_extensions );