diff --git a/SDK-GMLIB b/SDK-GMLIB index 9fac639..41b3a0c 160000 --- a/SDK-GMLIB +++ b/SDK-GMLIB @@ -1 +1 @@ -Subproject commit 9fac6399eb735975fc0a119f1adbb98ce6910dd5 +Subproject commit 41b3a0cf5ff473fdb6a37597c73fd47f992b6736 diff --git a/src/Cleaner.cpp b/src/Cleaner.cpp index ec4fdcd..00cc3d2 100644 --- a/src/Cleaner.cpp +++ b/src/Cleaner.cpp @@ -1,7 +1,12 @@ +#include "Config.h" #include "Global.h" #include #include #include +#include + +GMLIB_JsonConfig* Config = nullptr; +GMLIB_JsonLanguage* Language = nullptr; using namespace ll::schedule; using namespace ll::chrono_literals; @@ -12,6 +17,19 @@ bool auto_clean_triggerred = false; namespace Cleaner { +bool isMatch(std::string& A, std::string& B) { + // 如果B是正则表达式 + if (B.find_first_of(".*+?()[]{}|^$") != std::string::npos) { + try { + std::regex regex(B); + return std::regex_match(A, regex); + } catch (...) { + return false; + } + } + return (A == B); +} + bool shouldIgnore(GMLIB_Actor* ac) { if (ac->isMob() || ac->isItemActor()) { if (ac->isTame() || ac->isTrusting() || ac->getNameTag() != "") { @@ -34,35 +52,56 @@ bool ShouldClean(Actor* actor) { auto type = en->getTypeName(); // Items if (en->isItemActor()) { - return true; - if (true) { // Todo Config Toggle - auto itac = (ItemActor*)en; - auto itemType = itac->item().getTypeName(); - if (true) { // Todo Config WhiteList + if (Config->getValue({"CleanItem", "Enabled"}, false)) { + auto itac = (ItemActor*)en; + if (itac->age() <= Config->getValue({"CleanItem", "ExistTicks"}, 0)) { return false; } + auto itemType = itac->item().getTypeName(); + auto whitelist = Config->getValue>({"CleanItem", "Whitelist"}, {}); + for (auto& key : whitelist) { + if (isMatch(itemType, key)) { + return false; + } + } return true; } return false; } // Mobs else if (en->isMob()) { - if (true) { // Todo Config Toggle - return true; - if (true) { // Todo WhiteList - return false; + if (Config->getValue({"CleanMobs", "Enabled"}, false)) { + auto blacklist = Config->getValue>({"CleanMobs", "Blacklist"}, {}); + for (auto& key : blacklist) { + if (isMatch(type, key)) { + return true; + } + } + auto whitelist = Config->getValue>({"CleanMobs", "Whitelist"}, {}); + for (auto& key : whitelist) { + if (isMatch(type, key)) { + return false; + } + } + if (Config->getValue({"CleanMobs", "CleanMonstors"}, false) + && en->hasCategory(ActorCategory::Monster)) { + return true; + } + if (Config->getValue({"CleanMobs", "CleanPeacefulMobs"}, false)) { + return true; } - return true; } return false; } // Others else { - if (true) { // Todo Config Toggle - if (true) { // BlackList - return true; + if (Config->getValue({"CleanInanimate", "Enabled"}, false)) { + auto blacklist = Config->getValue>({"CleanInanimate", "Blacklist"}, {}); + for (auto& key : blacklist) { + if (isMatch(type, key)) { + return true; + } } - return false; } return false; } @@ -94,18 +133,22 @@ int CountEntities() { void CleanTask(int time, int announce_time) { auto time_1 = std::chrono::seconds::duration(time); auto time_2 = std::chrono::seconds::duration(time - announce_time); - logger.info("clean will in {}", time_1); - scheduler.add(time_2, [announce_time] { logger.info("clean will in {}", announce_time); }); + logger.info(Language->translate("cleaner.output.count1", {S(time_1.count())})); + scheduler.add(time_2, [announce_time] { + logger.info(Language->translate("cleaner.output.count2", {S(announce_time)})); + }); scheduler.add(time_1, [] { auto count = ExecuteClean(); - logger.info("Successfully cleaned {} entities", count); + logger.info(Language->translate("cleaner.output.finish", {S(count)})); auto_clean_triggerred = false; }); } void AutoCleanTask(int seconds) { auto time = std::chrono::seconds::duration(seconds); - mAutoCleanTask = scheduler.add(time, [] { CleanTask(20, 5); }); + mAutoCleanTask = scheduler.add(time, [] { + CleanTask(Config->getValue({"Basic", "Notice1"}, 20), Config->getValue({"Basic", "Notice2"}, 15)); + }); } void CheckCleanTask(int max_entities, float min_tps) { @@ -114,12 +157,21 @@ void CheckCleanTask(int max_entities, float min_tps) { if (auto_clean_triggerred == false) { if (count >= max_entities) { auto_clean_triggerred = true; - logger.warn("Too many entities! Auto started clean task!"); - CleanTask(20, 5); + logger.warn(Language->translate("cleaner.output.triggerAutoCleanCount", {S(count)})); + CleanTask( + Config->getValue({"Basic", "Notice1"}, 20), + Config->getValue({"Basic", "Notice2"}, 15) + ); } else if (GMLIB_Level::getLevel()->getServerAverageTps() <= min_tps) { auto_clean_triggerred = true; - logger.warn("TPS too low! Auto started clean task!"); - CleanTask(20, 5); + logger.warn(Language->translate( + "cleaner.output.triggerAutoCleanCount", + {S(GMLIB_Level::getLevel()->getServerAverageTps())} + )); + CleanTask( + Config->getValue({"Basic", "Notice1"}, 20), + Config->getValue({"Basic", "Notice2"}, 15) + ); } } }); @@ -158,13 +210,39 @@ void ListenEvents() { ); } -void ReloadCleaner() { +void reloadCleaner() { + unloadCleaner(); + loadCleaner(); +} + +void loadConfig() { + Config = new GMLIB_JsonConfig("./plugins/Cleaner/config/config.json", defaultConfig); + Config->initConfig(); + Language = new GMLIB_JsonLanguage("./plugins/Cleaner/config/language.json", defaultLanguage); + Language->initConfig(); +} + +void loadCleaner() { + ListenEvents(); + RegisterCommands(); + if (Config->getValue({"ScheduleClean", "Enabled"}, false)) { + Cleaner::AutoCleanTask(Config->getValue({"ScheduleClean", "CleanInterval"}, 3000)); + } + if (Config->getValue({"AutoCleanCount", "Enabled"}, false) + || Config->getValue({"AutoCleanTPS", "Enabled"}, false)) { + Cleaner::CheckCleanTask( + Config->getValue({"AutoCleanCount", "TriggerCount"}, 900), + Config->getValue({"AutoCleanTPS", "TriggerTPS"}, 15) + ); + } +} + +void unloadCleaner() { mAutoCleanTask->cancel(); mCheckCleanTask->cancel(); // UnregisterCommands(); - // RegisterCommands(); - Cleaner::AutoCleanTask(600); - Cleaner::CheckCleanTask(15, 8); + delete Config; + delete Language; } } // namespace Cleaner \ No newline at end of file diff --git a/src/Config.h b/src/Config.h new file mode 100644 index 0000000..d641a21 --- /dev/null +++ b/src/Config.h @@ -0,0 +1,134 @@ +#pragma once +#include +#include + +inline std::string defaultConfig = R"({ + "AutoCleanCount": { + "Enabled": true, + "TriggerCount": 900 + }, + "AutoCleanTPS": { + "Enabled": false, + "TriggerTPS": 15 + }, + "Basic": { + "Command": "cleaner", + "ConsoleLog": true, + "Notice1": 20, + "Notice2": 5, + "SendBroadcast": true, + "SendToast": false + }, + "ItemDespawn": { + "Enabled": true, + "DespawnTime": 6000, + "WhiteList": [ + "minecraft:elytra" + ] + }, + "CleanInanimate": { + "Blacklist": [ + "minecraft:xp_orb", + "minecraft:arrow", + "minecraft:fireball", + "minecraft:small_fireball", + "minecraft:wither_skull", + "minecraft:wither_skull_dangerous", + "minecraft:dragon_fireball" + ], + "Enabled": true + }, + "CleanItem": { + "Enabled": true, + "ExistTicks": 0, + "Whitelist": [ + "minecraft:netherite_helmet", + "minecraft:netherite_sword", + "minecraft:netherite_chestplate", + "minecraft:diamond_helmet", + "minecraft:netherite_leggings", + "minecraft:undyed_shulker_box", + "minecraft:netherite_boots", + "minecraft:shulker_box", + "minecraft:elytra", + "minecraft:dragon_egg", + "minecraft:nether_star", + "minecraft:diamond_sword", + "minecraft:diamond_chestplate", + "minecraft:diamond_boots", + "minecraft:diamond_leggings", + "minecraft:diamond_hoe", + "minecraft:netherite_hoe", + "minecraft:diamond_axe", + "minecraft:netherite_axe", + "minecraft:netherite_pickaxe", + "minecraft:diamond_pickaxe" + ] + }, + "CleanMobs": { + "BlackList": [ + "minecraft:guardian", + "minecraft:zombie_pigman" + ], + "CleanMonstors": true, + "CleanPeacefulMobs": false, + "EnableAutoExclude": true, + "Enabled": true, + "IgnoreTags": [ + "ignore", + "不清理" + ], + "Whitelist": [ + "minecraft:ender_dragon", + "minecraft:shulker", + "minecraft:wither", + "minecraft:elder_guardian", + "minecraft:piglin_brute", + "minecraft:ender_pearl", + "minecraft:phantom" + ] + }, + "ScheduleClean": { + "CleanInterval": 3600, + "Enabled": true + }, + "VoteClean": { + "CD": 120, + "Delay": 30, + "Enabled": true, + "Percentage": 50, + "VoteCleanCommand": "voteclean" + } +})"; + +inline std::string defaultLanguage = R"({ + "cleaner.command.cleaner": "Cleaner管理员命令。", + "cleaner.command.despawnSuccess": "已成功清除了 %1$s 个实体", + "cleaner.command.error.noTarget": "没有与选择器匹配的目标", + "cleaner.command.error.playerOnly": "该命令只能由玩家执行!", + "cleaner.command.tps.output": "当前服务器实时TPS %1$s §r,平均TPS %2$s", + "cleaner.command.mspt.output": "当前服务器实MSPT %1$s", + "cleaner.command.voteclean": "发起实体清理投票。", + "cleaner.command.despawntime" : "已成功将物品消失时间设置为 %1$s 游戏刻", + "cleaner.output.count1": "系统将在 %1$s 秒后自动清理服务器实体!", + "cleaner.output.count2": "请注意!系统将在 %1$s 秒后自动清理服务器实体!", + "cleaner.output.finish": "清理完成!本次总共清理了 %1$s 个实体。", + "cleaner.output.opClean": "管理员启用了服务器实体清理。", + "cleaner.output.reload": "已重载Cleaner插件,部分配置可能需要重启服务器才能生效。", + "cleaner.output.triggerAutoCleanCount": "检测到服务器实体过多!!当前服务器存在 %1$s 个可清理实体,已启动自动清理程序。", + "cleaner.output.triggerAutoCleanTps": "当前服务器TPS过低!!服务器平均TPS %1$s\n系统已启动清理程序。", + "cleaner.vote.cooldown": "投票清理冷却...", + "cleaner.vote.cancel": "投票已取消!", + "cleaner.vote.confirmNo": "我再想想", + "cleaner.vote.confirmOk": "发起投票", + "cleaner.vote.confirmTubtitle": "你是否要发起投票清理?", + "cleaner.vote.accept": "你已同意实体清理。", + "cleaner.vote.deny": "你已拒绝实体清理。", + "cleaner.vote.no": "拒绝", + "cleaner.vote.ok": "同意", + "cleaner.vote.Subtitle": "你是否同意现在清理服务器实体?", + "cleaner.vote.Timeout": "投票已过期!", + "cleaner.vote.succeed": "投票清理成功!", + "cleaner.vote.title": "投票清理", + "cleaner.vote.toastNotice": "通知" +})"; \ No newline at end of file diff --git a/src/Global.h b/src/Global.h index 5aa66bb..2b581ce 100644 --- a/src/Global.h +++ b/src/Global.h @@ -1,23 +1,30 @@ #pragma once +#include "Config.h" #include "Plugin.h" #include "include_all.h" #include #include +#include +#include +#define S(x) std::to_string(x) extern ll::Logger logger; extern void RegisterCommands(); extern void UnregisterCommands(); +extern GMLIB_JsonConfig* Config; +extern GMLIB_JsonLanguage* Language; + extern int item_despawn_time; namespace Cleaner { static std::shared_ptr> mAutoCleanTask; static std::shared_ptr> mCheckCleanTask; -extern void CleanTask(int time, int announce_time); -extern void AutoCleanTask(int seconds); -extern void CheckCleanTask(int max_entities, float min_tps); -extern void ReloadCleaner(); -extern void ListenEvents(); +extern void loadConfig(); +extern void loadCleaner(); +extern void unloadCleaner(); +extern void reloadCleaner(); +extern void CleanTask(int time, int announce_time); } // namespace Cleaner \ No newline at end of file diff --git a/src/Plugin.cpp b/src/Plugin.cpp index 2bd7b33..97ef89f 100644 --- a/src/Plugin.cpp +++ b/src/Plugin.cpp @@ -6,13 +6,11 @@ namespace plugin { Plugin::Plugin(ll::plugin::NativePlugin& self) : mSelf(self) { // Code for loading the plugin goes here. + Cleaner::loadConfig(); } bool Plugin::enable() { - Cleaner::ListenEvents(); - RegisterCommands(); - Cleaner::AutoCleanTask(300); - Cleaner::CheckCleanTask(20, 15); + Cleaner::loadCleaner(); logger.info("Cleaner Loaded!"); logger.info("Author: Tsubasa6848"); logger.info("Repository: https://github.com/GroupMountain/Cleaner"); @@ -20,11 +18,8 @@ bool Plugin::enable() { } bool Plugin::disable() { - logger.info("Disabling Cleaner..."); // Code for disabling the plugin goes here. - Cleaner::mAutoCleanTask->cancel(); - Cleaner::mCheckCleanTask->cancel(); - UnregisterCommands(); + Cleaner::unloadCleaner(); logger.info("Cleaner Disabled!"); return true; } diff --git a/src/RegisterCommand.cpp b/src/RegisterCommand.cpp index 554e5c9..aa97427 100644 --- a/src/RegisterCommand.cpp +++ b/src/RegisterCommand.cpp @@ -17,8 +17,8 @@ void RegVoteCommand(CommandRegistry& registry) { void RegCleanerCommand(CommandRegistry& registry) { auto command = DynamicCommand::createCommand( registry, - "cleaner", - "Cleaner plugin settings", + Config->getValue({"Basic", "Command"}, "cleaner"), + Language->translate("cleaner.command.cleaner"), CommandPermissionLevel::GameDirectors ); command->setEnum("Despawn", {"despawn"}); @@ -40,53 +40,43 @@ void RegCleanerCommand(CommandRegistry& registry) { if (result["despawn"].isSet && result["target"].isSet) { auto ens = result["target"].get>(); if (ens.size() == 0) { - return output.error("No matched targets found!"); + return output.error(Language->translate("cleaner.command.error.noTarget")); } for (auto en : ens) { en->despawn(); } - return output.success("Successfully despawned {} entities", ens.size()); + return output.success(Language->translate("cleaner.command.despawnSuccess", {S(ens.size())})); } else if (result["action"].isSet) { auto act = result["action"].get(); if (act == "tps") { - return output.success( - "current tps {}, average tps {}", - GMLIB_Level::getLevel()->getServerCurrentTps(), - GMLIB_Level::getLevel()->getServerAverageTps() - ); + return output.success(Language->translate( + "cleaner.command.tps.output", + {S(GMLIB_Level::getLevel()->getServerCurrentTps()), + S(GMLIB_Level::getLevel()->getServerAverageTps())} + )); } else if (act == "mspt") { - return output.success("mspt {}", GMLIB_Level::getLevel()->getServerMspt()); + return output.success( + Language->translate("cleaner.command.mspt.output", {S(GMLIB_Level::getLevel()->getServerMspt())}) + ); } else if (act == "clean") { - output.success("Clean task started!"); - Cleaner::CleanTask(20, 5); // Config + output.success(Language->translate("cleaner.output.opClean")); + Cleaner::CleanTask( + Config->getValue({"Basic", "Notice1"}, 20), + Config->getValue({"Basic", "Notice2"}, 15) + ); // Config return; } else if (act == "reload") { - output.success("Reloading Cleaner ..."); - Cleaner::ReloadCleaner(); - return output.success("Cleaner Reloaded!"); + Cleaner::reloadCleaner(); + return output.success(Language->translate("cleaner.output.reload")); } } else if (result["despawntime"].isSet && result["ticks"].isSet) { item_despawn_time = result["ticks"].get(); - return output.success("Successfully set deapawn time to {}", item_despawn_time); + return output.success(Language->translate("cleaner.command.despawntime", {S(item_despawn_time)})); } }); DynamicCommand::setup(registry, std::move(command)); } -void RegDespawnCommand(CommandRegistry& registry) { - auto command = DynamicCommand::createCommand(registry, "despawn", "despawn entities", CommandPermissionLevel::Any); - command->mandatory("target", ParamType::Actor); - command->addOverload({"target"}); - command->addOverload(); - command->setCallback([](DynamicCommand const& cmd, - CommandOrigin const& origin, - CommandOutput& output, - std::unordered_map& result) { - - }); - DynamicCommand::setup(registry, std::move(command)); -} - void RegisterCommands() { auto registry = ll::service::bedrock::getCommandRegistry(); RegCleanerCommand(registry); @@ -95,6 +85,6 @@ void RegisterCommands() { void UnregisterCommands() { auto registry = ll::service::bedrock::getCommandRegistry(); - registry->unregisterCommand("cleaner"); - registry->unregisterCommand("voteclean"); + registry->unregisterCommand(Config->getValue({"Basic", "Command"}, "cleaner")); + // registry->unregisterCommand("voteclean"); } \ No newline at end of file diff --git a/src/include_all.h b/src/include_all.h index 906e4cf..fe45bfe 100644 --- a/src/include_all.h +++ b/src/include_all.h @@ -1,31 +1,28 @@ -// This file included all levilamina api and mcapi. -// This file is automatically generated by GroupMountain Tool Chain. -// Do not edit by hand. +// This file included all levilamina api and mcapi. +// This file is automatically generated by GroupMountain Tool Chain. +// Do not edit by hand. #pragma once -// #include +#include +#include #include -// #include -#include #include -#include -#include +#include #include -#include -#include #include #include #include -#include #include #include #include -#include -// #include #include #include #include +#include +#include +#include #include +#include #include #include #include @@ -41,7 +38,7 @@ #include #include #include -// #include +#include #include #include #include @@ -75,17 +72,17 @@ #include #include #include -// #include -// #include +#include +#include #include #include #include #include #include #include -// #include +#include #include -// #include +#include #include #include #include @@ -99,6 +96,7 @@ #include #include #include +#include #include #include #include @@ -108,9 +106,13 @@ #include #include #include +#include #include +#include +#include +#include #include -// #include +#include #include #include #include @@ -126,33 +128,33 @@ #include #include #include +#include #include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include +#include #include #include #include #include -#include #include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include #include #include #include #include -#include -#include -#include -#include #include #include #include @@ -163,19 +165,20 @@ #include #include #include -#include -#include -#include -#include #include #include +#include +#include #include #include +#include +#include #include #include #include #include #include +#include #include #include #include @@ -200,13 +203,12 @@ #include #include #include -#include #include +#include #include #include #include #include -#include #include #include #include @@ -251,11 +253,12 @@ #include #include #include -#include #include #include +#include #include #include +#include #include #include #include @@ -263,20 +266,22 @@ #include #include #include +#include #include #include #include #include #include #include +#include +#include #include +#include #include #include #include -#include -#include -#include #include +#include #include #include #include @@ -303,9 +308,6 @@ #include #include #include -#include -#include -#include #include #include #include @@ -327,19 +329,21 @@ #include #include #include +#include #include #include #include #include #include +#include #include #include #include #include #include #include -#include #include +#include #include #include #include @@ -348,13 +352,11 @@ #include #include #include -#include #include #include #include #include -#include -#include +#include #include #include #include @@ -383,6 +385,7 @@ #include #include #include +#include #include #include #include @@ -406,7 +409,6 @@ #include #include #include -#include #include #include #include @@ -416,6 +418,7 @@ #include #include #include +#include #include #include #include @@ -425,7 +428,6 @@ #include #include #include -#include #include #include #include @@ -479,8 +481,8 @@ #include #include #include -#include #include +#include #include #include #include @@ -517,10 +519,10 @@ #include #include #include -#include #include #include #include +#include #include #include #include @@ -530,9 +532,9 @@ #include #include #include -#include #include #include +#include #include #include #include @@ -563,25 +565,26 @@ #include #include #include -#include -#include -#include #include #include #include #include #include #include +#include +#include +#include #include #include #include #include #include +#include #include #include -#include #include #include +#include #include #include #include @@ -595,10 +598,8 @@ #include #include #include -#include #include -#include -#include +#include #include #include #include @@ -607,9 +608,11 @@ #include #include #include +#include #include #include #include +#include #include #include #include @@ -631,11 +634,12 @@ #include #include #include +#include #include #include #include -#include #include +#include #include #include #include @@ -648,9 +652,8 @@ #include #include #include -#include -#include #include +#include #include #include #include @@ -665,7 +668,6 @@ #include #include #include -#include #include #include #include @@ -714,10 +716,10 @@ #include #include #include +#include #include #include #include -#include #include #include #include @@ -777,6 +779,8 @@ #include #include #include +#include +#include #include #include #include @@ -824,14 +828,12 @@ #include #include #include -#include -#include -#include #include +#include #include #include #include -// #include +#include #include #include #include @@ -839,12 +841,12 @@ #include #include #include -#include #include #include +#include #include -#include #include +#include #include #include #include @@ -885,11 +887,12 @@ #include #include #include +#include #include #include +#include #include #include -#include #include #include #include @@ -900,7 +903,6 @@ #include #include #include -#include #include #include #include @@ -914,8 +916,8 @@ #include #include #include -#include #include +#include #include #include #include @@ -938,36 +940,27 @@ #include #include #include -#include #include +#include #include -#include #include +#include #include -#include #include #include #include +#include #include #include #include -#include #include #include +#include #include #include #include #include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include #include #include @@ -982,6 +975,15 @@ #include #include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include #include #include @@ -992,6 +994,7 @@ #include #include #include +#include #include #include #include @@ -999,14 +1002,13 @@ #include #include #include -#include #include +#include #include +#include #include #include #include -#include -#include #include #include #include @@ -1058,9 +1060,9 @@ #include #include #include -#include #include #include +#include #include #include #include @@ -1074,9 +1076,9 @@ #include #include #include -#include #include #include +#include #include #include #include @@ -1163,9 +1165,9 @@ #include #include #include -#include #include #include +#include #include #include #include @@ -1193,8 +1195,6 @@ #include #include #include -#include -#include #include #include #include @@ -1210,6 +1210,8 @@ #include #include #include +#include +#include #include #include #include @@ -1235,8 +1237,8 @@ #include #include #include -#include #include +#include #include #include #include @@ -1253,13 +1255,13 @@ #include #include #include -#include #include #include #include -#include +#include #include #include +#include #include #include #include @@ -1274,9 +1276,9 @@ #include #include #include +#include #include #include -#include #include #include #include @@ -1285,8 +1287,8 @@ #include #include #include -#include #include +#include #include #include #include @@ -1397,7 +1399,6 @@ #include #include #include -#include #include #include #include @@ -1406,6 +1407,7 @@ #include #include #include +#include #include #include #include @@ -1476,11 +1478,11 @@ #include #include #include -#include #include +#include #include -#include #include +#include #include #include #include @@ -1560,8 +1562,8 @@ #include #include #include -#include #include +#include #include #include #include @@ -1577,8 +1579,8 @@ #include #include #include -#include #include +#include #include #include #include @@ -1678,12 +1680,9 @@ #include #include #include -#include -#include #include -#include -#include #include +#include #include #include #include @@ -1697,7 +1696,10 @@ #include #include #include +#include +#include #include +#include #include #include #include @@ -1724,10 +1726,10 @@ #include #include #include -#include #include #include #include +#include #include #include #include @@ -1745,8 +1747,8 @@ #include #include #include -#include #include +#include #include #include #include @@ -1786,13 +1788,13 @@ #include #include #include -#include #include +#include #include #include #include -#include #include +#include #include #include #include @@ -1855,8 +1857,8 @@ #include #include #include -#include #include +#include #include #include #include @@ -1878,8 +1880,8 @@ #include #include #include -#include #include +#include #include #include #include @@ -1926,24 +1928,24 @@ #include #include #include +#include #include #include #include -#include #include -#include -#include #include #include #include -#include #include +#include #include #include #include #include #include #include +#include +#include #include #include #include @@ -2010,9 +2012,6 @@ #include #include #include -#include -#include -#include #include #include #include @@ -2024,6 +2023,9 @@ #include #include #include +#include +#include +#include #include #include #include @@ -2094,7 +2096,6 @@ #include #include #include -#include #include #include #include @@ -2113,6 +2114,7 @@ #include #include #include +#include #include #include #include @@ -2123,7 +2125,6 @@ #include #include #include -#include #include #include #include @@ -2172,10 +2173,10 @@ #include #include #include +#include #include #include #include -#include #include #include #include @@ -2251,7 +2252,6 @@ #include #include #include -#include #include #include #include @@ -2262,6 +2262,7 @@ #include #include #include +#include #include #include #include @@ -2273,11 +2274,11 @@ #include #include #include -#include #include +#include #include -#include #include +#include #include #include #include @@ -2318,8 +2319,8 @@ #include #include #include -#include #include +#include #include #include #include @@ -2347,14 +2348,14 @@ #include #include #include -#include -#include #include #include #include #include #include #include +#include +#include #include #include #include @@ -2409,8 +2410,8 @@ #include #include #include -#include #include +#include #include #include #include @@ -2422,12 +2423,12 @@ #include #include #include -#include #include #include #include #include #include +#include #include #include #include @@ -2455,6 +2456,10 @@ #include #include #include +#include +#include +#include +#include #include #include #include @@ -2462,11 +2467,8 @@ #include #include #include -#include -#include -#include -#include #include +#include #include #include #include @@ -2518,6 +2520,8 @@ #include #include #include +#include +#include #include #include #include @@ -2533,23 +2537,21 @@ #include #include #include -#include -#include #include #include #include #include #include #include -#include #include #include +#include #include #include #include #include -#include #include +#include #include #include #include @@ -2565,7 +2567,6 @@ #include #include #include -#include #include #include #include @@ -2614,6 +2615,7 @@ #include #include #include +#include #include #include #include @@ -2638,9 +2640,8 @@ #include #include #include -#include -#include #include +#include #include #include #include @@ -2663,19 +2664,19 @@ #include #include #include -#include #include +#include +#include +#include +#include +#include #include #include #include #include #include -#include #include -#include -#include -#include -#include +#include #include #include #include @@ -2727,6 +2728,8 @@ #include #include #include +#include +#include #include #include #include @@ -2775,8 +2778,8 @@ #include #include #include -#include #include +#include #include #include #include @@ -2788,8 +2791,6 @@ #include #include #include -#include -#include #include #include #include @@ -2829,12 +2830,12 @@ #include #include #include +#include +#include #include #include #include #include -#include -#include #include #include #include @@ -2856,8 +2857,8 @@ #include #include #include -#include #include +#include #include #include #include @@ -2915,15 +2916,13 @@ #include #include #include -#include #include #include #include +#include #include #include #include -#include -#include #include #include #include @@ -2936,6 +2935,8 @@ #include #include #include +#include +#include #include #include #include @@ -2953,11 +2954,11 @@ #include #include #include -#include #include +#include #include -#include #include +#include #include #include #include @@ -2977,12 +2978,12 @@ #include #include #include -#include #include +#include #include #include -#include #include +#include #include #include #include @@ -3002,8 +3003,8 @@ #include #include #include -#include #include +#include #include #include #include @@ -3024,8 +3025,8 @@ #include #include #include -#include #include +#include #include #include #include @@ -3067,9 +3068,9 @@ #include #include #include -#include #include #include +#include #include #include #include @@ -3082,6 +3083,12 @@ #include #include #include +#include +#include +#include +#include +#include +#include #include #include #include @@ -3101,17 +3108,11 @@ #include #include #include -#include -#include -#include -#include -#include -#include #include #include +#include #include #include -#include #include #include #include @@ -3186,6 +3187,7 @@ #include #include #include +#include #include #include #include @@ -3197,7 +3199,6 @@ #include #include #include -#include #include #include #include @@ -3263,8 +3264,8 @@ #include #include #include -#include #include +#include #include #include #include @@ -3312,8 +3313,8 @@ #include #include #include -#include #include +#include #include #include #include @@ -3373,13 +3374,14 @@ #include #include #include +#include #include #include #include -#include #include #include #include +#include #include #include #include @@ -3390,7 +3392,6 @@ #include #include #include -#include #include #include #include @@ -3478,17 +3479,16 @@ #include #include #include -#include -#include #include #include #include #include +#include +#include #include #include #include #include -#include #include #include #include @@ -3497,13 +3497,14 @@ #include #include #include +#include #include #include #include #include #include -#include #include +#include #include #include #include @@ -3785,8 +3786,8 @@ #include #include #include -#include #include +#include #include #include #include @@ -3875,8 +3876,8 @@ #include #include #include -#include #include +#include #include #include #include @@ -3927,8 +3928,8 @@ #include #include #include -#include #include +#include #include #include #include @@ -3964,9 +3965,9 @@ #include #include #include +#include #include #include -#include #include #include #include @@ -3999,8 +4000,8 @@ #include #include #include -#include #include +#include #include #include #include @@ -4036,6 +4037,7 @@ #include #include #include +#include #include #include #include @@ -4043,7 +4045,6 @@ #include #include #include -#include #include #include #include @@ -4144,8 +4145,8 @@ #include #include #include -#include #include +#include #include #include #include @@ -4280,11 +4281,11 @@ #include #include #include +#include +#include #include #include #include -#include -#include #include #include #include @@ -4324,7 +4325,6 @@ #include #include #include -#include #include #include #include @@ -4332,6 +4332,7 @@ #include #include #include +#include #include #include #include @@ -4345,11 +4346,11 @@ #include #include #include -#include #include +#include #include -#include #include +#include #include #include #include @@ -4650,7 +4651,6 @@ #include #include #include -#include #include #include #include @@ -4663,6 +4663,7 @@ #include #include #include +#include #include #include #include @@ -4695,9 +4696,9 @@ #include #include #include -#include #include #include +#include #include #include #include @@ -4708,8 +4709,8 @@ #include #include #include -#include #include +#include #include #include #include @@ -4736,8 +4737,8 @@ #include #include #include -#include #include +#include #include #include #include @@ -4765,10 +4766,11 @@ #include #include #include -#include +#include #include #include #include +#include #include #include #include @@ -4776,16 +4778,15 @@ #include #include #include -#include #include #include #include #include #include #include +#include #include #include -#include #include #include #include @@ -5047,8 +5048,8 @@ #include #include #include -#include #include +#include #include #include #include @@ -5138,11 +5139,11 @@ #include #include #include -#include #include #include #include #include +#include #include #include #include @@ -5186,6 +5187,7 @@ #include #include #include +#include #include #include #include @@ -5193,12 +5195,11 @@ #include #include #include +#include #include #include #include #include -#include -#include #include #include #include @@ -5375,10 +5376,10 @@ #include #include #include -#include #include #include #include +#include #include #include #include @@ -5547,9 +5548,9 @@ #include #include #include +#include #include #include -#include #include #include #include @@ -5601,9 +5602,9 @@ #include #include #include +#include #include #include -#include #include #include #include @@ -5639,8 +5640,8 @@ #include #include #include -#include #include +#include #include #include #include @@ -5678,8 +5679,8 @@ #include #include #include -#include #include +#include #include #include #include @@ -5695,10 +5696,10 @@ #include #include #include +#include #include #include #include -#include #include #include #include @@ -5786,9 +5787,9 @@ #include #include #include -#include #include #include +#include #include #include #include @@ -5846,9 +5847,9 @@ #include #include #include +#include #include #include -#include #include #include #include @@ -5877,22 +5878,23 @@ #include #include #include -#include #include #include +#include #include #include #include #include -#include #include +#include #include #include #include #include +#include #include -#include #include +#include #include #include #include @@ -5927,7 +5929,6 @@ #include #include #include -#include #include #include #include @@ -6031,12 +6032,12 @@ #include #include #include +#include #include #include #include #include #include -#include #include #include #include @@ -6099,10 +6100,10 @@ #include #include #include +#include #include #include #include -#include #include #include #include @@ -6129,11 +6130,11 @@ #include #include #include -#include -#include #include #include +#include #include +#include #include #include #include @@ -6152,9 +6153,9 @@ #include #include #include +#include #include #include -#include #include #include #include @@ -6180,11 +6181,11 @@ #include #include #include +#include #include #include #include #include -#include #include #include #include @@ -6253,9 +6254,9 @@ #include #include #include +#include #include #include -#include #include #include #include @@ -6383,8 +6384,8 @@ #include #include #include -#include #include +#include #include #include #include @@ -6393,16 +6394,16 @@ #include #include #include -#include #include +#include #include #include #include #include #include #include -#include #include +#include #include #include #include @@ -6469,10 +6470,10 @@ #include #include #include -#include -#include #include +#include #include +#include #include #include #include @@ -6514,12 +6515,12 @@ #include #include #include +#include #include #include #include #include #include -#include #include #include #include @@ -6554,6 +6555,8 @@ #include #include #include +#include +#include #include #include #include @@ -6561,8 +6564,6 @@ #include #include #include -#include -#include #include #include #include @@ -6685,11 +6686,11 @@ #include #include #include -#include -#include +#include #include #include -#include +#include +#include #include #include #include @@ -6725,8 +6726,8 @@ #include #include #include -#include #include +#include #include #include #include @@ -6878,9 +6879,14 @@ #include #include #include +#include +#include #include #include #include +#include +#include +#include #include #include #include @@ -6891,11 +6897,6 @@ #include #include #include -#include -#include -#include -#include -#include #include #include #include @@ -6990,8 +6991,8 @@ #include #include #include -#include #include +#include #include #include #include @@ -7065,8 +7066,8 @@ #include #include #include -#include #include +#include #include #include #include @@ -7097,8 +7098,8 @@ #include #include #include -#include #include +#include #include #include #include @@ -7120,9 +7121,9 @@ #include #include #include +#include #include #include -#include #include #include #include @@ -7157,8 +7158,8 @@ #include #include #include -#include #include +#include #include #include #include @@ -7220,11 +7221,11 @@ #include #include #include -#include -#include #include #include #include +#include +#include #include #include #include