From 30e1b8aaa58f96e7dcbec606b48555dcb7bbec9a Mon Sep 17 00:00:00 2001
From: Evennia docbuilder action In your game folder Installation¶
commands/default_cmdsets.py, import and add
-ContribCmdCharCreate to your AccountCmdSet.ContribChargenCmdSet to your AccountCmdSet.
Example:
-from evennia.contrib.rpg.character_creator.character_creator import ContribCmdCharCreate
+from evennia.contrib.rpg.character_creator.character_creator import ContribChargenCmdSet
class AccountCmdSet(default_cmds.AccountCmdSet):
def at_cmdset_creation(self):
super().at_cmdset_creation()
- self.add(ContribCmdCharCreate)
+ self.add(ContribChargenCmdSet)
In your game folder typeclasses/accounts.py, import and inherit from ContribChargenAccount
diff --git a/docs/latest/_modules/evennia/contrib/rpg/character_creator/character_creator.html b/docs/latest/_modules/evennia/contrib/rpg/character_creator/character_creator.html
index 9f01af7d5f..3aefe112c5 100644
--- a/docs/latest/_modules/evennia/contrib/rpg/character_creator/character_creator.html
+++ b/docs/latest/_modules/evennia/contrib/rpg/character_creator/character_creator.html
@@ -115,9 +115,11 @@
from evennia import DefaultAccount
from evennia.commands.default.muxcommand import MuxAccountCommand
+from evennia.commands.default.account import CmdIC
+from evennia.commands.cmdset import CmdSet
from evennia.objects.models import ObjectDB
from evennia.utils.evmenu import EvMenu
-from evennia.utils.utils import is_iter
+from evennia.utils.utils import is_iter, string_partial_matching
_MAX_NR_CHARACTERS = settings.MAX_NR_CHARACTERS
@@ -127,6 +129,17 @@
_CHARGEN_MENU = "evennia.contrib.rpg.character_creator.example_menu"
+
[docs]class ContribCmdIC(CmdIC):
+[docs] def func(self):
+ if self.args:
+ # check if the args match an in-progress character
+ wips = [chara for chara in self.account.characters if chara.db.chargen_step]
+ if matches := string_partial_matching([c.key for c in wips], self.args):
+ # the character is in progress, resume creation
+ return self.execute_cmd("charcreate")
+ super().func()
+
+
[docs]class ContribCmdCharCreate(MuxAccountCommand):
"""
create a new character
@@ -179,15 +192,24 @@
char = session.new_char
if char.db.chargen_step:
# this means the character creation process was exited in the middle
- account.execute_cmd("look")
+ account.execute_cmd("look", session=session)
else:
# this means character creation was completed - start playing!
# execute the ic command to start puppeting the character
- account.execute_cmd("ic {}".format(char.key))
+ account.execute_cmd("ic {}".format(char.key), session=session)
EvMenu(session, _CHARGEN_MENU, startnode=startnode, cmd_on_exit=finish_char_callback)search_index_entry = {'aliases': 'batchcmd batchcommand', 'category': 'building', 'key': 'batchcommands', 'no_prefix': ' batchcmd batchcommand', 'tags': '', 'text': '\n build from batch-command file\n\n Usage:\n batchcommands[/interactive] <python.path.to.file>\n\n Switch:\n interactive - this mode will offer more control when\n executing the batch file, like stepping,\n skipping, reloading etc.\n\n Runs batches of commands from a batch-cmd text file (*.ev).\n\n '}¶search_index_entry = {'aliases': 'batchcommand batchcmd', 'category': 'building', 'key': 'batchcommands', 'no_prefix': ' batchcommand batchcmd', 'tags': '', 'text': '\n build from batch-command file\n\n Usage:\n batchcommands[/interactive] <python.path.to.file>\n\n Switch:\n interactive - this mode will offer more control when\n executing the batch file, like stepping,\n skipping, reloading etc.\n\n Runs batches of commands from a batch-cmd text file (*.ev).\n\n '}¶
aliases = ['@update', '@typeclasses', '@type', '@parent', '@swap']¶aliases = ['@update', '@typeclasses', '@parent', '@type', '@swap']¶
search_index_entry = {'aliases': '@update @typeclasses @type @parent @swap', 'category': 'building', 'key': '@typeclass', 'no_prefix': 'typeclass update typeclasses type parent swap', 'tags': '', 'text': "\n set or change an object's typeclass\n\n Usage:\n typeclass[/switch] <object> [= typeclass.path]\n typeclass/prototype <object> = prototype_key\n\n typeclasses or typeclass/list/show [typeclass.path]\n swap - this is a shorthand for using /force/reset flags.\n update - this is a shorthand for using the /force/reload flag.\n\n Switch:\n show, examine - display the current typeclass of object (default) or, if\n given a typeclass path, show the docstring of that typeclass.\n update - *only* re-run at_object_creation on this object\n meaning locks or other properties set later may remain.\n reset - clean out *all* the attributes and properties on the\n object - basically making this a new clean object. This will also\n reset cmdsets!\n force - change to the typeclass also if the object\n already has a typeclass of the same name.\n list - show available typeclasses. Only typeclasses in modules actually\n imported or used from somewhere in the code will show up here\n (those typeclasses are still available if you know the path)\n prototype - clean and overwrite the object with the specified\n prototype key - effectively making a whole new object.\n\n Example:\n type button = examples.red_button.RedButton\n type/prototype button=a red button\n\n If the typeclass_path is not given, the current object's typeclass is\n assumed.\n\n View or set an object's typeclass. If setting, the creation hooks of the\n new typeclass will be run on the object. If you have clashing properties on\n the old class, use /reset. By default you are protected from changing to a\n typeclass of the same name as the one you already have - use /force to\n override this protection.\n\n The given typeclass must be identified by its location using python\n dot-notation pointing to the correct module and class. If no typeclass is\n given (or a wrong typeclass is given). Errors in the path or new typeclass\n will lead to the old typeclass being kept. The location of the typeclass\n module is searched from the default typeclass directory, as defined in the\n server settings.\n\n "}¶search_index_entry = {'aliases': '@update @typeclasses @parent @type @swap', 'category': 'building', 'key': '@typeclass', 'no_prefix': 'typeclass update typeclasses parent type swap', 'tags': '', 'text': "\n set or change an object's typeclass\n\n Usage:\n typeclass[/switch] <object> [= typeclass.path]\n typeclass/prototype <object> = prototype_key\n\n typeclasses or typeclass/list/show [typeclass.path]\n swap - this is a shorthand for using /force/reset flags.\n update - this is a shorthand for using the /force/reload flag.\n\n Switch:\n show, examine - display the current typeclass of object (default) or, if\n given a typeclass path, show the docstring of that typeclass.\n update - *only* re-run at_object_creation on this object\n meaning locks or other properties set later may remain.\n reset - clean out *all* the attributes and properties on the\n object - basically making this a new clean object. This will also\n reset cmdsets!\n force - change to the typeclass also if the object\n already has a typeclass of the same name.\n list - show available typeclasses. Only typeclasses in modules actually\n imported or used from somewhere in the code will show up here\n (those typeclasses are still available if you know the path)\n prototype - clean and overwrite the object with the specified\n prototype key - effectively making a whole new object.\n\n Example:\n type button = examples.red_button.RedButton\n type/prototype button=a red button\n\n If the typeclass_path is not given, the current object's typeclass is\n assumed.\n\n View or set an object's typeclass. If setting, the creation hooks of the\n new typeclass will be run on the object. If you have clashing properties on\n the old class, use /reset. By default you are protected from changing to a\n typeclass of the same name as the one you already have - use /force to\n override this protection.\n\n The given typeclass must be identified by its location using python\n dot-notation pointing to the correct module and class. If no typeclass is\n given (or a wrong typeclass is given). Errors in the path or new typeclass\n will lead to the old typeclass being kept. The location of the typeclass\n module is searched from the default typeclass directory, as defined in the\n server settings.\n\n "}¶
search_index_entry = {'aliases': '@locate @search', 'category': 'building', 'key': '@find', 'no_prefix': 'find locate search', 'tags': '', 'text': '\n search the database for objects\n\n Usage:\n find[/switches] <name or dbref or *account> [= dbrefmin[-dbrefmax]]\n locate - this is a shorthand for using the /loc switch.\n\n Switches:\n room - only look for rooms (location=None)\n exit - only look for exits (destination!=None)\n char - only look for characters (BASE_CHARACTER_TYPECLASS)\n exact - only exact matches are returned.\n loc - display object location if exists and match has one result\n startswith - search for names starting with the string, rather than containing\n\n Searches the database for an object of a particular name or exact #dbref.\n Use *accountname to search for an account. The switches allows for\n limiting object matches to certain game entities. Dbrefmin and dbrefmax\n limits matches to within the given dbrefs range, or above/below if only\n one is given.\n '}¶search_index_entry = {'aliases': '@search @locate', 'category': 'building', 'key': '@find', 'no_prefix': 'find search locate', 'tags': '', 'text': '\n search the database for objects\n\n Usage:\n find[/switches] <name or dbref or *account> [= dbrefmin[-dbrefmax]]\n locate - this is a shorthand for using the /loc switch.\n\n Switches:\n room - only look for rooms (location=None)\n exit - only look for exits (destination!=None)\n char - only look for characters (BASE_CHARACTER_TYPECLASS)\n exact - only exact matches are returned.\n loc - display object location if exists and match has one result\n startswith - search for names starting with the string, rather than containing\n\n Searches the database for an object of a particular name or exact #dbref.\n Use *accountname to search for an account. The switches allows for\n limiting object matches to certain game entities. Dbrefmin and dbrefmax\n limits matches to within the given dbrefs range, or above/below if only\n one is given.\n '}¶
search_index_entry = {'aliases': '@channels @chan', 'category': 'comms', 'key': '@channel', 'no_prefix': 'channel channels chan', 'tags': '', 'text': "\n Use and manage in-game channels.\n\n Usage:\n channel channelname <msg>\n channel channel name = <msg>\n channel (show all subscription)\n channel/all (show available channels)\n channel/alias channelname = alias[;alias...]\n channel/unalias alias\n channel/who channelname\n channel/history channelname [= index]\n channel/sub channelname [= alias[;alias...]]\n channel/unsub channelname[,channelname, ...]\n channel/mute channelname[,channelname,...]\n channel/unmute channelname[,channelname,...]\n\n channel/create channelname[;alias;alias[:typeclass]] [= description]\n channel/destroy channelname [= reason]\n channel/desc channelname = description\n channel/lock channelname = lockstring\n channel/unlock channelname = lockstring\n channel/ban channelname (list bans)\n channel/ban[/quiet] channelname[, channelname, ...] = subscribername [: reason]\n channel/unban[/quiet] channelname[, channelname, ...] = subscribername\n channel/boot[/quiet] channelname[,channelname,...] = subscribername [: reason]\n\n # subtopics\n\n ## sending\n\n Usage: channel channelname msg\n channel channel name = msg (with space in channel name)\n\n This sends a message to the channel. Note that you will rarely use this\n command like this; instead you can use the alias\n\n channelname <msg>\n channelalias <msg>\n\n For example\n\n public Hello World\n pub Hello World\n\n (this shortcut doesn't work for aliases containing spaces)\n\n See channel/alias for help on setting channel aliases.\n\n ## alias and unalias\n\n Usage: channel/alias channel = alias[;alias[;alias...]]\n channel/unalias alias\n channel - this will list your subs and aliases to each channel\n\n Set one or more personal aliases for referencing a channel. For example:\n\n channel/alias warrior's guild = warrior;wguild;warchannel;warrior guild\n\n You can now send to the channel using all of these:\n\n warrior's guild Hello\n warrior Hello\n wguild Hello\n warchannel Hello\n\n Note that this will not work if the alias has a space in it. So the\n 'warrior guild' alias must be used with the `channel` command:\n\n channel warrior guild = Hello\n\n Channel-aliases can be removed one at a time, using the '/unalias' switch.\n\n ## who\n\n Usage: channel/who channelname\n\n List the channel's subscribers. Shows who are currently offline or are\n muting the channel. Subscribers who are 'muting' will not see messages sent\n to the channel (use channel/mute to mute a channel).\n\n ## history\n\n Usage: channel/history channel [= index]\n\n This will display the last |c20|n lines of channel history. By supplying an\n index number, you will step that many lines back before viewing those 20 lines.\n\n For example:\n\n channel/history public = 35\n\n will go back 35 lines and show the previous 20 lines from that point (so\n lines -35 to -55).\n\n ## sub and unsub\n\n Usage: channel/sub channel [=alias[;alias;...]]\n channel/unsub channel\n\n This subscribes you to a channel and optionally assigns personal shortcuts\n for you to use to send to that channel (see aliases). When you unsub, all\n your personal aliases will also be removed.\n\n ## mute and unmute\n\n Usage: channel/mute channelname\n channel/unmute channelname\n\n Muting silences all output from the channel without actually\n un-subscribing. Other channel members will see that you are muted in the /who\n list. Sending a message to the channel will automatically unmute you.\n\n ## create and destroy\n\n Usage: channel/create channelname[;alias;alias[:typeclass]] [= description]\n channel/destroy channelname [= reason]\n\n Creates a new channel (or destroys one you control). You will automatically\n join the channel you create and everyone will be kicked and loose all aliases\n to a destroyed channel.\n\n ## lock and unlock\n\n Usage: channel/lock channelname = lockstring\n channel/unlock channelname = lockstring\n\n Note: this is an admin command.\n\n A lockstring is on the form locktype:lockfunc(). Channels understand three\n locktypes:\n listen - who may listen or join the channel.\n send - who may send messages to the channel\n control - who controls the channel. This is usually the one creating\n the channel.\n\n Common lockfuncs are all() and perm(). To make a channel everyone can\n listen to but only builders can talk on, use this:\n\n listen:all()\n send: perm(Builders)\n\n ## boot and ban\n\n Usage:\n channel/boot[/quiet] channelname[,channelname,...] = subscribername [: reason]\n channel/ban channelname[, channelname, ...] = subscribername [: reason]\n channel/unban channelname[, channelname, ...] = subscribername\n channel/unban channelname\n channel/ban channelname (list bans)\n\n Booting will kick a named subscriber from channel(s) temporarily. The\n 'reason' will be passed to the booted user. Unless the /quiet switch is\n used, the channel will also be informed of the action. A booted user is\n still able to re-connect, but they'll have to set up their aliases again.\n\n Banning will blacklist a user from (re)joining the provided channels. It\n will then proceed to boot them from those channels if they were connected.\n The 'reason' and `/quiet` works the same as for booting.\n\n Example:\n boot mychannel1 = EvilUser : Kicking you to cool down a bit.\n ban mychannel1,mychannel2= EvilUser : Was banned for spamming.\n\n "}¶search_index_entry = {'aliases': '@chan @channels', 'category': 'comms', 'key': '@channel', 'no_prefix': 'channel chan channels', 'tags': '', 'text': "\n Use and manage in-game channels.\n\n Usage:\n channel channelname <msg>\n channel channel name = <msg>\n channel (show all subscription)\n channel/all (show available channels)\n channel/alias channelname = alias[;alias...]\n channel/unalias alias\n channel/who channelname\n channel/history channelname [= index]\n channel/sub channelname [= alias[;alias...]]\n channel/unsub channelname[,channelname, ...]\n channel/mute channelname[,channelname,...]\n channel/unmute channelname[,channelname,...]\n\n channel/create channelname[;alias;alias[:typeclass]] [= description]\n channel/destroy channelname [= reason]\n channel/desc channelname = description\n channel/lock channelname = lockstring\n channel/unlock channelname = lockstring\n channel/ban channelname (list bans)\n channel/ban[/quiet] channelname[, channelname, ...] = subscribername [: reason]\n channel/unban[/quiet] channelname[, channelname, ...] = subscribername\n channel/boot[/quiet] channelname[,channelname,...] = subscribername [: reason]\n\n # subtopics\n\n ## sending\n\n Usage: channel channelname msg\n channel channel name = msg (with space in channel name)\n\n This sends a message to the channel. Note that you will rarely use this\n command like this; instead you can use the alias\n\n channelname <msg>\n channelalias <msg>\n\n For example\n\n public Hello World\n pub Hello World\n\n (this shortcut doesn't work for aliases containing spaces)\n\n See channel/alias for help on setting channel aliases.\n\n ## alias and unalias\n\n Usage: channel/alias channel = alias[;alias[;alias...]]\n channel/unalias alias\n channel - this will list your subs and aliases to each channel\n\n Set one or more personal aliases for referencing a channel. For example:\n\n channel/alias warrior's guild = warrior;wguild;warchannel;warrior guild\n\n You can now send to the channel using all of these:\n\n warrior's guild Hello\n warrior Hello\n wguild Hello\n warchannel Hello\n\n Note that this will not work if the alias has a space in it. So the\n 'warrior guild' alias must be used with the `channel` command:\n\n channel warrior guild = Hello\n\n Channel-aliases can be removed one at a time, using the '/unalias' switch.\n\n ## who\n\n Usage: channel/who channelname\n\n List the channel's subscribers. Shows who are currently offline or are\n muting the channel. Subscribers who are 'muting' will not see messages sent\n to the channel (use channel/mute to mute a channel).\n\n ## history\n\n Usage: channel/history channel [= index]\n\n This will display the last |c20|n lines of channel history. By supplying an\n index number, you will step that many lines back before viewing those 20 lines.\n\n For example:\n\n channel/history public = 35\n\n will go back 35 lines and show the previous 20 lines from that point (so\n lines -35 to -55).\n\n ## sub and unsub\n\n Usage: channel/sub channel [=alias[;alias;...]]\n channel/unsub channel\n\n This subscribes you to a channel and optionally assigns personal shortcuts\n for you to use to send to that channel (see aliases). When you unsub, all\n your personal aliases will also be removed.\n\n ## mute and unmute\n\n Usage: channel/mute channelname\n channel/unmute channelname\n\n Muting silences all output from the channel without actually\n un-subscribing. Other channel members will see that you are muted in the /who\n list. Sending a message to the channel will automatically unmute you.\n\n ## create and destroy\n\n Usage: channel/create channelname[;alias;alias[:typeclass]] [= description]\n channel/destroy channelname [= reason]\n\n Creates a new channel (or destroys one you control). You will automatically\n join the channel you create and everyone will be kicked and loose all aliases\n to a destroyed channel.\n\n ## lock and unlock\n\n Usage: channel/lock channelname = lockstring\n channel/unlock channelname = lockstring\n\n Note: this is an admin command.\n\n A lockstring is on the form locktype:lockfunc(). Channels understand three\n locktypes:\n listen - who may listen or join the channel.\n send - who may send messages to the channel\n control - who controls the channel. This is usually the one creating\n the channel.\n\n Common lockfuncs are all() and perm(). To make a channel everyone can\n listen to but only builders can talk on, use this:\n\n listen:all()\n send: perm(Builders)\n\n ## boot and ban\n\n Usage:\n channel/boot[/quiet] channelname[,channelname,...] = subscribername [: reason]\n channel/ban channelname[, channelname, ...] = subscribername [: reason]\n channel/unban channelname[, channelname, ...] = subscribername\n channel/unban channelname\n channel/ban channelname (list bans)\n\n Booting will kick a named subscriber from channel(s) temporarily. The\n 'reason' will be passed to the booted user. Unless the /quiet switch is\n used, the channel will also be informed of the action. A booted user is\n still able to re-connect, but they'll have to set up their aliases again.\n\n Banning will blacklist a user from (re)joining the provided channels. It\n will then proceed to boot them from those channels if they were connected.\n The 'reason' and `/quiet` works the same as for booting.\n\n Example:\n boot mychannel1 = EvilUser : Kicking you to cool down a bit.\n ban mychannel1,mychannel2= EvilUser : Was banned for spamming.\n\n "}¶
search_index_entry = {'aliases': '@channels @chan', 'category': 'comms', 'key': '@channel', 'no_prefix': 'channel channels chan', 'tags': '', 'text': "\n Use and manage in-game channels.\n\n Usage:\n channel channelname <msg>\n channel channel name = <msg>\n channel (show all subscription)\n channel/all (show available channels)\n channel/alias channelname = alias[;alias...]\n channel/unalias alias\n channel/who channelname\n channel/history channelname [= index]\n channel/sub channelname [= alias[;alias...]]\n channel/unsub channelname[,channelname, ...]\n channel/mute channelname[,channelname,...]\n channel/unmute channelname[,channelname,...]\n\n channel/create channelname[;alias;alias[:typeclass]] [= description]\n channel/destroy channelname [= reason]\n channel/desc channelname = description\n channel/lock channelname = lockstring\n channel/unlock channelname = lockstring\n channel/ban channelname (list bans)\n channel/ban[/quiet] channelname[, channelname, ...] = subscribername [: reason]\n channel/unban[/quiet] channelname[, channelname, ...] = subscribername\n channel/boot[/quiet] channelname[,channelname,...] = subscribername [: reason]\n\n # subtopics\n\n ## sending\n\n Usage: channel channelname msg\n channel channel name = msg (with space in channel name)\n\n This sends a message to the channel. Note that you will rarely use this\n command like this; instead you can use the alias\n\n channelname <msg>\n channelalias <msg>\n\n For example\n\n public Hello World\n pub Hello World\n\n (this shortcut doesn't work for aliases containing spaces)\n\n See channel/alias for help on setting channel aliases.\n\n ## alias and unalias\n\n Usage: channel/alias channel = alias[;alias[;alias...]]\n channel/unalias alias\n channel - this will list your subs and aliases to each channel\n\n Set one or more personal aliases for referencing a channel. For example:\n\n channel/alias warrior's guild = warrior;wguild;warchannel;warrior guild\n\n You can now send to the channel using all of these:\n\n warrior's guild Hello\n warrior Hello\n wguild Hello\n warchannel Hello\n\n Note that this will not work if the alias has a space in it. So the\n 'warrior guild' alias must be used with the `channel` command:\n\n channel warrior guild = Hello\n\n Channel-aliases can be removed one at a time, using the '/unalias' switch.\n\n ## who\n\n Usage: channel/who channelname\n\n List the channel's subscribers. Shows who are currently offline or are\n muting the channel. Subscribers who are 'muting' will not see messages sent\n to the channel (use channel/mute to mute a channel).\n\n ## history\n\n Usage: channel/history channel [= index]\n\n This will display the last |c20|n lines of channel history. By supplying an\n index number, you will step that many lines back before viewing those 20 lines.\n\n For example:\n\n channel/history public = 35\n\n will go back 35 lines and show the previous 20 lines from that point (so\n lines -35 to -55).\n\n ## sub and unsub\n\n Usage: channel/sub channel [=alias[;alias;...]]\n channel/unsub channel\n\n This subscribes you to a channel and optionally assigns personal shortcuts\n for you to use to send to that channel (see aliases). When you unsub, all\n your personal aliases will also be removed.\n\n ## mute and unmute\n\n Usage: channel/mute channelname\n channel/unmute channelname\n\n Muting silences all output from the channel without actually\n un-subscribing. Other channel members will see that you are muted in the /who\n list. Sending a message to the channel will automatically unmute you.\n\n ## create and destroy\n\n Usage: channel/create channelname[;alias;alias[:typeclass]] [= description]\n channel/destroy channelname [= reason]\n\n Creates a new channel (or destroys one you control). You will automatically\n join the channel you create and everyone will be kicked and loose all aliases\n to a destroyed channel.\n\n ## lock and unlock\n\n Usage: channel/lock channelname = lockstring\n channel/unlock channelname = lockstring\n\n Note: this is an admin command.\n\n A lockstring is on the form locktype:lockfunc(). Channels understand three\n locktypes:\n listen - who may listen or join the channel.\n send - who may send messages to the channel\n control - who controls the channel. This is usually the one creating\n the channel.\n\n Common lockfuncs are all() and perm(). To make a channel everyone can\n listen to but only builders can talk on, use this:\n\n listen:all()\n send: perm(Builders)\n\n ## boot and ban\n\n Usage:\n channel/boot[/quiet] channelname[,channelname,...] = subscribername [: reason]\n channel/ban channelname[, channelname, ...] = subscribername [: reason]\n channel/unban channelname[, channelname, ...] = subscribername\n channel/unban channelname\n channel/ban channelname (list bans)\n\n Booting will kick a named subscriber from channel(s) temporarily. The\n 'reason' will be passed to the booted user. Unless the /quiet switch is\n used, the channel will also be informed of the action. A booted user is\n still able to re-connect, but they'll have to set up their aliases again.\n\n Banning will blacklist a user from (re)joining the provided channels. It\n will then proceed to boot them from those channels if they were connected.\n The 'reason' and `/quiet` works the same as for booting.\n\n Example:\n boot mychannel1 = EvilUser : Kicking you to cool down a bit.\n ban mychannel1,mychannel2= EvilUser : Was banned for spamming.\n\n "}¶search_index_entry = {'aliases': '@chan @channels', 'category': 'comms', 'key': '@channel', 'no_prefix': 'channel chan channels', 'tags': '', 'text': "\n Use and manage in-game channels.\n\n Usage:\n channel channelname <msg>\n channel channel name = <msg>\n channel (show all subscription)\n channel/all (show available channels)\n channel/alias channelname = alias[;alias...]\n channel/unalias alias\n channel/who channelname\n channel/history channelname [= index]\n channel/sub channelname [= alias[;alias...]]\n channel/unsub channelname[,channelname, ...]\n channel/mute channelname[,channelname,...]\n channel/unmute channelname[,channelname,...]\n\n channel/create channelname[;alias;alias[:typeclass]] [= description]\n channel/destroy channelname [= reason]\n channel/desc channelname = description\n channel/lock channelname = lockstring\n channel/unlock channelname = lockstring\n channel/ban channelname (list bans)\n channel/ban[/quiet] channelname[, channelname, ...] = subscribername [: reason]\n channel/unban[/quiet] channelname[, channelname, ...] = subscribername\n channel/boot[/quiet] channelname[,channelname,...] = subscribername [: reason]\n\n # subtopics\n\n ## sending\n\n Usage: channel channelname msg\n channel channel name = msg (with space in channel name)\n\n This sends a message to the channel. Note that you will rarely use this\n command like this; instead you can use the alias\n\n channelname <msg>\n channelalias <msg>\n\n For example\n\n public Hello World\n pub Hello World\n\n (this shortcut doesn't work for aliases containing spaces)\n\n See channel/alias for help on setting channel aliases.\n\n ## alias and unalias\n\n Usage: channel/alias channel = alias[;alias[;alias...]]\n channel/unalias alias\n channel - this will list your subs and aliases to each channel\n\n Set one or more personal aliases for referencing a channel. For example:\n\n channel/alias warrior's guild = warrior;wguild;warchannel;warrior guild\n\n You can now send to the channel using all of these:\n\n warrior's guild Hello\n warrior Hello\n wguild Hello\n warchannel Hello\n\n Note that this will not work if the alias has a space in it. So the\n 'warrior guild' alias must be used with the `channel` command:\n\n channel warrior guild = Hello\n\n Channel-aliases can be removed one at a time, using the '/unalias' switch.\n\n ## who\n\n Usage: channel/who channelname\n\n List the channel's subscribers. Shows who are currently offline or are\n muting the channel. Subscribers who are 'muting' will not see messages sent\n to the channel (use channel/mute to mute a channel).\n\n ## history\n\n Usage: channel/history channel [= index]\n\n This will display the last |c20|n lines of channel history. By supplying an\n index number, you will step that many lines back before viewing those 20 lines.\n\n For example:\n\n channel/history public = 35\n\n will go back 35 lines and show the previous 20 lines from that point (so\n lines -35 to -55).\n\n ## sub and unsub\n\n Usage: channel/sub channel [=alias[;alias;...]]\n channel/unsub channel\n\n This subscribes you to a channel and optionally assigns personal shortcuts\n for you to use to send to that channel (see aliases). When you unsub, all\n your personal aliases will also be removed.\n\n ## mute and unmute\n\n Usage: channel/mute channelname\n channel/unmute channelname\n\n Muting silences all output from the channel without actually\n un-subscribing. Other channel members will see that you are muted in the /who\n list. Sending a message to the channel will automatically unmute you.\n\n ## create and destroy\n\n Usage: channel/create channelname[;alias;alias[:typeclass]] [= description]\n channel/destroy channelname [= reason]\n\n Creates a new channel (or destroys one you control). You will automatically\n join the channel you create and everyone will be kicked and loose all aliases\n to a destroyed channel.\n\n ## lock and unlock\n\n Usage: channel/lock channelname = lockstring\n channel/unlock channelname = lockstring\n\n Note: this is an admin command.\n\n A lockstring is on the form locktype:lockfunc(). Channels understand three\n locktypes:\n listen - who may listen or join the channel.\n send - who may send messages to the channel\n control - who controls the channel. This is usually the one creating\n the channel.\n\n Common lockfuncs are all() and perm(). To make a channel everyone can\n listen to but only builders can talk on, use this:\n\n listen:all()\n send: perm(Builders)\n\n ## boot and ban\n\n Usage:\n channel/boot[/quiet] channelname[,channelname,...] = subscribername [: reason]\n channel/ban channelname[, channelname, ...] = subscribername [: reason]\n channel/unban channelname[, channelname, ...] = subscribername\n channel/unban channelname\n channel/ban channelname (list bans)\n\n Booting will kick a named subscriber from channel(s) temporarily. The\n 'reason' will be passed to the booted user. Unless the /quiet switch is\n used, the channel will also be informed of the action. A booted user is\n still able to re-connect, but they'll have to set up their aliases again.\n\n Banning will blacklist a user from (re)joining the provided channels. It\n will then proceed to boot them from those channels if they were connected.\n The 'reason' and `/quiet` works the same as for booting.\n\n Example:\n boot mychannel1 = EvilUser : Kicking you to cool down a bit.\n ban mychannel1,mychannel2= EvilUser : Was banned for spamming.\n\n "}¶
search_index_entry = {'aliases': '@delays @task', 'category': 'system', 'key': '@tasks', 'no_prefix': 'tasks delays task', 'tags': '', 'text': "\n Display or terminate active tasks (delays).\n\n Usage:\n tasks[/switch] [task_id or function_name]\n\n Switches:\n pause - Pause the callback of a task.\n unpause - Process all callbacks made since pause() was called.\n do_task - Execute the task (call its callback).\n call - Call the callback of this task.\n remove - Remove a task without executing it.\n cancel - Stop a task from automatically executing.\n\n Notes:\n A task is a single use method of delaying the call of a function. Calls are created\n in code, using `evennia.utils.delay`.\n See |luhttps://www.evennia.com/docs/latest/Command-Duration.html|ltthe docs|le for help.\n\n By default, tasks that are canceled and never called are cleaned up after one minute.\n\n Examples:\n - `tasks/cancel move_callback` - Cancels all movement delays from the slow_exit contrib.\n In this example slow exits creates it's tasks with\n `utils.delay(move_delay, move_callback)`\n - `tasks/cancel 2` - Cancel task id 2.\n\n "}¶search_index_entry = {'aliases': '@task @delays', 'category': 'system', 'key': '@tasks', 'no_prefix': 'tasks task delays', 'tags': '', 'text': "\n Display or terminate active tasks (delays).\n\n Usage:\n tasks[/switch] [task_id or function_name]\n\n Switches:\n pause - Pause the callback of a task.\n unpause - Process all callbacks made since pause() was called.\n do_task - Execute the task (call its callback).\n call - Call the callback of this task.\n remove - Remove a task without executing it.\n cancel - Stop a task from automatically executing.\n\n Notes:\n A task is a single use method of delaying the call of a function. Calls are created\n in code, using `evennia.utils.delay`.\n See |luhttps://www.evennia.com/docs/latest/Command-Duration.html|ltthe docs|le for help.\n\n By default, tasks that are canceled and never called are cleaned up after one minute.\n\n Examples:\n - `tasks/cancel move_callback` - Cancels all movement delays from the slow_exit contrib.\n In this example slow exits creates it's tasks with\n `utils.delay(move_delay, move_callback)`\n - `tasks/cancel 2` - Cancel task id 2.\n\n "}¶
Test the batch processor.
red_button = <module 'evennia.contrib.tutorials.red_button.red_button' from '/tmp/tmp94vgyfg3/9a92c20204b8e30466eb2292fe117f99d7012c4a/evennia/contrib/tutorials/red_button/red_button.py'>¶
search_index_entry = {'aliases': 'con conn co', 'category': 'general', 'key': 'connect', 'no_prefix': ' con conn co', 'tags': '', 'text': '\n connect to the game\n\n Usage (at login screen):\n connect accountname password\n connect "account name" "pass word"\n\n Use the create command to first create an account before logging in.\n\n If you have spaces in your name, enclose it in double quotes.\n '}¶search_index_entry = {'aliases': 'conn co con', 'category': 'general', 'key': 'connect', 'no_prefix': ' conn co con', 'tags': '', 'text': '\n connect to the game\n\n Usage (at login screen):\n connect accountname password\n connect "account name" "pass word"\n\n Use the create command to first create an account before logging in.\n\n If you have spaces in your name, enclose it in double quotes.\n '}¶
search_index_entry = {'aliases': 'q qu', 'category': 'general', 'key': 'quit', 'no_prefix': ' q qu', 'tags': '', 'text': '\n quit when in unlogged-in state\n\n Usage:\n quit\n\n We maintain a different version of the quit command\n here for unconnected accounts for the sake of simplicity. The logged in\n version is a bit more complicated.\n '}¶search_index_entry = {'aliases': 'qu q', 'category': 'general', 'key': 'quit', 'no_prefix': ' qu q', 'tags': '', 'text': '\n quit when in unlogged-in state\n\n Usage:\n quit\n\n We maintain a different version of the quit command\n here for unconnected accounts for the sake of simplicity. The logged in\n version is a bit more complicated.\n '}¶
search_index_entry = {'aliases': '? h', 'category': 'general', 'key': 'help', 'no_prefix': ' ? h', 'tags': '', 'text': '\n get help when in unconnected-in state\n\n Usage:\n help\n\n This is an unconnected version of the help command,\n for simplicity. It shows a pane of info.\n '}¶search_index_entry = {'aliases': 'h ?', 'category': 'general', 'key': 'help', 'no_prefix': ' h ?', 'tags': '', 'text': '\n get help when in unconnected-in state\n\n Usage:\n help\n\n This is an unconnected version of the help command,\n for simplicity. It shows a pane of info.\n '}¶
search_index_entry = {'aliases': 'con conn co', 'category': 'general', 'key': 'connect', 'no_prefix': ' con conn co', 'tags': '', 'text': '\n Connect to the game.\n\n Usage (at login screen):\n connect <email> <password>\n\n Use the create command to first create an account before logging in.\n '}¶search_index_entry = {'aliases': 'conn co con', 'category': 'general', 'key': 'connect', 'no_prefix': ' conn co con', 'tags': '', 'text': '\n Connect to the game.\n\n Usage (at login screen):\n connect <email> <password>\n\n Use the create command to first create an account before logging in.\n '}¶
search_index_entry = {'aliases': 'q qu', 'category': 'general', 'key': 'quit', 'no_prefix': ' q qu', 'tags': '', 'text': '\n We maintain a different version of the `quit` command\n here for unconnected accounts for the sake of simplicity. The logged in\n version is a bit more complicated.\n '}¶search_index_entry = {'aliases': 'qu q', 'category': 'general', 'key': 'quit', 'no_prefix': ' qu q', 'tags': '', 'text': '\n We maintain a different version of the `quit` command\n here for unconnected accounts for the sake of simplicity. The logged in\n version is a bit more complicated.\n '}¶
search_index_entry = {'aliases': '? h', 'category': 'general', 'key': 'help', 'no_prefix': ' ? h', 'tags': '', 'text': '\n This is an unconnected version of the help command,\n for simplicity. It shows a pane of info.\n '}¶search_index_entry = {'aliases': 'h ?', 'category': 'general', 'key': 'help', 'no_prefix': ' h ?', 'tags': '', 'text': '\n This is an unconnected version of the help command,\n for simplicity. It shows a pane of info.\n '}¶
search_index_entry = {'aliases': '@calls @callbacks @callback', 'category': 'building', 'key': '@call', 'no_prefix': 'call calls callbacks callback', 'tags': '', 'text': '\n Command to edit callbacks.\n '}¶search_index_entry = {'aliases': '@callback @calls @callbacks', 'category': 'building', 'key': '@call', 'no_prefix': 'call callback calls callbacks', 'tags': '', 'text': '\n Command to edit callbacks.\n '}¶
search_index_entry = {'aliases': 'aliaschan chanalias', 'category': 'comms', 'key': 'addcom', 'no_prefix': ' aliaschan chanalias', 'tags': '', 'text': '\n Add a channel alias and/or subscribe to a channel\n\n Usage:\n addcom [alias=] <channel>\n\n Joins a given channel. If alias is given, this will allow you to\n refer to the channel by this alias rather than the full channel\n name. Subsequent calls of this command can be used to add multiple\n aliases to an already joined channel.\n '}¶search_index_entry = {'aliases': 'chanalias aliaschan', 'category': 'comms', 'key': 'addcom', 'no_prefix': ' chanalias aliaschan', 'tags': '', 'text': '\n Add a channel alias and/or subscribe to a channel\n\n Usage:\n addcom [alias=] <channel>\n\n Joins a given channel. If alias is given, this will allow you to\n refer to the channel by this alias rather than the full channel\n name. Subsequent calls of this command can be used to add multiple\n aliases to an already joined channel.\n '}¶
search_index_entry = {'aliases': 'delchanalias delaliaschan', 'category': 'comms', 'key': 'delcom', 'no_prefix': ' delchanalias delaliaschan', 'tags': '', 'text': "\n remove a channel alias and/or unsubscribe from channel\n\n Usage:\n delcom <alias or channel>\n delcom/all <channel>\n\n If the full channel name is given, unsubscribe from the\n channel. If an alias is given, remove the alias but don't\n unsubscribe. If the 'all' switch is used, remove all aliases\n for that channel.\n "}¶search_index_entry = {'aliases': 'delaliaschan delchanalias', 'category': 'comms', 'key': 'delcom', 'no_prefix': ' delaliaschan delchanalias', 'tags': '', 'text': "\n remove a channel alias and/or unsubscribe from channel\n\n Usage:\n delcom <alias or channel>\n delcom/all <channel>\n\n If the full channel name is given, unsubscribe from the\n channel. If an alias is given, remove the alias but don't\n unsubscribe. If the 'all' switch is used, remove all aliases\n for that channel.\n "}¶
search_index_entry = {'aliases': 'q quit chicken out abort', 'category': 'evscaperoom', 'key': 'give up', 'no_prefix': ' q quit chicken out abort', 'tags': '', 'text': '\n Give up\n\n Usage:\n give up\n\n Abandons your attempts at escaping and of ever winning the pie-eating contest.\n\n '}¶search_index_entry = {'aliases': 'chicken out abort q quit', 'category': 'evscaperoom', 'key': 'give up', 'no_prefix': ' chicken out abort q quit', 'tags': '', 'text': '\n Give up\n\n Usage:\n give up\n\n Abandons your attempts at escaping and of ever winning the pie-eating contest.\n\n '}¶
search_index_entry = {'aliases': '; shout whisper', 'category': 'general', 'key': 'say', 'no_prefix': ' ; shout whisper', 'tags': '', 'text': '\n Perform an communication action.\n\n Usage:\n say <text>\n whisper\n shout\n\n '}¶search_index_entry = {'aliases': 'shout whisper ;', 'category': 'general', 'key': 'say', 'no_prefix': ' shout whisper ;', 'tags': '', 'text': '\n Perform an communication action.\n\n Usage:\n say <text>\n whisper\n shout\n\n '}¶
search_index_entry = {'aliases': 'unfocus e examine ex', 'category': 'evscaperoom', 'key': 'focus', 'no_prefix': ' unfocus e examine ex', 'tags': '', 'text': '\n Focus your attention on a target.\n\n Usage:\n focus <obj>\n\n Once focusing on an object, use look to get more information about how it\n looks and what actions is available.\n\n '}¶search_index_entry = {'aliases': 'e examine unfocus ex', 'category': 'evscaperoom', 'key': 'focus', 'no_prefix': ' e examine unfocus ex', 'tags': '', 'text': '\n Focus your attention on a target.\n\n Usage:\n focus <obj>\n\n Once focusing on an object, use look to get more information about how it\n looks and what actions is available.\n\n '}¶
search_index_entry = {'aliases': 'inventory give inv i', 'category': 'evscaperoom', 'key': 'get', 'no_prefix': ' inventory give inv i', 'tags': '', 'text': '\n Use focus / examine instead.\n\n '}¶search_index_entry = {'aliases': 'inv i give inventory', 'category': 'evscaperoom', 'key': 'get', 'no_prefix': ' inv i give inventory', 'tags': '', 'text': '\n Use focus / examine instead.\n\n '}¶
search_index_entry = {'aliases': 'deal offers', 'category': 'trading', 'key': 'status', 'no_prefix': ' deal offers', 'tags': '', 'text': "\n show a list of the current deal\n\n Usage:\n status\n deal\n offers\n\n Shows the currently suggested offers on each sides of the deal. To\n accept the current deal, use the 'accept' command. Use 'offer' to\n change your deal. You might also want to use 'say', 'emote' etc to\n try to influence the other part in the deal.\n "}¶search_index_entry = {'aliases': 'offers deal', 'category': 'trading', 'key': 'status', 'no_prefix': ' offers deal', 'tags': '', 'text': "\n show a list of the current deal\n\n Usage:\n status\n deal\n offers\n\n Shows the currently suggested offers on each sides of the deal. To\n accept the current deal, use the 'accept' command. Use 'offer' to\n change your deal. You might also want to use 'say', 'emote' etc to\n try to influence the other part in the deal.\n "}¶
search_index_entry = {'aliases': 'fly dive', 'category': 'general', 'key': 'fly or dive', 'no_prefix': ' fly dive', 'tags': '', 'text': '\n Fly or Dive up and down.\n\n Usage:\n fly\n dive\n\n Will fly up one room or dive down one room at your current position. If\n there is no room above/below you, your movement will fail.\n\n '}¶search_index_entry = {'aliases': 'dive fly', 'category': 'general', 'key': 'fly or dive', 'no_prefix': ' dive fly', 'tags': '', 'text': '\n Fly or Dive up and down.\n\n Usage:\n fly\n dive\n\n Will fly up one room or dive down one room at your current position. If\n there is no room above/below you, your movement will fail.\n\n '}¶
evennia.contrib.rpg.character_creator.character_creator.ContribCmdIC(**kwargs)[source]¶Bases: evennia.commands.default.account.CmdIC
control an object you have permission to puppet
+ic <character>
+Go in-character (IC) as a given Character.
+This will attempt to “become” a different object assuming you have +the right to do so. Note that it’s the ACCOUNT character that puppets +characters/objects and which needs to have the correct permission!
+You cannot become an object that is already controlled by another +account. In principle <character> can be any in-game object as long +as you the account have access right to puppet it.
+ + +aliases = ['puppet']¶help_category = 'general'¶key = 'ic'¶lock_storage = 'cmd:all()'¶search_index_entry = {'aliases': 'puppet', 'category': 'general', 'key': 'ic', 'no_prefix': ' puppet', 'tags': '', 'text': '\n control an object you have permission to puppet\n\n Usage:\n ic <character>\n\n Go in-character (IC) as a given Character.\n\n This will attempt to "become" a different object assuming you have\n the right to do so. Note that it\'s the ACCOUNT character that puppets\n characters/objects and which needs to have the correct permission!\n\n You cannot become an object that is already controlled by another\n account. In principle <character> can be any in-game object as long\n as you the account have access right to puppet it.\n '}¶evennia.contrib.rpg.character_creator.character_creator.ContribCmdCharCreate(**kwargs)[source]¶evennia.contrib.rpg.character_creator.character_creator.ContribChargenCmdSet(cmdsetobj=None, key=None)[source]¶Bases: evennia.commands.cmdset.CmdSet
key = 'Contrib Chargen CmdSet'¶at_cmdset_creation()[source]¶Hook method - this should be overloaded in the inheriting +class, and should take care of populating the cmdset by use of +self.add().
+path = 'evennia.contrib.rpg.character_creator.character_creator.ContribChargenCmdSet'¶evennia.contrib.rpg.character_creator.character_creator.ContribChargenAccount(*args, **kwargs)[source]¶search_index_entry = {'aliases': 'recognize forget', 'category': 'general', 'key': 'recog', 'no_prefix': ' recognize forget', 'tags': '', 'text': '\n Recognize another person in the same room.\n\n Usage:\n recog\n recog sdesc as alias\n forget alias\n\n Example:\n recog tall man as Griatch\n forget griatch\n\n This will assign a personal alias for a person, or forget said alias.\n Using the command without arguments will list all current recogs.\n\n '}¶search_index_entry = {'aliases': 'forget recognize', 'category': 'general', 'key': 'recog', 'no_prefix': ' forget recognize', 'tags': '', 'text': '\n Recognize another person in the same room.\n\n Usage:\n recog\n recog sdesc as alias\n forget alias\n\n Example:\n recog tall man as Griatch\n forget griatch\n\n This will assign a personal alias for a person, or forget said alias.\n Using the command without arguments will list all current recogs.\n\n '}¶
aliases = ['push', 'press', 'press button']¶
search_index_entry = {'aliases': 'push press press button', 'category': 'general', 'key': 'push button', 'no_prefix': ' push press press button', 'tags': '', 'text': '\n Push the red button (lid closed)\n\n Usage:\n push button\n\n '}¶
aliases = ['push', 'press', 'press button']¶
search_index_entry = {'aliases': 'push press press button', 'category': 'general', 'key': 'push button', 'no_prefix': ' push press press button', 'tags': '', 'text': '\n Push the red button\n\n Usage:\n push button\n\n '}¶
aliases = ['l', 'examine', 'feel', 'get', 'listen', 'ex']¶
search_index_entry = {'aliases': 'l examine feel get listen ex', 'category': 'general', 'key': 'look', 'no_prefix': ' l examine feel get listen ex', 'tags': '', 'text': "\n Looking around in darkness\n\n Usage:\n look <obj>\n\n ... not that there's much to see in the dark.\n\n "}¶
search_index_entry = {'aliases': 'light burn', 'category': 'tutorialworld', 'key': 'on', 'no_prefix': ' light burn', 'tags': '', 'text': '\n Creates light where there was none. Something to burn.\n '}¶search_index_entry = {'aliases': 'burn light', 'category': 'tutorialworld', 'key': 'on', 'no_prefix': ' burn light', 'tags': '', 'text': '\n Creates light where there was none. Something to burn.\n '}¶
search_index_entry = {'aliases': 'push pull move shiftroot', 'category': 'tutorialworld', 'key': 'shift', 'no_prefix': ' push pull move shiftroot', 'tags': '', 'text': '\n Shifts roots around.\n\n Usage:\n shift blue root left/right\n shift red root left/right\n shift yellow root up/down\n shift green root up/down\n\n '}¶search_index_entry = {'aliases': 'push shiftroot pull move', 'category': 'tutorialworld', 'key': 'shift', 'no_prefix': ' push shiftroot pull move', 'tags': '', 'text': '\n Shifts roots around.\n\n Usage:\n shift blue root left/right\n shift red root left/right\n shift yellow root up/down\n shift green root up/down\n\n '}¶
aliases = ['press button', 'push button', 'button']¶aliases = ['push button', 'press button', 'button']¶
search_index_entry = {'aliases': 'press button push button button', 'category': 'tutorialworld', 'key': 'press', 'no_prefix': ' press button push button button', 'tags': '', 'text': '\n Presses a button.\n '}¶search_index_entry = {'aliases': 'push button press button button', 'category': 'tutorialworld', 'key': 'press', 'no_prefix': ' push button press button button', 'tags': '', 'text': '\n Presses a button.\n '}¶
aliases = ['defend', 'stab', 'fight', 'slash', 'chop', 'bash', 'hit', 'pierce', 'parry', 'thrust', 'kill']¶aliases = ['bash', 'defend', 'chop', 'thrust', 'fight', 'stab', 'kill', 'pierce', 'slash', 'parry', 'hit']¶
search_index_entry = {'aliases': 'defend stab fight slash chop bash hit pierce parry thrust kill', 'category': 'tutorialworld', 'key': 'attack', 'no_prefix': ' defend stab fight slash chop bash hit pierce parry thrust kill', 'tags': '', 'text': '\n Attack the enemy. Commands:\n\n stab <enemy>\n slash <enemy>\n parry\n\n stab - (thrust) makes a lot of damage but is harder to hit with.\n slash - is easier to land, but does not make as much damage.\n parry - forgoes your attack but will make you harder to hit on next\n enemy attack.\n\n '}¶search_index_entry = {'aliases': 'bash defend chop thrust fight stab kill pierce slash parry hit', 'category': 'tutorialworld', 'key': 'attack', 'no_prefix': ' bash defend chop thrust fight stab kill pierce slash parry hit', 'tags': '', 'text': '\n Attack the enemy. Commands:\n\n stab <enemy>\n slash <enemy>\n parry\n\n stab - (thrust) makes a lot of damage but is harder to hit with.\n slash - is easier to land, but does not make as much damage.\n parry - forgoes your attack but will make you harder to hit on next\n enemy attack.\n\n '}¶
search_index_entry = {'aliases': '? h', 'category': 'tutorial world', 'key': 'help', 'no_prefix': ' ? h', 'tags': '', 'text': '\n Overwritten help command while on the bridge.\n '}¶search_index_entry = {'aliases': 'h ?', 'category': 'tutorial world', 'key': 'help', 'no_prefix': ' h ?', 'tags': '', 'text': '\n Overwritten help command while on the bridge.\n '}¶
aliases = ['feel', 'l', 'search', 'feel around', 'fiddle']¶aliases = ['feel around', 'l', 'search', 'feel', 'fiddle']¶
search_index_entry = {'aliases': 'feel l search feel around fiddle', 'category': 'tutorialworld', 'key': 'look', 'no_prefix': ' feel l search feel around fiddle', 'tags': '', 'text': '\n Look around in darkness\n\n Usage:\n look\n\n Look around in the darkness, trying\n to find something.\n '}¶search_index_entry = {'aliases': 'feel around l search feel fiddle', 'category': 'tutorialworld', 'key': 'look', 'no_prefix': ' feel around l search feel fiddle', 'tags': '', 'text': '\n Look around in darkness\n\n Usage:\n look\n\n Look around in the darkness, trying\n to find something.\n '}¶
directory = '/tmp/tmpdh_yr8nc/d1f43a85f965bdf3f8f7c9f626f63d1bc0dc862f/evennia'¶directory = '/tmp/tmp94vgyfg3/9a92c20204b8e30466eb2292fe117f99d7012c4a/evennia'¶
directory = '/tmp/tmpdh_yr8nc/d1f43a85f965bdf3f8f7c9f626f63d1bc0dc862f/evennia/game_template'¶directory = '/tmp/tmp94vgyfg3/9a92c20204b8e30466eb2292fe117f99d7012c4a/evennia/game_template'¶
aliases = [':=', ':s', ':p', ':f', ':echo', ':uu', ':dd', ':A', ':!', ':j', ':wq', ':dw', ':q!', ':h', ':::', ':UU', ':q', ':x', ':r', ':<', ':S', ':w', ':u', ':i', ':fi', ':', ':>', ':fd', ':DD', ':y', ':I', '::']¶aliases = [':::', ':', ':h', ':u', ':wq', ':p', ':UU', ':fi', ':!', ':q', ':r', ':y', ':x', ':DD', ':<', ':dd', '::', ':i', ':q!', ':S', ':dw', ':>', ':s', ':echo', ':f', ':I', ':uu', ':=', ':w', ':j', ':fd', ':A']¶
search_index_entry = {'aliases': ':= :s :p :f :echo :uu :dd :A :! :j :wq :dw :q! :h ::: :UU :q :x :r :< :S :w :u :i :fi : :> :fd :DD :y :I ::', 'category': 'general', 'key': ':editor_command_group', 'no_prefix': ' := :s :p :f :echo :uu :dd :A :! :j :wq :dw :q! :h ::: :UU :q :x :r :< :S :w :u :i :fi : :> :fd :DD :y :I ::', 'tags': '', 'text': '\n Commands for the editor\n '}¶search_index_entry = {'aliases': '::: : :h :u :wq :p :UU :fi :! :q :r :y :x :DD :< :dd :: :i :q! :S :dw :> :s :echo :f :I :uu := :w :j :fd :A', 'category': 'general', 'key': ':editor_command_group', 'no_prefix': ' ::: : :h :u :wq :p :UU :fi :! :q :r :y :x :DD :< :dd :: :i :q! :S :dw :> :s :echo :f :I :uu := :w :j :fd :A', 'tags': '', 'text': '\n Commands for the editor\n '}¶
aliases = ['y', 'yes', 'a', '__nomatch_command', 'n', 'abort', 'no']¶
search_index_entry = {'aliases': 'y yes a __nomatch_command n abort no', 'category': 'general', 'key': '__noinput_command', 'no_prefix': ' y yes a __nomatch_command n abort no', 'tags': '', 'text': '\n Handle a prompt for yes or no. Press [return] for the default choice.\n\n '}¶
aliases = ['previous', 'e', 'abort', 'next', 'q', 'top', 'a', 't', 'p', 'quit', 'n', 'end']¶aliases = ['previous', 'end', 'q', 'top', 'a', 'p', 't', 'e', 'next', 'n', 'abort', 'quit']¶
search_index_entry = {'aliases': 'previous e abort next q top a t p quit n end', 'category': 'general', 'key': '__noinput_command', 'no_prefix': ' previous e abort next q top a t p quit n end', 'tags': '', 'text': '\n Manipulate the text paging. Catch no-input with aliases.\n '}¶search_index_entry = {'aliases': 'previous end q top a p t e next n abort quit', 'category': 'general', 'key': '__noinput_command', 'no_prefix': ' previous end q top a p t e next n abort quit', 'tags': '', 'text': '\n Manipulate the text paging. Catch no-input with aliases.\n '}¶
O|H6Cy_UD74|@`}CSD&HTf{FQpE0VUf+9+{iH9+aEad8o)e1N)t-}y-O--&iQdhMfOaQ#Bs@-Co73hyjx7Eb zRa>sx@2Hy{ci+)B-`2%HXAbtA`kI0}_6^rb; ~3 zLw3ANab8mk%%v!@Y4gA6Wb%rVX6(}7($;*yHqbQ4Oh+aUG>z7omK7)9UT*f2B9k)> zMWyT8Lr)n?qFv 9k+Q(x)ID~o5L(wC?%Q^79)ZHr@|)v_<>Ei34#Ow5D@x7}rR;=~^FS*?lR%US zf4=Q&GGwIdDB*F8^9kyJl)$!r1?1GFqCK%3^XL&Cj~-#My!WILs_L#el&;%Bt;m3| zxRH(}tBH>}Lv!L*Q)T;}k4bu6Q{iGg(5z}cHm>*p{z&tmsc>q$u4S~y_z<*g4%r~q z`=-Kes%B1w%hHD?!)QJ7PKwx5$(;hff1Wgh$OpB(=+WlCQ=uA5>)EmGTzeCFuVZhb z?)`Oq`7}_+VZ{pG5!ZKe27m#`5)J?!>I`7jQ? ufi^IIp{c;=ritufvfTJXU@U9t*$Jy> +M#@z7g-dxRpQYs$m#Uu_BGm_NFG!AItsTJy{ZsIh2zNN?Lh2nTg4!e}^*v$udzc z_dcISP26Q{%yY_Emi;WN>RmpGx`Q;+8qkcZ*!VtGj6Ty`EcMurRrP*VYhO`1E7rSw z0x?I&%7VU6_J5Cbq#6Hqf7U1Evfkyx=*85tk-y7_U_;xj!=v}de{6 k|(iSU8bb6285F{vn!lsZXmUe z^9tYeee@>z#C`H6|99YnHQguDWl!RKKU!o@at~ZlSj;+Fy^jYFe+4t8uDnf$>^f~H zzZHbNwseU=G{t`KD&N(`QwE@BhxhgXV#uj(;Eu1ZN&k}U6FfYXLw-DoMpM=93se)= z?@NqVG1U9xEf;B}IRZ9)gei^E(B~n^kkI5I63l5CQ!gKB=DXx6Hh+LsTM-}O*jB~+ zW34lx@6=-DpyK_}f9A1y(xLgA#N~h}4chf|`iJ*Sx|9Smm#!qej%I83L%80gioy{v z@ H2Nm+#9`%6apy6xW!-T%}x +QTd=MJKC^ebt_K?mMzXqx?>EVt8uh`O;KWi09SF%6AbrKa#2}#O7+E znX{33oxmHJc=jLfv%#}}yi?x4yi?x)`A&KNuXoD(f4|b;-E=v?{GX8GpS+S%MDu<9 zehX5^zt95VGk+^ 3M8x6s{RiRlPT3pJTPo#rPZb#UmX+Oxo#C2NPyc_KZhRCs !u>>~={s;o L~uxThA`f-6)!IoyyT%j<%Pat?7`m)-I}L|)bhGa+)R ze`(Jn1MBmN5E(UXMxXV_EEPgLa7u@dy (RzjQ>fWGd>baM4LXh z?a%05NRUX%3rRw0cp*t8Juf6_rQ(Gof0^XG(99|!olegS-BvB5pUWbq6Ph@r;)7;B z(OuBYBq AdOJ5YxDJ?8g@kuL2(OuGtOHv+b#VY}a zv|^KzKRTn8l42+3jppDja&6!le~+Z<1JAj|w!3pa(TmP>Pa9u_78a=~(27|C>a$`K zU3q@c;@7!GI*Q`V3_Mm#piu%@IDy8F40<2e1gvbuieH)K!bMI8(Z$#9o1G|=$p#{7 zx>IN*!RM!FAC^i3aSi&JRiy4xXr6+yTyASE2xYsz{i#w&2{e?XCe@p>e^V2GsjzB! z$C3~y{qDG4v4lK9I$iF~ s}^;2nWe+3eesX`LJab(4mjARXFXAKzs74o+^gc>$+4mi+fN6H4d~zQ};! zar2Rr!<{y0dIwI$ZDW>j)DpD_#VuWf_@Pg2PRJkxrFUQul4hC)A*m(Y$4>kb?P4Xp zME!~4mXbf2_S3w3{Gx{wQGLlNof}<+GYxd2`j0betxV;yY~S`Ze~Yw_-8-rX7xa zJZqPbz+rP}lVP4Qe>ogf=06Ipy4|^FhxpCzX(4g*ZC!k6ci) s?s^Me2+4Wr4j2NA;O!hNJ;AtqjSC5Al!X z5W}5mbkXrggm36mM*6;dBvnKf9uxVHO!&xydj(>3dK@%?f8*E;dgv30K}UGF7EK$x zQyzZsBH717tw$Q``2~T3k|G+uEC*0#5K#{mjmXBJNR&lI<1$bdSw(CK#|k1q3f2{% z;Mkzk0T6s5xk}YpGxt%s7T`WIp9JuB_%Qd^PHJ&N#g7BX2py7--#8tT3EXHMl9lh6 z9g+*!$Q_zge>&<6Jc iMicSKqM-fTP^C(hDI37hMEx)sHN=B1Y z^g6%O;V()$o6SN{X{6(Q7D@?tpoL6gUT7hfgeO|)q~(oHc_pRYDSD;P<>5HQ^+=LJ zI^IapNx%~+B8hn+MJfpoq^P9jeHKp1XmW~P=X*~Xf3w{>4Vg$f9%xM}0Y9{+lbAPJ zQ%k}ptqG;&na-IdrspYosULbmFP?i64ASvSl1%~*N%Ba{6G=` Aa3QqL30m&|OE(Q8d7C4Cm*K@vUiL?lVAp2;PnN-0dO-7iyX3BEH; zEwMNDBYGX!36+H3+>d0cpH3+yqEN?jFO$}w9)BsXq_n#uJ)_B}cX}D7R1y>?V_C2j zj?ly~);vOU =}(R=BtGSYRt3nERPkT!v=NAo8o(@yv8*yl0RJS!F{b%SeKX?B8Zh6!{t zXMc1O>SWf;swq#O0+|F{_?k{4Zt2^ORwav>4bu!#az_)TG+oieE-kyCSS4U)6P2Wb zl8ICzc0cXym_qf(D=sPdg4g8I^a`(ersW@A^Gm=}ye5^Hc`6-Cz%~_;6b(}|OWP_n z$uvz;lS{}RHKXWBjx#=qIfn$wM$W0E=zkz)ZfU!Sb?r@pP9ml1n^&9?GtB69L8nAg zG)m1ZZIfIIs}eNGbV{qv7$wtdYd%RjhsY&pugRqABqY1{;3%eAzGR(6Dy4ImSoLi& z<}`bnyUv7~EV2g?2TyqHp(t;6-$7B`{%c uSLmVRWxx m3JxcfQc>a*z0KG53mNiblL(_C0UeVoqa^{8 zlTo81e{S2KD!miW_7@ImSpJGnWV>H6NyzF~tfJfeic2~ce?}@DbxzUyh>=!Y-y;~L z<9Q^T1pJQVk(k$!oRaW4l1W+~XQq^j5~t>E?&*-mVCRfTLZxUI$VE4|b3&0TLO7$T zz%!l(O$^fLwq`bwyRDf=LfzKPDY_laOw#GLe@-Z+qQt3nTNAP0%SZZW7vJY79%*?V z%_$N8quC_rg*3Bde39mpo=4KeQuPHQ#*Xg^1dFu%fMk@27m!>M^Z}ArG9Ey(NzeWz ztyHa_kBC0ffs_dhKxQgw`GJL2BF n|F!TuGp( zf8m=XlgRE!a!AMnNj}k?j%1OJpPA{Tps-1K6EUq2bp`oCAfcrFid0-vS`n#ff1qN; zWEylL&l#+l#9zoR*hE~$KEbE5h<)ah-V*kin)inBa6A%ONPmG+)MfM+_(WbrKQqdY zl!rEQD}5f|@VGBJqXgV>Dogt1oOVQSe>~%-;*J+W>G|V@TRM*L5~s+XXQ33?&=(>J zSo*gyuBFfTsaX0#C_PJGxTRz1mpDa@c`gx(?0ObTkzLP1Bmvj+Kr7m{{SeXntSO}8 zfKE82=Yvk@rQ?R)pcUEhPgq5^{Sz)JnE$lfc|`MHQAo!8*PIeG|24gY%>Od2f7s@~ zW)<7~*Ie`wV#Qpq5xsT9ltn^x67!Eyr F}RP|FL~)Qfnvm0`v6=& VMn{MI3Lz)DA56r^n*6XA0lHm7aI!h~s4nmSqO|_F-JoS2Xkxo--e w40&L_N59X#8Ry*DTiygc7W`KRqX*ElF|NAkAy86RNZCUp8Bp2 z;%{2q%fId^W99a#)>rWTe}L6Ro0f)$Uyy-tcOIJo*PDnGYGN>s@Pju?y $1_%tyg5DF)^IcN5i*WCxwkh#BJR(D4pNL zr@P1Cwz Y(1lar@HTJB%6wyDa7X2Kqn8DeoblrrN) z5B)O7y&aUC-DMb%oZkh5jlxCr4ZoL$(Y+BPUn=%tQy5xB+0%TmiethMa}2V=kh6-r z!ccMx#lmq*PV;+Ow>(hbj{0YlFQ{t*9jKF>s4y7V_S}mcNu2hxsROxquVe0bsr=(@ z@#!>^ =~3j zf6)=~xxz<;=e|0|)7$i0mu_{_y2aSP@*jR*TikZ1^)?M(eC2D-O~Jt1pi?@rjT8v2 zjU@p-C)SeyA2#%3K8!uh9!XUeHYqR{YCNhb+FGDtmd(Ms2YcggL(_iiZX8ZQx!&A8 zAIZoDTAaA3tsNpfo&b*e5BdGQ{MypNrpWvzlcy47nV}UW`3%H3q)w84UQyD&=La~@ z;XTtAQ+bc{JwE}<`?4F%(?=;j#QppX@00VXDu4Jv5A-=X`>@GKT$SNDCRoOI2%)sk zsBVjy&X}q{eZvJKqC-z<#%M*=niYc=x4OgdHLdTkQIS{ox#GzNm+O^&E34`^J;}eV z0&fuTLY}fh{Htur6`E$of%rV|Z|~)o!JFa~TJOIht_<50UP|w20IScpbs-W^w{2zW zlz*=B@FQSfFoa3Qq7ny_hGPv0CMBz?5lkX(bt0IIe99ewdF4ma9H`7|XZd8`Msq{J zL<+)=c{?^kECPo%8@sG+=!qT0V50OwY^5Xr) O`$^&B~B=V4K8sm6EV7=VS z0THx cB}+mrXYI6()!}lL#K=UcKZ$NK;g_2X#KDqLIAN8OXKyN(lK?OI8Xm zfSNR1Tz|d)&=+0rKBkLiUHP(ze)AokNH!KJnpMOGYk&533pirPc> H4;786LpUc4c0Z;Y!Ia3 *s&;Xv8-lklq<0j`q@tS?TBhGf0V%!6!e z(RT5*wRn@z+FGbpRBbJNAO~p0J9&RlS|@$*j zJ2GUbS9%U5xP-QMZ8A{&&Xb3%H-A67VY%dbe5@}KURE2299BsSxsrW87ypJ_mC2Td zCN^r#*tk0#;W&t&9oWU^mcPFF$m&<|e*wHDWxmc--jsfM c*#zA_s7h6+Fudo@E2dve@->4=Hd@DhA5%NLa=Pq8n4y_F~(rV2}dK0)JFm!^(of zOU!zjgGyyt+k#5upP=1Z)501J4`-n%a*+rRuB7s?6Idv)#17mGb+oUc%teUaJEp z71n2T;7^V7*o; 2z zH_^Yp*@sNOZ`FgGU1uuqM$Mdl{B@%! BxylaZoVq+^uXx*c`F}&T-Akq}LIhDs zTWlDaA8wn0HUq;&QP-%f<|@yC3aD#Srr};FEU|OVNJAkOyG#@l(SCS|02%gKf6|wX zh+3eRjw&}25V#for6h=$+D6m_03J*j`AEJCtRuNz*mQc?c6X;PyVb6AW0Z7BxVhBr zF_NeJYa=92(bvOePk-Upf>}?|qQS9bU#;c!l)VvxTS}h{9Z0VyamE#VuJRqq_*|ik zLmOMUL#8UX H( z$&dhEzheXt(~3?X2vG^%%$xe)BH+F6V_Q>1(Rjo+ic>u#Pk(+6Sv+3Tn3mXjK&U(i zlJKn(Iv>%~*e%;CEOZ7r^$VaK*h)6bbaoJ$zf1M750*;_u`AwD6i4j)w${T#v__n~ zDlB_06pb;CF|S=IXj@Ez(b{9mhKxJ4gP(BNs8A>#56j8*G^gbw?Xx*)gwisq>1B6= zBcC<}{zJ@NC4Z;|m=uMZ$~K+HF`dtu{{2YzgpYo2kEAF0u$_`Rk#8f|dJyl9tFc1_%G;(<+Y@C& zS!1e$3il8J)M5_#rAb|eKVVr@6uZ? 4FI#N_%_!j zKss?H6@T50YnXtJTqAC5RN^bWY1*;LsT}&q9AOxwp+&>t0}&$5P30i8?kepXag Ja!G1g$e%fOd4>@&RMfw;etTM)dO@k2@2v!oiQ~I`ojP!;j}W{9sN% z1oAN}r~t-~H`82)k1xjg>Vi!gjFTnP1UWMu>@P=A1GpEX*^x{ADH`BVeKLZD&hch@+meqjx? zZ(Cg?ij8!nqzHqAQUi1WXE<^lM}155nU4!jo+~SxeTxa%jP;K8v_Nk~y=g#BnnIRt zu>fF2*^6Ys^<#42;Qk(I|B~rli)z{o0Wf>Y#tIi`Ao)+OAPNcfwdv3WJ-$%8EmNH~ zAtD$v-VnzTLL4%xN{MNKh;g!yBL)U?xkk+nh@#Q8wkbDGl<<^qu}I1h0jpk3i`Vsb z_`?RZXbQ8X47c#{l8)__ i%=Ve{#DEQsE@FUAC0#@?+#&8wkgjisR&-!*uU%g* zd2`wN>XMo^qme9mp|Ql9Z=Y|!@DFd9=w-ns5^t82X4PFirP2dqlAWo!k84R<50s`Y zC_YNtseMCGK*S?|h#_9}k`?9t+5s4@!q2uB0+vpnNnJMbur|H83K(G87zbGF)=71) za&?FUEOosr4zTF?+j({f4FIQY7Wq>_J{~|vo-p3Qy#9Os85V>Mq#v@j0(-sU a!P8tnREBz|bS?`uZ}ujz|? _(k_H`)-u6LqV6-_zjN4k6b()Kvkc7}o6t(>Dttd1P6 zR9JxG2`IaNp&kI{9AR>FF;;7lfd7vQG||;k9cb3gMqnPYS>mWYRxHD2dmMdgJUY%) zDf&ptCFGq0Z45*{ylxM)5u0_PKb Bo z69ZpgYBI*3F8#C7D_l0BuM^Q5GIyfRGkbNi-gb-FgN$9VfVkO-4d}iS!Bu0C@ph4p z`2eb)#^Jxp$Oe$V-rXJ(3l+v9G5e<2RTbPt2cds|(<@BBZyil~cAcrbn|t~9=Fy}V z#aqaKRp*7Oi{2cB_=6~~h7F_Rc5E0?p(D?7U8ztApsa1CE*S?;C!03PH~nE$#Dx8t zbT2nGp4zu 24ROW^Sy%ZE`Bzt{t%_n- zxn_sH`Agq8Fvd?56EH-hMYvf-|Uk7%&OizPUN-Y^D1{zjdqhh)<# zO%I5T8cjdRcox;so^g*!(R@NrJ8n%__Nqz@_}2tWb+*m`gFt-0c=Hi$e8!tI$hDQ% zu0mZ7Uh~0nIe5(#568~dei@eT+9QKXHj3} 5048(%=CYfT2Q9~C*~G>`Y<;=Gfb8V*FY3>YH5%8jtU k?O@js#1B6g$S9kHYg=)Fa6pOh`9mU!8o1WtQ z`ftrg`M063xCrNfW9}}%5KTM=9GHRA00UDqe{eycPeB?QH5jUy!vcf5R=A4+mKA~V zc<^)x`1-DHRtt_6S~-on0XVe4>cYaQ%L8FQ(fc6*60j4JaI&T`5Z1IAp?qiAJgIFk zl7Ybw<<4fXfXaE(kImJCR$ &_a13)q>-2eeH za5h#r%+Sd&L-#W8({w+V(rh~xw#o8Ts&$2jBaBC(ha;jmV1$g!RBK)2t8_ggfa&@` zFeEDn>4al+TnZS@=5Z--NEVLE2?kxhf3ZKb7QeAMo~QJZsXZ64 e|itcYUqM5f~1wUqM*NHXl@bp%~T``C%9g*}VY79zNNie^bMl zFilP?WQ>ZEM#NSXl~2U*;d*2UwHQa1;UGUv(FV{0D*6iK2hm3c(Y~k1reief@j@_6 z)p%hT&9C_&n9Mu*$`9l5C6cSxFN^ *` zb;k*n(=xg%f|e`IW!`-F^8HqR`i&2Z^#Mf}b^kJkop1xq2Z7m*WmU+XK=Zaj#!}zk zszWt-c>NnGua3o0KtH!^K!)7Qf3I2v2#!#Yl2jizm%D?Y)#N!4Qqz_!0E{e5pv9yb zSB_eD#k-eZD%7=&L4SIUOBgr#tnOb(L4!Qk4Ih^fv2$YA_5-QHV2b6z*@vPo8};)q z-$R3cVTUNtx)@0=?#_s40oCrmta{SWG-`H;Pl8+ZFfst>#fGw{^53K{wt|XRH*Ccg zuWwkoslR5(E6(B#L? Hz;*Tj0OFEERAK#VjOIj7zcHBn5oQo=vA#29EU|^we9!vU^@sX%L@s80!M1P=f zu%I39kYs%o+v+#g*KTzgC)cX;4dkqa0r}T3X7Zm%- |@|Isi ziG=*!Y=;}eR#@QvFxEVb4Gx^E1Eargm1H77( 0o$x}Lrp60sks6VPY|a4or;$RL-3%AX+J96)ClYl#!svED=ZjR6vdO03 zcyuT>^K0^wGF0fcs>C7+-neCs3Zx2_<*2MEdB8PI3LyhB%0CPn=NQ9*slgE+ +a+ zc}U$jfsLUPrv&73O!b#R@hln*8B?Y}qwPYn5I;<1b5@~+zR^Cmm~K4p!0s0&R(5bg z1cHHwNx*Yy%% ~k0dP}jJMwkj39e=$jLZm^*Zp%7OF5a?;(~HTFy@I+vP`LoM ziDEgK `osZfu{1xn;4+^F+BZb5!_M2j$d0tCz){338*Y=!y?;+m z6dhXnBdJCTEf}S>tM&kIi~7_qB(byr7tD$-tMopX;DUQ9GR`QXMFs^$@Yvw6UUuPz zl*-0VkY&?pnUJyv?)9K$jt!E9$k&F@z)y6C;F4?7ki&L4yuNHJ%$P3IE9Tl}Umm_J z2v^2wCjfSmMRsVv713|XmxrKkHh;tFsMIU1pbukRQQdm_w~k S*~u5t4eJz)#R9JXW^TBFgr`$*fqyluF>|+&eCVC^I*MN zJ#)n|sjIdelfH`7ouNE_rMXP85J&oqWp$+C%BOQQR~X|=92nrPZ%L7p?N2!gFhskl z5CmA0tsTH%ZDv|PL3MT{2p;YG9l3VAA~0S}e$wUZV6fBLz$s?EzV|LLxSZ$yO(Wk1 zMV1pbNJ=br;83flez~8MkZ_*%m6N}}BWY@T9ayV65sz(EXJEKibqa=VRi|(?SSzAg z)hP_FRh?sDTGee^cl>Ge_TXUFw1~YCyAAx>KErmgXYy6~1scTAVm`poV$eU2s=!|D zS}>xEJcU7XjwdjfZt(<&252)3S9k(|<^<1^OTZ>Jxo}*I3N`e71%+%)L597raF8r1 z(2(~660#NH4R_Cl<62Ruq3$avWGf0X%zcG}WJQ67xEGVBz%+kXH<(Y1PdCh4iJL8S zd;`%5%3)?40MzP~4^ZT)J$&!!zI+afYPxO|1k}2=0szao`TzoZI_be|mw#AnQBZES zl`Jf--Y4Va#07QnFJ{~7qSBf6K1hK}I;|2zPnHu&UZq0 $(iXQGK;xEIM8NQT=PQJ #c@c) BsTGQzve;nkF zwdbSfwl>bUSxRTecC5s%yo1R}9CjFoo^ o$1+HPzPg=#lKheADC=5wKN*|=jlkETMu+p!6N{DaEyiAPO7V|WDM0R7G; z1(y*$1`o9}*b #J~te9@GA{R9OBAPKW=|*4Tl(ivt$#IH^gRF8cWf3!v;Iyt3b=lrtHMq4L~eq z+m1Et#P63t0i$I^W>?J6Oq<7o^XDJ4AKyP`cV9n#`|az8FL(E-FdX5>-S^M`g91`< zpYcPFLNHziw=ccfCx-O(L>z|vt~K_+mV*28v1T~39fo-h0Cpof2Y{|@5ZecT{RP-Y zGfohHk368jb#|;gG_?4J)6uYY>~s3(kIzU3Y&9fxk!(BWbi!~MR5}59jT%7^Erx|o zc(&s{ClI%RofDM($ju1`)tR}Bz1#sD23Lk)9qAd(NW)68DoGEtjAo9k07O{G wE2l7i~5-3AF46N4EH%IG9{+?`5nTM&cPW zRt|otsd9)*zi810$}vke5NWL(R>FmHOicnUTMS=2?$YJDm9ZJnK*nw;jcXX~#5eHm z^K7hu&&K-4ul(|Cs(sHU9ECh<)iakY^zONXm)ju7<^N@}$1?Xs+kzW^^27}FKwN65 z2=daeTJ*LmERqdG+G>NHaIO$@lR(RE=%M9t>_9VC{+l9Ufb+LHAHnLF1oe+DkyfjB zdMljMTRl*3)QZ}B_2nN6m2KU9n+X5~TV2N`Lz;&7pE(c7jdyoPCN!KaNHw3=z$Iok zxWnecW1dW=jf*mk=CPZ9Y6-xl9n*MM*7HQ6=p +u<(%Ml8U~I{lRBkAw8O#9NwP$ph`{vLO|Jk5Q`{wE5mdL3*nD`#&7k zlQ{~v-Wb{y2dS;t(Qeykd$~w{b&X)T48sAzX`5;<9E(%29dImX0bCGlN9hh2e5j;W zuYM?ssbmQUN$<6I_w6@yjNkAfK7D;a$N1-;pAbRhsuQ~tupLm)eXcCS|2%Ewf$|Iv zYb{(+y1uP{J8Y1FJ|jX5IzG8C{|)?3rpQNU@E>~8F!6K7o!EB@9I -X*r_*7O^cHXW*fVmdp0 4m1p&T?WAij5Z;gQlSNFNiig6M;^;&Mcae`v>ev@LRpS) zz2U3|y549OBVHe@p* vvO^p &C3HP#Dp?SrUrna+|lRf-wJN; { ~7DWTNT*ZIaRs|Y$1;L$8+cRVkb-3T~f(^sJFLPv&t|DbKZ>$3k^f2d*!Szas z#&jzhK{ix978Uo{!|>8k9JIga?p|(>i_%)Nbj$`@Kn6 Y7uTE)jGhlf0Zw1)U0gI8bM5*fg?Q8T|OT`WAIkz>kZ%R za{a8HHV59E!8zdAzIgyd%gHPNL_5C%0cbma0DvhLZ>gWAWz6BQo7U>cVgN+D<9$E? z?T+^WfwVZ@2LR7<>I4YUas~wo)oLOI3e;jg#U3&v|02(}{gk}PwzE< @SOWCe`Hcs?Gr7&NKoeB^#CY1cA@^r`WN>O4va##N`VG{0iv_r_3abCg$;f9 zHduA`9q*Ge<4r+uI9TmV0!X1`pDEc#(Ezaw;GX;R@DE*!`I+1$`T@eWIP(=Ax*KC* z+m aq0Y|36Kywnq_Qgd!0p%%Z5?X z=SLpe6!bacUL@FSl7!5%X0T|sYkSbpjTZWVqmN>*qtLKci;aM>Y2UZOADE9;OrmvQ z)Sil od$Klb>==ktxcmIk s&^MU(`_m0y79^uU{RGGc;pSsY+1GZsdoES3iazJG zGigJ2$S-3xlwC!?f9?K7^MU=K!`L?}aT5TYk3)Le@%Y7j_~8Y{^1kd`20iYm) 4gDnL=t+m8iBzyRE+?=9;Zftp9ZNBpv@|}5V86AFw+CXI25d=h=9TM&@ckF z7?Na7Oz@ab9t- su`1!1 >Q4n=ZU>LCcNO-JZP<03d zr Umu$);<0E!s*U=#)me>d}m|c_s44sE7_#g)R_xXb~ zfg_bBgwy9BSwX8XKtUpM0mMQ8ja?!3E8SP*z=EOaA2VIT2MAnlkM>W_g}y$ZT^&U| zJ;w~Oe=(vhH%9btiMATdI)m_WQP+x19_7L}<1vyCp1Mrz!&zjqzA-Fd+Xcci*~ D{6A8dwp|Hw~>ADy9g_%4RR-XL8(z?E3PttmuIj_u{3k zoFyV;D>8C2DV~X3Dj&$=HfK){CF7lz*x)$~e^6JAhq4LuR8MrbN;spzjg9K&jwX|5 zAW)^~=jbrvzBKJfYEtsRrXdZo`m^IW6b75=`homil>_}xJ}RfUji;kS?HvKs!f=|y zaDrnBXw4=ywqn&2Y37M)JF&(|L !XG1GriCi`&d-xL}=(V*glL5B#An0a*+Q!60?^ zE;G#G!Qoa_rd byof1uokl@4Hd+GmB=H4Pj^&tG8&_MIBPr?N!A zaQuvbF4v96!k@DGfxF97bQTNVcq9&nJhk_}Z)@}ERvdV<{hATbb@O*z@yqa`+8K*D z=q$1ZXnc#>6f6d@v{2)l7Fxi;OMky>ZL<#$*pH+tix9zFfHC*!IH;n8cVe_De=IUC zevk(|t$7s$%W;5ZKFJ>yS4j%7trjh^vYs|=yIy{8ic%gLQf)3F)t7DM$A)9y4nwtB zpD LxYI32%~2Z>tI{ zzo&WIbMxp>WQ(O(2!e-p%#R3if5!&1In*4Mw_x47PDj>WaTm*#TMlD&rJjEKlm8;> zP(M79vLd^(Du uz|-xIR!)bZuMVA#o>jdn~sPTDC#Zdh~ r){)zMjEq>dyK`0n8>+uIyK>oO 2c_*WK=`L}fOPp M`tKe@N@&RgjTXBo?q0 zWv*7$pBMPg#~*C{+VG!lXLL3WB;I+0hQQo7bq5m4^lTkSOmQk@6$*?E{UfQyU=J4# zOr#SV`aER2m+XR~;#$631>DoevK?6z0%aI$yq2j2135QBT(sHzaA8^*wFK??-*%LbcCdZPgcHu0%!uUrUUV3EEG*v8>w=IhR7W?1 zOD&y`!It>hAoj)7bIC|VKJNZ#s{*YHoW!GR>kNe04b2$3e~1bT=M#3`^3zE!@7i{j zfI!G8yiehBc%QQ|Egq)mbDC^QbbAAgOA z9_zn`REKGtO;d$IR=dNHbq5dznHvU;gxqH89V-eEfcIRd*)amJ-tHn!qes-WHjAom z@tPfR{B#jaf7bfPaAe|)rk5~5@+oAv;O`VSNN6@e21snY1`TF4%@ *5e zZeAhcMv3Qe$id OkA#E5EBb)7{p?MHB7@l_q3}>PD8-qmL&+J2R)Pfsga9j z5zF-TM#ts9X(n26o bwq9hq*l4xLeDMSSvQVojzNqg^ z9MLJ3e*?&r@gK;+NdNo+i(OCmA+a(>NuM7BL8_!@Y3Qeb@T}r37|h*E@W&L8ah_E8 zmavFC0; QS>IP(#+RpLpzWvlm}942Et;h zo+}I4WiG7?-))K^tYHi#FExvx)TOIOF$$bke*or^Z@y5qV;Q3O8?s|!;kEJd4IeCd zYOdZ70UPU)_PbUD>J~$JM?9+mwj+i`<)SNsh_5I^ZYv@>#F})x=g9WeXqdkB0K0ZN z84N^EuO4j*0%CH6B><4zq)ztg+$mh!xC8*px|q}zXNN023-)##*I>J&S**Tx2XR?< zf9;Mo=wm;TQRcA5W+|pKUWsf##_^ydfO#dPBZ5p@>{wfglhVh&!p1T>^BM??KJ)lZ z9(ah2 )y1J-wOy(6@Y>GZYYfOauUR8rIstYnMlz{D|~!E+REy`sVc2iuurTW}LB zdT4M1A(gPeeux0w>5|jJei)mShbzL6f2lY`?$;m0xv(eFg+U4s%e@Zd&>qHezX?Z} zC%VgIG*r}OgB=P@V0zXs5Sp$_3Whe2vI>Q!PTUBErVFef(I%VS%*l!ijWV+G!Ve;O zWl>VINZ%G~Q;OswSA6ACcw~t6eeTcT+vk<+jbjeHAQ0ZeYvIT*<3Y_`0nz8uf1LK> zv=HyP^QHxo(>|LP@||{|w2<$xBcq-4>HHda$rgD&JHb}_8`_EHpKUhVv=Dxz6%WOR z{sl=<%=hcF5L&YX5?z #W5y1j#O&)0vCE)wYh%D_xLoH^=CKgWmnY2O*14tX8tE zZg!AtxQxJFvfYLfuJSEvitQoHe|Mv^mu*@}ZZFxic-&qxYGd0jwl+t=@s!ve62~)+ zLwTh(N&fog;8*=h8dh!y5SJK8x%u$*{?oNmqjPB+Vz%Feg~0Ek+P(*1rUc2qGs<$( zT~D|>O0G$VBQ-0^>or=AqI-%W^gy2x m@QLRQEHC#;qg&0ZbEZHk@Q$}Z!a!DaU3Da-ljo`Fjq z8%Fjt8`__=0hK=Pz?+wgoNNtP?Bpu|#lC7-IOSbD+W}25yvfbN_Xjk=h^!B2jeS6E z?E_kKA3)ptelCIa3_X<~f6%a4i{xQ!ImqR&kV0uQTsiU6L7+Hb9#Wo|CjgXJP|=eC z3ZxCVz=A!MR|*guL_T+XG&_(T0~ES1n*vf?+t&p0O>=tm8B!i2RWsJW61yV-l~|OA z60{Xr)jolGh?24H+U^G~5{GiAU?qy$3&^MbS6f25#p+)pgM7` ZQ1o%Tg zkuE0;QniPke>3gU0wfcpCpgXcys>|bp)BpT{Di3d3k;!?%oBttk#K^f_9`3VEL6^b zc6}=r=(hdVtj^ihe;e~N=U4wK{=Vgdi|^BS*T<(9(Oh6|#E2%N&otjqdpJa8ANz7M zit~f4Yd#JN(wwJA=+D &PYIr&)a4oWkWYjb-8fE zN>>-&P9Lu;(z$3enWiZuN9os!P`m_RE3)tsT(w-qr@BaZfAM+^Tc%#TLC)L?=l81J zk?LMnsbQ$iMfoTybQuX)oi2j_tJY-@6g9gHC8Kmmm~XN~8$-X&B%@f1TsXAlrsYLj zE?QkQZJM0VIpnK7%3Ac6OkH0NDpQmqXR;O et0)IG zn7E>F(`6glHeYsI7kBd0uR25Wwj)0kZ7S1b4=6ABOS7Pem+sPJ5sp8~?37U;N@4ed z%z3Ddn0U~}HFP)b_nUbqN63veKwh# I0VxoYn z{~{Vs{ZBE_^as_p?jG-x!`mYPm6PY&N=BLRn)ciaZ0suH2eGw*p{Mk|Z2NM6Y@)fN z234OksfhY>js&Yf=h87W=o|xBg il7 zebozdu9LOgVq78;UjNR-+f0tR003(FsbC~kKLr8R_fye0N`H!hruoXJ1L(UFWFAYK zi_9x=fZH4i!U$dG5C{4^Ac$^wM~NhQXj`!#FQDW@JG6k}re@Xa9tVRInYr+q9RQPa z-70^F>xUp&i#AJmS&DPXblF0{b$KUZt#Vto!kcy~pk_$o>2o$!>T5LJ@76>a&(> zk>fL#eb@JDqV=tf;jJb9&ikeh+(QpvmV$Kv;c`p?X5A}kNXETJfV1tjRA|#)%Z9h? zGwG0qeI^>vuGf+Q&H6+vtW}>3M8M4Df>eJbv$=!>XFivtLz~eh40v;T0|nBo-hco! zuS*DkW_D3Ltho{PGkc+oj~+Ldpcu&$iT63!_7_)`Y>*>c7;$PaAU r`yv|{G#n?C~* &IKT(ponO*#R~HA^L$%d^iQn#+GS z?JCSATIUPRMLVVmjREeS%K=Vng)|(^m6CzAOv*&mG$|ik+oV)Hjg#UrwT}0&aIR7d za|$%A06<^kB-Adfv=VI`BH2l`iHx=--#r3pf)ZpgRbebr=jQ<>N{Yq5NONejjvUH{ zObdzu< XZCCN=*^XQ}lQZ8!M>8|oQ)El( z(tBJRAIqyY2gvFwvB~BGx5&SGGVQT>t 9t^q*OL=?@ zFHR=`7c0(=M-=^3lf2(4e;BY>@K<#zHp}VeZg sia?ss$?)&}%D!(3*NG74(Je%c?SnA&g`_^`!HaCGPF!10%1*B+G>xVae*k z-}pz9( *jHD6LeSUCfg%<$>zhKj5IGu5RarPf91N{oK%(2Fa`-E zK+5J|SRZ30digk0pU!%|YDoSd4L*iCh$<5&Ka~5I0C>k%j{uQzsy+Zn+x%-hm`tm} zL5U `7CU%@78ttpni5qp5?LRL@^n0CiV0)uC`QQ7jbz zY&tU!8AhF`iVGsP>j}_gFYOovB&ZMKczqZY*vC2$KEf*NtqFwbvW=noeAxs4-~GIG z{M!TdQ@KV0Z$7r75OlbE)&_okDCdIkWfTkiD*8?Cr_X-Se_`w!THt_@A?s;JH {kaY1Oqg`vz5n0KcYzRhT*Y@1Pv$2B}%XOgQ-6J0> z7AzYZ{v)JpF{ugP6usaHDUjtyD*YUsMA|=cFAc0!Krg>6>UkFTii4jn+i>vnWi@HY z!Cb1o+*10@fBlj4wD>~nwtxAuAimw7Tn2PQGMHAdhiePHXvC=1 <&MP;S0ZHCGx4>W1vt(39NYSYI$)-knYtW&3JmM`QKy1kMR}T3Ok!fi#=-F<_|t zKRN_MlMR~5CoO_Mssfj1+eijsai^yZi!JIg_`u@4f5}-${7A1`9hAiax(>4-84ONr z?i;Ex&7*WE$nCS29FhK_ Nem{B{8`U5#L!v9{MOZXtRY8GK4XG;v zA1IbWC?7V?@eT&is_zc~aoXQtfax8?vC#&~2IIkmyx4Rsp)UT=4`p7NYVQibRI+6* z&kM>qf2rq%YQ9_%1m>4eID8-!2nrtw9l)~Fae=VxPF)}zx=$OJ+m)pNdz(pg2zN7M zh4nWxEKzSO(+l4aUlg9*%m@M04byUFjGi9Giu3{B4YINRP!EI`Ae;h(Fx)f5u;zOP zjvO_-f%Z#aIJ} Tp(xI@Ow0Sqw&e>g)3=ujdB1n21Zea|@}wh@Gg63(H5 znnAd*VV$&M50niE7WfL|hCk1rooSZZ4@!LhrF^Ev54xv4wVCGd2UZ6EQOu@oSKt8R zYITb7$m?%`@vHW*U3j1_+Q@e4i|*8ypWDN4 S0FO? zf1zq_gP9SLOLe_;GZ{;ACYZqvGAq00#RYU2ov45VUI3g7rp!Zq#%+ N7(b(E-oafAw}(SETAzyN28sUl&mu9*d(4CH+$_lQ3ue zf-Ci0A=w-`ODV4LJlyO#FoIn$A8wFf_9%>Cmx{t~w4RpF^EHwhUg*W!3CQy`Tsm(1 zQ18q9^HS*hd!BXk;yyLSJnF6~P_YiUFc*ZzP8wmeabE-+%?t$H%?8vESVPF?f59V7 zGaFDn7nGcV&H^W10XZBA%EW9r$-zR5IR)d*mYW=GR^{faO#%&UlJi~Xc|hkaDu6a? z3eF1FlJ%@$Gb<;CCG+6HsUk8n+^i9P%9?6kwAs{Sqn4RF#Mw$81= kK@e~i60hJ$(HJ4>X6^(?OFVc`(mr=9 BW-JL-oK1e~Wnkl-kJ;kSl-7{0LK zv^2?n35L2ZNwz@y#Bdj`Z-Qj8%Ek$f5QpUo(M4U>&FmSBsLN(Ar&ua;e;NF8>He0Y zip#9CCcOY&HuWXTF*p{?g?*DPG6EC83+IAhIR?jax$thA73J(%fT+u+KciSKVcze% zeKUU(!C)8E`(w@CZkSbT09{b$>$)wv;*nfd9r50&KOBGAf;l8xF4=C1O-1sh5=}#2 zHpz6V W-3V}v7fg^6A@?bV@ zjCy&ZP2loU6cJnXSt@rl^ab-p=gGVeRUAyQd|m{vCVD7##rjK0f9?xX=AMeKg!EK% zHRLt^&fnL~_Prpnm!T0y9C&CEI+SKD)+!g|;DeME9y3{ON!yBN`rHltp}bE;z6m+% zK8=T+#$KWjFyzI`m;%3SDN~7H7qzdNi!y=nrTlIcvb=vd8yFv=WV?p!R%Km(+3$`@ zdBjKt%{1oWD&VaMe=rsz9?D&mktXCSU|;TVBFro}yx-E+h;6vf&i9*a^X6_g81mVc z Sqn9{I5kF#K7`_wG&yF<;8mDVx8Z$**&3EW?kq0;~vw%NwowxyxatDfZUff zQTDV3*0Ps7l%_Y^?iiV|K%PMv55(=WXX|yn53o0`LI+~5f4XclD=wV*s7Sd4=IpvY zkaE{Q1V0-rAO6jX8CXbTAX{m4d}hem^J#WG+UK&q<1kdXe79;yTko5-_e7W;*i-)p zf#FC8zqNHyZ?|-k=)ZYt;)@|V4#S1l mMi z_OHeq!nbU?f8mW=+3l%KfP3zIFemN4z-lCEj><~D7RQYy>!OZI+0=A^drU&n!5xos zp$75=8pk6vSba {(2j>ki95Wl!ez$7r+}Cfpe`OxVWA<4{mQ%9hHm{O(!F1i$ z>n}MNp7}`I9si}q1337J?D^sM6 1|;Ku-;WmQ|O?lvn}M-6In4y0Pc>G)%?-EG91mCJEpWR5{oJ(8wFyGM7l@BiX& zSq>-Le>dflG~BjL+dcc=ray!S|15~#kk$6 k%UN*P+;-Cx`HXNKw9K>M?SKFM zc~xxTUG%wII{6IhHg8GS&Iu_O#>s53f1(rF75VI#kECfsEI @s%{Wto<@R~AV>{RQVViv+vz21n z< u_We`S-@p`7Nj6)SO#qSx?A8JHHvU0Ax zXy{0QW&^8ab7x6I=j`*$tCI8#z-iz@gh>Ta;OlJ>Ce={bobQNfc 7R?SxeDD=L 24?^S&YP0$3^$4M2kG(JDMmJdhf zE~ K@4Ri7EB{DJt~?W?xIn`x8^_$JO@vrPUIaJ-2-m z{(`OMK%3RKFWzR3G %7okR;TQtNx6)+0Hs^!j1-a9U;R zN2*YBQX2gUdb;AYbo$p-(Vbc$fAuY7-N|Y73bJqe@>NeLfAmyz4=ZLP{iSCvCY4U0 zBQ~q`>NM4QeVS^$dD*dxS*h<{cmQM8>iZX;^O^NJjmeBzw;xYfw?Cc8Sj(*4zrOH* z%cvE0-KVG3tJTv9YW4c1N2q4C-khdd-yL`K{1@tVp>FgZVU=3rWNG2scR$jgFH$oY z`#ty{S9m$~e_pNHr((PHzsK-$D!yKAiW5%3H>h59vig0u%C;w~-1n=zKIO9a!zyb| zx9I&y+m`%fwfhs?gFfAQ@vp0P%WvYGqJDG$`AEK=tah*l)a={tr4`hUpuO-IK 2mnpJ*D z?qr6QT%T7brqAmW)91~J>GR!*>GS=G>GQ*h>GR`>>2q?!&5>RwG~yiVb|Nc)M%_+l z%sJNWgod4C Tn)aKPmY4iG|w0Uz<+I)9X z+I)Xf+MLAZ_K9p!oX-Bl>1FNSw}Y#OZ8BoZddfX>LN8cOXtp ztJ9bUp6I^ADQ-HP=#IllZa19Hn*K>G=%3VT{z)z6pVT`3NiE`^)C&GdE#LQR_opy8 zf8)yhY4xT#8D&muuz0Fl2q(LLaI%{Rr@M1-qT2?iyJv8!8wRJcTOhUyPNAU^8wID( zHi>P5Q)rIFCc#OxKw^&|JCQ6pk# |y4e`=EnGAdy44CU zYp+%dm3f5;p4MF*F(KFR^6Cm2f5$4@lI7!<6Iu=%QNfNA$0eJq3p(O}x$J^fSz%bR zG7o8%ug)XJr7N^bc$|u+G9IU@sf@>~Y%1%L)$KOhEIH7T@W+Y7(gnUJT6$RX3Fmg# zIMrJugT@5h35(tmBdGw!C7R<<+U1((U=5Zky&(!LH6jb)UbgE9(O~(8e?3HtMcPOM zG5Ojx*>U2y ) zByMzb7+=g#;xMN8fx}^Ze{9AH-mAx~+>_;FIBj5Z7-w*6e;7^cIwv$2%MIz4u3wa5 z`M3nn0S{z|8XF$U6){?ygQ_Lnk=Vou1kSi{sW?J~oiIK-lxxZg%b}bTMoM#1^7pRi zWM0?XZOCv5!v&0#SUA`Vs7M)j)=I$+1&y6IPNE2IeWsvC9737`e;;-HXbM66!J|W2 zVvZb5=4$EedEKpe iE(W3Ou-!Ef|NWlTnii>T1>1y9HwrfADG=P5hCoNj$8w_s?F>%Mm-vI0$~J zwsHDc^)R9d1JyXff3TIPc+9}nr-{I4%hkO}J7yCoqL-H@a7 ;c_zmcAhFOQ>9B G%6;4GTS1r3XAd0`9kx zSNZ25cp&92f5b2V4Hl3d80=^I-@B@7o&zT}J$5i??8IggMeyWi3VPHmWC}t2Oyp3O znAyl=u9$n~lS!sbd!~?uw$f9u )ND$N5ue;>WUaEMeo>c+9{t z?L^?S<&u5U^6~_V=;7@Ij!8q@2|Tm6M-ijkc+3UWe_f=^95lrBv8ZN5+(S7YGGH_( zLb9{rfulJMJ{Wh3L8e2Pg2#3fNsbeh#iN1C@M=^%HSG|Zu+{zp81_xMU>u?b^b Vkasy5XH<@4xx*gt{lQMWyUg*FSOU42p>0ZnMg8W z_hu^7f0Rv}$y`wf*Cw(=P5Tbv2tB@b2uIB9aw<>!1amS|{I<_Ts`%+_JW=d Lfpa^+`e*>2THTYoM*!8oiEWzt%6A2;~wk9$}Ejvx*h+m 2ALffo~@Np|A6G gW{O|am`D}B zf2I*n6uYKzD8qtn&h#~ngSjS*nW8zvrel*}<7XAqXeP}lrco_c%pztJ)3J}B{-X8c zpxHzS8)?K95zk}-1BT2cSil?nb5U3KMd%ecl_Cy%$~bl&vZ%4_fs~WRv(q_)YtD3v z$Z_p-qPS7ufjm*8v;(*%jMThrUA75Xe_DWG0c`;WW9=7h$in*F9y$~=aQ$;4aMZ%* z1dfR1`w8gLY)%mBb9cT%KF_7R`4HC-YwUpH__Fg3FBa z=aPoHT;}LBi{=SC>a|3(KSG|j)i=X0(db*4=5O=IM2nTMG1a1_>{`Ade>QWoKLlQ; z?PoifOH`5(^1PMA48KGru`tbFNybErRgy8)qLqZs?x1&^xrS({XZ-^6Jl(90zDVVR z*%$!-eNUQa-xMqaxPQ>lKaElVoIqp0!g{AtYS?$o?^=61(UqSgqG*P*tIJ<5uYSE+ zU3`9be*129{qFPC<;~6Ir(Z&{V}C~ekC!*M$7f$Zko6ZjWnX`3y~TS5x}3CKQ$P2F zM~EUk%E>Rihd# c9Z0fr6HZc&$+qPh!^Xtpc^zY|-AJ9Sc zuwi)O>n}7JLJ}YVpQkYgK1^YG#x`K>O9|^uST!tP2l-gE-HmkisXZc_#D5Yr?3p9b=J@61=w; uC=mv~AMhb0T= zm}8;hX(3v)fZ8}0ETRTVC@A -l75vj|+EyV~S-8iiKy%a$=)gu9(;ukJ6L@ z`N9R|7=`4>1?0Ge<3$RFSbtnzuyBkimMI_>p0lH--qHod#`r>o1v|QRU3H}D78nj$ z2+7xCIktuSR1?XP_2J0 5Of4x&F=Jcn__gWGTrlq@ikce9GbJT`Gvglu@v z%Q-wiaXe;usrxvT%hVZKNIL%}CWi8EU$RiQ^nbqD`uW|>?K!(=;Hq;9dJOE@x-96d ze8r#x5@ae5u64tPe1A^c=c4py`c$HA_VsOXf4^j0TGIWxTPy+{$(pzIQ?(#LOEVk| z%r478`(Uy(2i&q=mZ2fE6p_b;p&azbOD9)iA{(EISkhjT$X2B1Ip~A5G`!8_z zCE#?gf*lTu$5eyv15Reh3A2;L&uA@00uAzV`26@LiRfge5r1(@M54o9nr_*w$HTE9 zw}&S)951EX{r!FMbvFD9I*7~Gv`o!eyN96j*X|L+61CevGHdM~;V+v+v)6(V!^~y# z-PfX Z5`$QGIm$S*wo >7X66=0?2F7< zUk8};*V!S#67_b>F>Bo&!Y@^Shdj&H;UU|ixjuVc9ugcanP#rjpX+)%XMI-i=C8{t z_!9M4$Dg$htI&(3$?T #p94(n Sx_`mpe7AGeP9seuKJC8lvwhhGnSVZ*@P?Bt79${Fr-gPq|4#Hgbl|#rAX)A= zD;`0pHkzJ-CV~c(Ga2-P4!tfbI{cz~6p!Qzj_3WvJpCD@6HaG3%l6#^sk&nA+x`yc z-LU0RcDv ;yh$r&>l7qPXZzx2=%d;!9*AoqS{+cp|U#jpL zn9A&qlt*D&rlROXOI8(~Y3a(Mvn^R&et*UD&dXJr9{)JmqwpOqlN8PcvWhQq%$`LG z?xI Wpp4{;m!`LPyLP$K)Z;JN zT#dM}+!U2sa*jlLT*~8@PL+J|(tiof>T+dMpua#W_SB1~;Z;^;n+0olkN*PcsFE+9 zlGpp)jx1Ond;I0wN`>oqZKXnb{Gy_gFJ4sGO4o8lrN>{ss3=^=D=I_M<5C{KbgJY_ zl}^4Y_ZzvJeHx@gpJi+htA8bV;kcX~DZ2)&Yc}~iUNqODxEzlX3?LtmZGWl8Y(V2b z_H!r$e~{~F3D?y1_IPaUhRPB7=3jprF!1w8-BCzZT648LCF?w)@mRK69j)6O@-Ee5 z!o}x>mUDIJ#Tvc=%>or^z<>pgw|?tv{Xmvyd*s9H#aI?CUyCeDtH2AZU$4KAe8EaG zBv`bnjK~(MFe4sjhLF0ho_~t&0d1)sla)5swApT+kHEQDX}qj*@^$tiC{dSF91p0^ zuDC>9RPlP>EulGwT~76Ds_RqT }+u!!^E zaoheT+Npea0Ex{ZgG$w`-0hxi`_p_6EpD^&i#y*@1^#diyjBioreb* #EvsS7lMXQ2HOxV1FH=LCi^w`Pg2nv`K!*?_IsymsxZCv_9Kq8?x$(t|Tu*UQ|%f z?w((O{e_BoWWRhc)fqqa2s eb{C!QrGws!MG9HgYt=h2q8|LTKW_ zVKez5tkdQZvubcyt8t(naYt?EXPrF8pF@dB!{OOj4{And)PG|7(0o26rZ?;J>F}cU zaMDn9CeD{Eh}xj}MM}UN1J@Z 94+VLZUxNG`hs;%JI{Zl z#*Q>i9W~Wv0)G+HY%b8%t2?s7ciy+8;zv5&hSw~tZn_6j?qaqyY4C{1VDSFrTU;^i zxuQu9S;Re*HhQ1n5JG*xa|FTzYFadH{H$s+#pIFWL5$OeiPI^MnR$^zz-jnXM_d!x zj#5b0Sw)8vS-$G(U9pa8_TzZ!vc&r&K+`VA16c$=R)26xZBw%Yp$k(jmvjZ3-Hhlk zF?>Xi$-?u?2zXF5t_4*1rVt&{aUM#2K zaGwY+&E5|N*>O2q&Ui_Ya+)b2NIoW_Zer89Gh#zv}ar*qCpc9 z%+TDF27gWCoJKZfZEG^^lm=}EvgsQ+bCADG0w2=pA3z`9n9o4=BKdppM)4fn2Mj9b zqK{scnS=Pab!v_^n#uH21`jiky+EBBu6@UzKAM9VN;JH2Q)J}}Fb_6+j>tYog}SKo zqS|}|C-pX@tT##9<$uoWb&|eHhJGlO$j_1N*?%_wZ`rOX%JlWOuf9bjG>>e>QbV7^ z&jfz{*$lkjgu{xk=lhKx@>K-nD*^e+47t|Q(Sz9scBkpO-flB^^(_QbguUQDEQl49 zm_S4x_JaR#BBnv9S>&(Xa5-5+a{mwlCd0lZYsi`(%vqBcEvqH402TtPhJUMk7}0r^ zOMk!pQwX*Uo&G7|bHL==vp>0!|1}QzUlrtk^&o#A37vkgf}efwgn#wzw=wXqD8aW9 z{?*yHXWx3@U&X?|(%@ft;9tkWzt-SiyWw9&CeAA@abEcn=hdrN_*WXdCvjd!YX4f( z{ }aew9hwN~z5d&~XnxN`qmEBCLx<^J`nNbO%~ z+WQLT>(`O+uQhmI$$9-I68?<_@5|aZaasFD%i1^ItbOw;68@D2|H=#hDi;2g2JbF8 zZ(c`g|60@Dm$l!;rTuqW+JEOw`|n;w!oSksUwPqQ#lpYR;N58t55T5uS1y7@k$)0Y z;FO?~g>Or$eHaIZeD`=o{}{3E$sIIiL1PdZ_C2|SvEKK8c0v9S0r`V~{J{zNV+7=n z0`f;QB!8VV1W^R#k9->8imD?`mBA2|PQriBLI=7=xl4nik@as`1#$f@gh__|A6W(I z@|`(dz+O_&)Pw~D14!ms#5OCc^nb3&s`Wz%oErR!{!Z9$3v{!7fXKWKLzbbh;3q`> z^`9-k&%yIt8TKlBcFc2muvZa~uLR^PC*+$5$TtG=jT7>R2*@7 VE^@&|i-JNCf;o2K9T1`n?JTz~<8bB$jX{H~*pZ5TEWd&7Si5j)ypw 5>ax5|eZU7TJB zs}ySR+y1u^8XsQ|0c8Pyh5zk9p^LDu96+>73ju*(v_G>!@O~}~h<^u`-J=aOr{l;? zowi+8 ^pG$lZxKLw5Otn z;5#emm{5u&r&F`C-a$*3z+p@aGFy2^Cn}XHQYl_#Fs6cm+6gjEEit$B?1-3@8H 3E-{u4rqpulH>VGk=y%)6aT_32q7~(p~r^D##x$F8}D}5gQ-er|5msbzzCGRSgHy z5(;kiMQ&@y;+5oRmh51@Le;nAZok<;ks4={^kX?AKS#2-f0wp+B`76dGyJ=6p)l=o zbIYY;yQI$(=9O@-1icdKWz=K+K(a1v9|-Bv`W_H=`}{6-ZhzYilo>;$I>tpGAgS*` zm2V(GvL0;nX^Q1qN_$l31G`gQhD&)pjRKcKeJS9T+eii(K-*d>_n6UX(p^b{lG7yi zPPiq~%|c1mdl+J*-2)vp@0$i%La;X$#%z^-C%h8sm2j^Fyo`F3Y@mZUbbL+g(l%}O zRfrNc(T~g>`G2{4Lfy^uMT;0M)wAAL*i56*H7K97y9i1RKgdTGB2hvl%(fdX UCQ^h)0^k2%f1?$5K}Olc> zlHPRBB{4*L9Ee3&cASvb=x&FFh~Aai`in7M76vYX|9`uoarm23wPCnq8}-{*M#2|( zrmA=FaKqPB>VYgK<=a5wVUADK!2vTYJfWJ&K^C~SvRH*`WDt)nYvMLinzA!fQxiwx zjA7o33s2u9{9IOOiNUqtK5}VG=WoS5*cP{~s@v3aBjGwTZ%#1}R9}yZ?7aHKR2xfQ zu`~0bDSxzkhRfpHC{iJF{S5ckw{C*2uIW_vzHZWN-__7>bhe?4jn4vc3(g63PE=>1 z&2>}X7o~Z8D*agVDnCcEI6kei^7(hABc@*FTBgHV1kZ)5=)b|$NSyDt+h^LbSENZF z3foHCfOIVMws%R;#Ync(lFLKV2X-eNADVZ?mVau4=FLOU4N^C3AdgN7IvM#Oos|R# zAsdR^(o9iO%t*tg80(0lFp&5aCnD=>J@Y@4l4LDOf2nB<(^qHT8cOacj6OgBAs!^b zAXaQ;&4H$EQ$G^6R8VXlO8U=|Q)YS(5MOyve3RbSqaf=jT`T2Qm2^?ju?|+tEwqkv zm48+~%lS$pLw_tSZMc60{xOW|Sv4JGT4{Kw>n~GMT9f;kegvhleRtSGW7s7&0&law z(T)PP`0nXkd*8%G#vpwKP6>5Ngp-?}&Q7;`I#cs)k=Qga$zL(Yq%mxr7`3QryVk_e zGJ#L f|Y 5e(4{R&V+0=4zRT=4C3n40qdvfYCKF@O4D2II-r zyl4(kP{%Q82qD;kSsKEoBBV1;<@Rky8+ZYj?jf9ghC9|V0O&IdlCU6&R33uplVF>c zP>e**U~y{qMMokvw15chpa_c0#iEGbHqB)8Y%2|8Jv5P!x~U4J@ 4a}tVH?HqMlR4@ZvD1YurR}Y7n2379C zk_;Sjk;NOP2(+o^)AMkhyh!gcK$7*tc9?6>K7$8vXu07-?C-vP1O3olk;4IEcC$ZR zLnq1yK1!#ae@@;D--P+PRHMZp%ku~=xB&f|(7zsNcHBN)KalkoI9m;?a9h%BNF1RZ z2Gn4_|B?uAJlBNY9)InitQTFJDqLp6t4h&%I5uTn5v*;yefxl#vyZZjBX$9SHt7E^ z_!9zPBCwCL^ymmj-{O=(2|$M*9`v@O^`k{)^Wy$qYHm9~W+in2Z7>Gl&yoNF$Rtos zml<@#)vk$+sX-Q(&1CuTG^LPJazu(digjf@mtxewig3+5*ndzKr(4X!sZBQ?AJgtR zr*WLz0mgt{v#|Q`JHfCC51XvL-J`Oiv56_z136{k *SJ_oB| zlV__gGJiBLzt6#nv{N+@3qFdyL?7w+@V$qO3UCrUUT*<^ddRvIuN8`I$aGDo-$mMH zk6^n1=Hl@+GY<7P8aiRO9QlT3LPIB)352E%Ell?%!@oJ=qKzHmGsz~ek3Nh!_EXl; zsWBdtqooL@`*mX(iI{@2F$wyxW1iB-M}mio(SIGM9XpNO6lp8H8D^?ZY@2v%*o_L% zL=k42$y>HP5;XvBOP`TP%+5AY{pfbe zsP3eu%An2E*2<{V3=Nh+#mHJ{)GV?hO6k^F1N&fV)$3hd!2017>@7*fHY9ziKYyUL z!}P~c-b1Y42@juMETwjOB82NR5_hEwoCvGLCjU60g?DcZxneu>;}Cd|v#g(R16@9> z2z!|Omf2&e42KEKOhHKJJWL{Ag=}GGl!oyt$}!R`hhxNT*BCE4S#+}q^FWF2?9+f* zOOGRFGJ+4kd^BZkycz8w5>kSSe}8+(BBRs#a|=&}u!FinwR+#}_-^MNdB`3MM<+R; z4Me->!zDai!op!AD#F>6mX{d08$0Q0GXi7L)dM1KL&}uI)3R-EGsdWyTvL^(zExRW zDZ9K}k(CM=)?-yw^o@ ^-cGBa7Ui{ X~bBE?e$ zaQHuhu9x`$tvdX2QFzA|BLX4u(J-DEfVTuJh{nP9GB@Ivivpe|VpoB%(+KAo2;S1q zM1DFMX^Ku`)CJ)d2bO3*W4)q%3^s-Ey7+S!M+-K?gmlWJ8R8%Qh<`1p!2H7>T}og@ zT+{A3f|^-)Lm~Wm20sI6a+14tbZtajj8U c(iC00Vgt%ZJ|T^xRZgrS250~!eFbkUW$~GawS>zub_H$7&F$8Z&fabHK}5I3 zE!U8)wSnPuIG1MT;D5*^I~UJw;gHT%0SAm;r1M-Ft-E6W;Yz}iKu2=(#cG#My5Kqg zlsBlYj1$v96AO) P7+%-5g@ZfLS?8~T( zR;8}+Wbx;H>CWQ8)NER$9Uy}_o;&)Uimg{_BLLQuX0vL@W`F$DfEf?Mr!2gbv_iLE z#B%q(B@JyqVUZz_#wdG^uDCu9t_ix@>0?>|PwlTPwO^}^MFpls*Kpmsft^}VJr5*y zV~C<4eQD~$o-X?O)Y>()LVXQRf{~aY7Y-i2NS@YPMA=Lv&17BS+u!%)b10PqflY9d zOq|^oo8;8brhm||*$R#ESZ>(VwO&d*Q(Zsx4Tpc)WmLh6BUQo^*))Vqn6+tIrl|N_ zW!qvMohU=Gx6HwxBm==TP081yo65_D1-n!yP2PcrO$(61F^m8Tq#w(@V=jG3v{63P zPrcUJy4z=E`JBQ^Odz)d;OF|OkGk+mz{{o$yAMIzp?~{*$>(s-+=yFfRyZNp zr=ic>4qW?Zn^L=M-x9t?7gZV!g4gK87WUjFQt8=gO(`}N!HFf>5FIq{X@-}(eM=ac zY7^0wL4}Zm{UkJBI_OrC46l-> 4lI?Tbk!@_c4yA7J+nb_K4|Q75c`_}9(i&@2 zHFE&`_J2?(MVoLhH9h`qpbr0OF$L}lDaK%MD_;6~(AidLi;8kTS7eQpBY>a42-G@8 zg^&z3bNf1WGh1_5gogm}Y0f6uY%!=VC#Wz4V2j3V9jPuuQ~+c4ha|#4{x@=G$@77I zTiaA(7|dvY*9mMepK6bnk!~#R;(zzZ57d|=B!9ex**x}T0^nxadN7m18eAXThg)X* z3YTx$E&Uh{qv%KBh>aL=a~GA6qdji6A)&-0xsPz=kZXW0HcI7MNmN|Na>^YPcPzQ} z1EwxqH_waCz1OEx+vRW3Y6350v>OGV(T<<0inc=*S)$Cc+U}aUti7*?X3hqlq5{D0 zv41El{P%UUbto!fL{Jmjm3Uy#qzHHlMfk&lLtlLv0j@)1L3A%AD98?JWidhcj29Go zHPrJJ@E9UriS1l_II1EpdG$;NrdaQ1Rz^ joZrIdXGtM7&79YMF8wJApjP3w`MI|#Gq3Kcp|HxSjFgNMvz+Fz<-Sm z^iFzjk50^DGBb)H+Lt(;j0n9>%>J_UPPX=1D-ii*JiLx2&h4|dBuX(mOs^fk;D>j) z#OZ$w<5uyRv{emxu-(N~r)RkCEG4BLe F>I(#Nda6MjZAs hR#u!W83YUbt*yz4?fec^4B7fRfOM3#@ zNjvuyYZsofu%RE9N_#1o)kvI#y4dO9HK0|6Z#jiP%tqmzPcI* vB6rW2}T4p zq1~c=0GlT0D^$S`gEUj7lYc;FZF(pf*aRuJZVc*xA6I6$7sLF-E+MP>a7M>>wztQ$ zNnUVg#%Vg(E4e|C7U?c?9pqFPweaAc@DD3`Fl;+cB6vUNI%`^DTNUdAutZh_3T9af zo1q pjn; zr&lX>Ku~5ljY{3D*nZV2J|~5q{0L!R$PhQ>`)56_P@SJMl;O|LFK$15UftZD|8nte zb#eaj k8M4~=wXokSvn=$ z$;Z8e`;hKygnwpYMG)|LvoUEw!ppSk)C41E=M$QCb)o49r*7;Zf<0!62-iS{Gvn zw-ff|BHQ0}^{!Y)#IYB-5x*P+9a%qsRhH6o0(V3+6ucGR<72o(O3@_o0$x{iT2(o^ zlrgsr0p|2rj^43~B0L=0X#G?7&=As_DVtWvf)TYY5Pt*qHqUH@5f_mAQUAD0>;teK zvHv#1D3?X#annL4F~xd7 1|F=VK>&kf^W(X?6^S^drw)-25%Y(B&c2wuO{Sec* zcCX{@tJnnSCFCy`d}K060r5k{{wU43jk^Z)W4*%1p~W@khlYvZG-63QBKBwSRW)vd z9WAw?A@GXZZndi2v&CbcCqh8%2tl971rlacu75@=piICR6KPPIZ=74+?lviG6TJ{N zsF{1xKi_SjXRDCxsgD)w*h8pQF*b1EleR>KGE#~@!)?n?A=3p!|592Dhg@QfVNfOH zO01m&d{Xh!d=SS#0(=trY2^rpZXLA+c5X0gDT^qsw}|HmLkQdexDkc%>3v0wFe^l* z^MAi()uwL2^!K)C@p%K!yiC!@DgUWT-l8X(B<=kTiw065+94KsbS+S&cqRA?IQi>< zHu?_EXM>bBIv*9+E7q+4oK<;g-LugHv6feNvqLH!?}I{Oiid$_C>q1szfE=kzZIl^ z*UX_)yRoHc%O8NGKL!$*V6A=mR)}ICvwygL>o*8&ETZ2JHWR^_gdlhk5RNREp|p}4 zggKJXO8S81m%=`tKtGlp_;V!3=9Z7JTf;8vT9xae1_I~&3s)741l-aN#-=J<^<5zu z3vnAgm DdzIW3Cew0l71T7z!(1NbG&lU)TY^vjs_dNBWBZ3Wq 8lMM#rsKdg{huHs7ea4df^8o`5?m zcHr(&iN*|%TCfQ*$sJY)jM^CFKQgDJck<|fLwUSp<(~l TT$2G{N}U&|?#ZHS LUscNQz8sG z%+hi#WEZCaHsiF-R>aV6f`2*!O4W l+FdK=K*jVN@n8~SBz-v(sRuPMtC4+UvpAN4t$ z*NOmJhsuhE^zdlY?sv>AMiZxlA_vU)iT08leA+;0QsJ>8XoDwPv45ida8{=0Xeg_B zv<{d?;dn!Z&dE6%%K~R7Hr5a3$SiM3LSsaYlm-B|67uAuEoS}ENQ~0WE_;G)Xa1B0 z_cKFkM`w0AlQBv oc7=+d2jG zWBmdC9LeEMw*)Y0+C%VwBcPjgQ|zqkhTNBTO6 (+$Cd`@^-Z4fS z)Shz?Cfx=IeEmk~#eCr@Wc2-Jd|YCrQyW9ydP;yiJ%G1Nd4>iO7)5Wyu>*en6 hoqt^2TztN~zP+(9YfX6+ zvr$s(0Zds+oNF?|o43DYJav*G3`hT4=I5=ML|X!JgA7mkb751ZR5Tk+mjrAZsFeeN zPrNcY@$#mVzOx#uiCI|RoAqhHuI5Y27Tk^l2MbihjqzFdGP@Yu8U**Xsl~nd5^ZRT z45e=LZ+{P2Bunc}TfH8}k(g!mN^GJpHdSVQA%^?%I?O%{(zu=Tm=(Avowf?3QEvs* zAa*WXlGaHWMI!>c _OxG-wS1p4WZ6q1S|!h! zJDX6NSGxqc+LGL-9d$*t={iLMs!i5CCQ &T{Vo_SoK1L#ar)c1nB@nm?m5c)Q|G#(L{IvV!16x2BNRkc0pwqb~^ zwMyuBOu_)iGFq)2Q5EYi#B;z+3&Sh1>SV=Z15|ME=G=&4AQ(>QHl=AGVgkPo?PiXE zaesplwg&k#p_60g2EvU+*izjoM@Wyd$c~c|*qaA$Yd+4i+RFyLz4o9>Pii!?V9b zXkp+Z!})e6d?UDQ2+~MMhO>6*;m{^8?(a!Mz|4R!Xx8;1(h!^eBmE*U-^!rUR+rkc$h{eM8Ynoa@AI>W F@CQh||lk1;d~%jg2bz{|X@qz8ZAans0y4S94j;wU$K#VKD{ z$?dwPxZAt#eCteZ41PFPoE)Vilz(&SY1Qg(UzE9WRhqC@i$fK%iT}ji#l>pkNgO-} zO%R|fI(9iNS{XM8o~0(J3;GI^8<|_NLBWTo1LBmj0u1X9_3 2 zn{wSVZo!k1Y@P4iICZk3ePABR4f9BZN2r!fk^3&Sx)oCZKG5HW8>|lczwNhob=TC@ zH1b~je~4d!#O*FyPc9%r_=f!rq-3vg`AqaUiFJrue8bCNn8%~U27j|@DnCl21!ekU zz{)I<*t<67&pI>ceJ}9a2*Pgrv_($v`XX#Tf>^qxgBaSw;z bwx`dpMrdz zfC%26ge^~ugY 3| zC4b;yzWMJ?O*eI!ld8;~>wRzrYce13<0F1pS(q+(?FTM=wZ0j;%4U>hu}q|+VXi)6 z-)0pp`AwhWPa@E2voFFk#S52GILI2V 8^Y>w}O%{zNZ+HAjrw~}h&t=2P+bm;~)vIxr zwZ$6b`SBP$69Ts}Llv
*$#eXplWI6FIE%}6gy`8o;oDgypmUIvZHe6?Q^wGubUc|oV9Mu z6oPeS=#+3L3l@7J6C8F5xT3lhejpY~2Hy{~U9I BiNd6CAF9zIQUjC1$^<0tH*a+nr*K@~q-ks-`m{vE4Mzb46& z77jG0jhb5%lyig5lbgz=@@lf4Du%d+{(t|#7v7@{Q-o?>Z} qBG8fCHmf>$nJ)80I$8-!tv zgLF*bG=LqE+p1rGfg=p{j-V0aeN(chx?vV^*VIp~z0@1X0|8Mq!Pid-nnI?b*nbn? zFgxL)!W72=Mati`nWU+XAXS3{Z&|{f{kou2DRU}D2}Lv}@3=|nC_X83!+$6YY}#rp zX6VIB7ycfKVRurs1x}Cmja8=}NDqGg%gtrNKTO#CEH-q-0nmMDad;d0=>PrSjmUkp zJ)kV0J^o+mIC}f~`yV3GU?lRN+