From ab66bd541af80ac85129213700d07a844afec747 Mon Sep 17 00:00:00 2001
From: Evennia docbuilder action __unloggedin_look_command [look, l] (cmdset: UnloggedinCmdSet, help-category: General) about [version] (cmdset: CharacterCmdSet, help-category: System) access [groups, hierarchy] (cmdset: CharacterCmdSet, help-category: General) access [hierarchy, groups] (cmdset: CharacterCmdSet, help-category: General) accounts [account, listaccounts] (cmdset: CharacterCmdSet, help-category: System) addcom [chanalias, aliaschan] (cmdset: AccountCmdSet, help-category: Comms) addcom [aliaschan, chanalias] (cmdset: AccountCmdSet, help-category: Comms) alias [setobjalias] (cmdset: CharacterCmdSet, help-category: Building) allcom (cmdset: AccountCmdSet, help-category: Comms) batchcode [batchcodes] (cmdset: CharacterCmdSet, help-category: Building)
cdestroy (cmdset: AccountCmdSet, help-category: Comms)
cemit [cmsg] (cmdset: AccountCmdSet, help-category: Comms)
channels [comlist, channellist, chanlist, clist, all channels] (cmdset: AccountCmdSet, help-category: Comms)
channels [chanlist, all channels, comlist, clist, channellist] (cmdset: AccountCmdSet, help-category: Comms)
charcreate (cmdset: AccountCmdSet, help-category: General)
chardelete (cmdset: AccountCmdSet, help-category: General)
clock (cmdset: AccountCmdSet, help-category: Comms)
cmdsets [listcmsets] (cmdset: CharacterCmdSet, help-category: Building)
color (cmdset: AccountCmdSet, help-category: General)
connect [conn, con, co] (cmdset: UnloggedinCmdSet, help-category: General)
connect [conn, co, con] (cmdset: UnloggedinCmdSet, help-category: General)
copy (cmdset: CharacterCmdSet, help-category: Building)
cpattr (cmdset: CharacterCmdSet, help-category: Building)
create (cmdset: CharacterCmdSet, help-category: Building)
create [cr, cre] (cmdset: UnloggedinCmdSet, help-category: General)
cwho (cmdset: AccountCmdSet, help-category: Comms)
delcom [delaliaschan, delchanalias] (cmdset: AccountCmdSet, help-category: Comms)
delcom [delchanalias, delaliaschan] (cmdset: AccountCmdSet, help-category: Comms)
desc [describe] (cmdset: CharacterCmdSet, help-category: Building)
destroy [delete, del] (cmdset: CharacterCmdSet, help-category: Building)
destroy [del, delete] (cmdset: CharacterCmdSet, help-category: Building)
dig (cmdset: CharacterCmdSet, help-category: Building)
drop (cmdset: CharacterCmdSet, help-category: General)
encoding [encode] (cmdset: UnloggedinCmdSet, help-category: General)
examine [ex, exam] (cmdset: AccountCmdSet, help-category: Building)
find [search, locate] (cmdset: CharacterCmdSet, help-category: Building)
examine [exam, ex] (cmdset: AccountCmdSet, help-category: Building)
find [locate, search] (cmdset: CharacterCmdSet, help-category: Building)
get [grab] (cmdset: CharacterCmdSet, help-category: General)
give (cmdset: CharacterCmdSet, help-category: General)
grapevine2chan (cmdset: AccountCmdSet, help-category: Comms)
name [rename] (cmdset: CharacterCmdSet, help-category: Building)
nick [nicks, nickname] (cmdset: AccountCmdSet, help-category: General)
objects [stats, listobjs, listobjects, db] (cmdset: CharacterCmdSet, help-category: System)
objects [listobjects, listobjs, db, stats] (cmdset: CharacterCmdSet, help-category: System)
ooc [unpuppet] (cmdset: AccountCmdSet, help-category: General)
open (cmdset: CharacterCmdSet, help-category: Building)
option [options] (cmdset: AccountCmdSet, help-category: General)
page [tell] (cmdset: AccountCmdSet, help-category: Comms)
password (cmdset: AccountCmdSet, help-category: General)
pose [:, emote] (cmdset: CharacterCmdSet, help-category: General)
pose [emote, :] (cmdset: CharacterCmdSet, help-category: General)
py [!] (cmdset: AccountCmdSet, help-category: System)
quell [unquell] (cmdset: AccountCmdSet, help-category: General)
quit (cmdset: AccountCmdSet, help-category: General)
quit [qu, q] (cmdset: UnloggedinCmdSet, help-category: General)
quit [q, qu] (cmdset: UnloggedinCmdSet, help-category: General)
reload [restart] (cmdset: AccountCmdSet, help-category: System)
reset [reboot] (cmdset: AccountCmdSet, help-category: System)
rss2chan (cmdset: AccountCmdSet, help-category: Comms)
say [’, “] (cmdset: CharacterCmdSet, help-category: General)
screenreader (cmdset: UnloggedinCmdSet, help-category: General)
script [addscript] (cmdset: CharacterCmdSet, help-category: Building)
scripts [listscripts, globalscript] (cmdset: CharacterCmdSet, help-category: System)
server [serverprocess, serverload] (cmdset: CharacterCmdSet, help-category: System)
scripts [globalscript, listscripts] (cmdset: CharacterCmdSet, help-category: System)
server [serverload, serverprocess] (cmdset: CharacterCmdSet, help-category: System)
service [services] (cmdset: CharacterCmdSet, help-category: System)
sessions (cmdset: SessionCmdSet, help-category: General)
set (cmdset: CharacterCmdSet, help-category: Building)
time [uptime] (cmdset: CharacterCmdSet, help-category: System)
tunnel [tun] (cmdset: CharacterCmdSet, help-category: Building)
typeclass [update, swap, parent, type] (cmdset: CharacterCmdSet, help-category: Building)
typeclass [type, swap, parent, update] (cmdset: CharacterCmdSet, help-category: Building)
unlink (cmdset: CharacterCmdSet, help-category: Building)
whisper (cmdset: CharacterCmdSet, help-category: General)
who [doing] (cmdset: AccountCmdSet, help-category: General)
aliases = ['pemit', 'remit']¶aliases = ['remit', 'pemit']¶
aliases = ['delete', 'del']¶aliases = ['del', 'delete']¶
aliases = ['update', 'swap', 'parent', 'type']¶aliases = ['type', 'swap', 'parent', 'update']¶
aliases = ['ex', 'exam']¶aliases = ['exam', 'ex']¶
aliases = ['search', 'locate']¶aliases = ['locate', 'search']¶
aliases = ['chanalias', 'aliaschan']¶aliases = ['aliaschan', 'chanalias']¶
aliases = ['delaliaschan', 'delchanalias']¶aliases = ['delchanalias', 'delaliaschan']¶
aliases = ['comlist', 'channellist', 'chanlist', 'clist', 'all channels']¶aliases = ['chanlist', 'all channels', 'comlist', 'clist', 'channellist']¶
aliases = [':', 'emote']¶aliases = ['emote', ':']¶
aliases = ['groups', 'hierarchy']¶aliases = ['hierarchy', 'groups']¶
aliases = ['listscripts', 'globalscript']¶aliases = ['globalscript', 'listscripts']¶
aliases = ['stats', 'listobjs', 'listobjects', 'db']¶aliases = ['listobjects', 'listobjs', 'db', 'stats']¶
aliases = ['serverprocess', 'serverload']¶aliases = ['serverload', 'serverprocess']¶
aliases = ['conn', 'con', 'co']¶aliases = ['conn', 'co', 'con']¶
aliases = ['qu', 'q']¶aliases = ['q', 'qu']¶
aliases = ['deal', 'offers']¶aliases = ['offers', 'deal']¶
aliases = ['@dice', 'roll']¶aliases = ['roll', '@dice']¶
aliases = ['conn', 'con', 'co']¶aliases = ['conn', 'co', 'con']¶
aliases = ['qu', 'q']¶aliases = ['q', 'qu']¶
aliases = ['@callback', '@callbacks', '@calls']¶aliases = ['@calls', '@callbacks', '@callback']¶
aliases = ['wait', 'hold']¶aliases = ['hold', 'wait']¶
aliases = ['wait', 'hold']¶aliases = ['hold', 'wait']¶
aliases = ['wait', 'hold']¶aliases = ['hold', 'wait']¶
aliases = ['wait', 'hold']¶aliases = ['hold', 'wait']¶
aliases = ['wait', 'hold']¶aliases = ['hold', 'wait']¶
aliases = ['press button', 'press', 'push']¶
aliases = ['break lid', 'smash', 'smash lid']¶
aliases = ['open button', 'open']¶
aliases = ['ex', 'feel', 'get', 'listen', 'l', 'examine']¶
aliases = ['burn', 'light']¶aliases = ['light', 'burn']¶
aliases = ['pull', 'push', 'move', 'shiftroot']¶aliases = ['pull', 'shiftroot', 'push', 'move']¶
aliases = ['button', 'press button', 'push button']¶aliases = ['press button', 'button', 'push button']¶
aliases = ['slash', 'hit', 'fight', 'kill', 'parry', 'pierce', 'bash', 'thrust', 'chop', 'stab', 'defend']¶aliases = ['pierce', 'stab', 'slash', 'chop', 'thrust', 'bash', 'hit', 'defend', 'parry', 'kill', 'fight']¶
aliases = ['l', 'feel', 'fiddle', 'feel around', 'search']¶aliases = ['feel around', 'feel', 'fiddle', 'search', 'l']¶
aliases = [':i', ':!', ':<', ':S', ':x', ':fd', ':echo', ':uu', ':dw', ':', ':UU', ':=', ':s', ':h', ':::', ':q', ':y', ':p', ':>', ':w', ':q!', ':fi', ':dd', ':u', ':r', ':A', ':f', ':I', ':j', '::', ':wq', ':DD']¶aliases = [':i', ':w', ':j', ':f', ':q', ':wq', ':UU', ':h', ':I', ':uu', ':fi', ':q!', ':dw', ':!', ':DD', ':echo', ':>', ':A', ':p', ':<', ':S', '::', ':s', ':dd', ':', ':fd', ':y', ':x', ':::', ':r', ':u', ':=']¶
aliases = ['q', 'end', 'n', 'next', 'top', 'back', 'e', 't', 'abort', 'quit', 'b', 'a']¶aliases = ['a', 'n', 'next', 'abort', 'back', 't', 'end', 'b', 'e', 'quit', 'q', 'top']¶
spawner.spawn and linked methods now has a kwarg protfunc_raise_errors
(default True) to disable strict errors on malformed/not-found protfuncs
Improve search performance when having many DB-based prototypes via caching.
Remove the return_parents kwarg of evennia.prototypes.spawner.spawn since it
+was inefficient and unused.
aliases = ['@swap', '@parent', '@type', '@update', '@typeclasses']¶aliases = ['@type', '@update', '@swap', '@parent', '@typeclasses']¶
search_index_entry = {'aliases': '@swap @parent @type @update @typeclasses', 'category': 'building', 'key': '@typeclass', 'no_prefix': 'typeclass swap parent type update typeclasses', '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': '@type @update @swap @parent @typeclasses', 'category': 'building', 'key': '@typeclass', 'no_prefix': 'typeclass type update swap parent typeclasses', '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': '@ex @exam', 'category': 'building', 'key': '@examine', 'no_prefix': 'examine ex exam', 'tags': '', 'text': '\n get detailed information about an object\n\n Usage:\n examine [<object>[/attrname]]\n examine [*<account>[/attrname]]\n\n Switch:\n account - examine an Account (same as adding *)\n object - examine an Object (useful when OOC)\n script - examine a Script\n channel - examine a Channel\n\n The examine command shows detailed game info about an\n object and optionally a specific attribute on it.\n If object is not specified, the current location is examined.\n\n Append a * before the search string to examine an account.\n\n '}¶search_index_entry = {'aliases': '@exam @ex', 'category': 'building', 'key': '@examine', 'no_prefix': 'examine exam ex', 'tags': '', 'text': '\n get detailed information about an object\n\n Usage:\n examine [<object>[/attrname]]\n examine [*<account>[/attrname]]\n\n Switch:\n account - examine an Account (same as adding *)\n object - examine an Object (useful when OOC)\n script - examine a Script\n channel - examine a Channel\n\n The examine command shows detailed game info about an\n object and optionally a specific attribute on it.\n If object is not specified, the current location is examined.\n\n Append a * before the search string to examine an account.\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': '@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': 'inv i', 'category': 'general', 'key': 'inventory', 'no_prefix': ' inv i', 'tags': '', 'text': '\n view inventory\n\n Usage:\n inventory\n inv\n\n Shows your inventory.\n '}¶search_index_entry = {'aliases': 'i inv', 'category': 'general', 'key': 'inventory', 'no_prefix': ' i inv', 'tags': '', 'text': '\n view inventory\n\n Usage:\n inventory\n inv\n\n Shows your inventory.\n '}¶
search_index_entry = {'aliases': 'emote :', 'category': 'general', 'key': 'pose', 'no_prefix': ' emote :', 'tags': '', 'text': "\n strike a pose\n\n Usage:\n pose <pose text>\n pose's <pose text>\n\n Example:\n pose is standing by the wall, smiling.\n -> others will see:\n Tom is standing by the wall, smiling.\n\n Describe an action being taken. The pose text will\n automatically begin with your name.\n "}¶search_index_entry = {'aliases': ': emote', 'category': 'general', 'key': 'pose', 'no_prefix': ' : emote', 'tags': '', 'text': "\n strike a pose\n\n Usage:\n pose <pose text>\n pose's <pose text>\n\n Example:\n pose is standing by the wall, smiling.\n -> others will see:\n Tom is standing by the wall, smiling.\n\n Describe an action being taken. The pose text will\n automatically begin with your name.\n "}¶
search_index_entry = {'aliases': 'groups hierarchy', 'category': 'general', 'key': 'access', 'no_prefix': ' groups hierarchy', 'tags': '', 'text': '\n show your current game access\n\n Usage:\n access\n\n This command shows you the permission hierarchy and\n which permission groups you are a member of.\n '}¶search_index_entry = {'aliases': 'hierarchy groups', 'category': 'general', 'key': 'access', 'no_prefix': ' hierarchy groups', 'tags': '', 'text': '\n show your current game access\n\n Usage:\n access\n\n This command shows you the permission hierarchy and\n which permission groups you are a member of.\n '}¶
Test the batch processor.
red_button = <module 'evennia.contrib.tutorials.red_button.red_button' from '/tmp/tmpu7_4ywjh/0ed34f51495c6010c4f8f7ad2b5acf339b5e7932/evennia/contrib/tutorials/red_button/red_button.py'>¶
search_index_entry = {'aliases': 'co con conn', 'category': 'general', 'key': 'connect', 'no_prefix': ' co con conn', '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': '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': 'cre cr', 'category': 'general', 'key': 'create', 'no_prefix': ' cre cr', 'tags': '', 'text': '\n create a new account account\n\n Usage (at login screen):\n create <accountname> <password>\n create "account name" "pass word"\n\n This creates a new account account.\n\n If you have spaces in your name, enclose it in double quotes.\n '}¶search_index_entry = {'aliases': 'cr cre', 'category': 'general', 'key': 'create', 'no_prefix': ' cr cre', 'tags': '', 'text': '\n create a new account account\n\n Usage (at login screen):\n create <accountname> <password>\n create "account name" "pass word"\n\n This creates a new account account.\n\n If you have spaces in your name, enclose it in double quotes.\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': 'co con conn', 'category': 'general', 'key': 'connect', 'no_prefix': ' co con conn', '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': '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': 'cre cr', 'category': 'general', 'key': 'create', 'no_prefix': ' cre cr', 'tags': '', 'text': '\n Create a new account.\n\n Usage (at login screen):\n create "accountname" <email> <password>\n\n This creates a new account account.\n\n '}¶search_index_entry = {'aliases': 'cr cre', 'category': 'general', 'key': 'create', 'no_prefix': ' cr cre', 'tags': '', 'text': '\n Create a new account.\n\n Usage (at login screen):\n create "accountname" <email> <password>\n\n This creates a new account account.\n\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': '@callbacks @calls @callback', 'category': 'building', 'key': '@call', 'no_prefix': 'call callbacks calls callback', 'tags': '', 'text': '\n Command to edit callbacks.\n '}¶search_index_entry = {'aliases': '@callbacks @callback @calls', 'category': 'building', 'key': '@call', 'no_prefix': 'call callbacks callback calls', 'tags': '', 'text': '\n Command to edit callbacks.\n '}¶
search_index_entry = {'aliases': 'abort chicken out q quit', 'category': 'evscaperoom', 'key': 'give up', 'no_prefix': ' abort chicken out 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': 'chicken out q quit abort', 'category': 'evscaperoom', 'key': 'give up', 'no_prefix': ' chicken out q quit 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': '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': 'whisper ; shout', 'category': 'general', 'key': 'say', 'no_prefix': ' whisper ; shout', 'tags': '', 'text': '\n Perform an communication action.\n\n Usage:\n say <text>\n whisper\n shout\n\n '}¶
search_index_entry = {'aliases': 'pose :', 'category': 'general', 'key': 'emote', 'no_prefix': ' pose :', 'tags': '', 'text': '\n Perform a free-form emote. Use /me to\n include yourself in the emote and /name\n to include other objects or characters.\n Use "..." to enact speech.\n\n Usage:\n emote <emote>\n :<emote\n\n Example:\n emote /me smiles at /peter\n emote /me points to /box and /lever.\n\n '}¶search_index_entry = {'aliases': ': pose', 'category': 'general', 'key': 'emote', 'no_prefix': ' : pose', 'tags': '', 'text': '\n Perform a free-form emote. Use /me to\n include yourself in the emote and /name\n to include other objects or characters.\n Use "..." to enact speech.\n\n Usage:\n emote <emote>\n :<emote\n\n Example:\n emote /me smiles at /peter\n emote /me points to /box and /lever.\n\n '}¶
search_index_entry = {'aliases': 'e ex examine unfocus', 'category': 'evscaperoom', 'key': 'focus', 'no_prefix': ' e ex examine unfocus', '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': 'ex examine unfocus e', 'category': 'evscaperoom', 'key': 'focus', 'no_prefix': ' ex examine unfocus e', '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': 'give inv i inventory', 'category': 'evscaperoom', 'key': 'get', 'no_prefix': ' give inv i inventory', 'tags': '', 'text': '\n Use focus / examine instead.\n\n '}¶search_index_entry = {'aliases': 'i inv give inventory', 'category': 'evscaperoom', 'key': 'get', 'no_prefix': ' i inv give inventory', 'tags': '', 'text': '\n Use focus / examine instead.\n\n '}¶
search_index_entry = {'aliases': '@open @dig', 'category': 'general', 'key': 'open', 'no_prefix': ' open dig', 'tags': '', 'text': '\n Interact with an object in focus.\n\n Usage:\n <action> [arg]\n\n '}¶search_index_entry = {'aliases': '@dig @open', 'category': 'general', 'key': 'open', 'no_prefix': ' dig open', 'tags': '', 'text': '\n Interact with an object in focus.\n\n Usage:\n <action> [arg]\n\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': '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': 'inv i', 'category': 'general', 'key': 'inventory', 'no_prefix': ' inv i', 'tags': '', 'text': '\n view inventory\n\n Usage:\n inventory\n inv\n\n Shows your inventory.\n '}¶search_index_entry = {'aliases': 'i inv', 'category': 'general', 'key': 'inventory', 'no_prefix': ' i inv', 'tags': '', 'text': '\n view inventory\n\n Usage:\n inventory\n inv\n\n Shows your inventory.\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 '}¶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': 'inv i', 'category': 'general', 'key': 'inventory', 'no_prefix': ' inv i', 'tags': '', 'text': '\n View your inventory\n\n Usage:\n inventory\n\n '}¶search_index_entry = {'aliases': 'i inv', 'category': 'general', 'key': 'inventory', 'no_prefix': ' i inv', 'tags': '', 'text': '\n View your inventory\n\n Usage:\n inventory\n\n '}¶
search_index_entry = {'aliases': 'unwear unwield', 'category': 'general', 'key': 'remove', 'no_prefix': ' unwear unwield', 'tags': '', 'text': '\n Remove a remove a weapon/shield, armor or helmet.\n\n Usage:\n remove <item>\n unwield <item>\n unwear <item>\n\n To remove an item from the backpack, use |wdrop|n instead.\n\n '}¶search_index_entry = {'aliases': 'unwield unwear', 'category': 'general', 'key': 'remove', 'no_prefix': ' unwield unwear', 'tags': '', 'text': '\n Remove a remove a weapon/shield, armor or helmet.\n\n Usage:\n remove <item>\n unwield <item>\n unwear <item>\n\n To remove an item from the backpack, use |wdrop|n instead.\n\n '}¶
aliases = ['push', 'press button', 'press']¶
search_index_entry = {'aliases': 'push press button press', 'category': 'general', 'key': 'push button', 'no_prefix': ' push press button press', 'tags': '', 'text': '\n Push the red button (lid closed)\n\n Usage:\n push button\n\n '}¶
aliases = ['smash', 'break lid', 'smash lid']¶
search_index_entry = {'aliases': 'smash break lid smash lid', 'category': 'general', 'key': 'smash glass', 'no_prefix': ' smash break lid smash lid', 'tags': '', 'text': '\n Smash the protective glass.\n\n Usage:\n smash glass\n\n Try to smash the glass of the button.\n\n '}¶
aliases = ['push', 'press button', 'press']¶
search_index_entry = {'aliases': 'push press button press', 'category': 'general', 'key': 'push button', 'no_prefix': ' push press button press', 'tags': '', 'text': '\n Push the red button\n\n Usage:\n push button\n\n '}¶
aliases = ['l', 'listen', 'get', 'ex', 'examine', 'feel']¶
search_index_entry = {'aliases': 'l listen get ex examine feel', 'category': 'general', 'key': 'look', 'no_prefix': ' l listen get ex examine feel', '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': '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': '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': '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 move shiftroot pull', 'category': 'tutorialworld', 'key': 'shift', 'no_prefix': ' push move shiftroot pull', '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 = ['button', 'push button', 'press button']¶aliases = ['button', 'press button', 'push button']¶
search_index_entry = {'aliases': 'button push button press button', 'category': 'tutorialworld', 'key': 'press', 'no_prefix': ' button push button press button', 'tags': '', 'text': '\n Presses a button.\n '}¶search_index_entry = {'aliases': 'button press button push button', 'category': 'tutorialworld', 'key': 'press', 'no_prefix': ' button press button push button', 'tags': '', 'text': '\n Presses a button.\n '}¶
aliases = ['thrust', 'hit', 'parry', 'stab', 'pierce', 'slash', 'fight', 'chop', 'bash', 'kill', 'defend']¶aliases = ['chop', 'thrust', 'hit', 'defend', 'parry', 'bash', 'stab', 'fight', 'pierce', 'kill', 'slash']¶
search_index_entry = {'aliases': 'thrust hit parry stab pierce slash fight chop bash kill defend', 'category': 'tutorialworld', 'key': 'attack', 'no_prefix': ' thrust hit parry stab pierce slash fight chop bash kill defend', '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': 'chop thrust hit defend parry bash stab fight pierce kill slash', 'category': 'tutorialworld', 'key': 'attack', 'no_prefix': ' chop thrust hit defend parry bash stab fight pierce kill slash', '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 = ['search', 'feel around', 'l', 'fiddle', 'feel']¶aliases = ['l', 'feel around', 'search', 'feel', 'fiddle']¶
search_index_entry = {'aliases': 'search feel around l fiddle feel', 'category': 'tutorialworld', 'key': 'look', 'no_prefix': ' search feel around l fiddle feel', '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': 'l feel around search feel fiddle', 'category': 'tutorialworld', 'key': 'look', 'no_prefix': ' l feel around 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/tmpsngnovoo/36927506376a646c3289a8525cf3794691127a69/evennia'¶directory = '/tmp/tmpu7_4ywjh/0ed34f51495c6010c4f8f7ad2b5acf339b5e7932/evennia'¶
search_index_entry = {'aliases': '', 'category': 'system', 'key': 'git evennia', 'no_prefix': ' ', 'tags': '', 'text': "\n Pull the latest code from the evennia core or checkout a different branch.\n \n Usage:\n git evennia status - View an overview of the evennia repository status.\n git evennia branch - View available branches in evennia.\n git evennia checkout <branch> - Checkout a different branch in evennia.\n git evennia pull - Pull the latest evennia code.\n \n For updating your local mygame repository, the same commands are available with 'git'.\n \n If there are any conflicts encountered, the command will abort. The command will reload your game after pulling new code automatically, but for some changes involving persistent scripts etc, you may need to manually restart.\n "}¶search_index_entry = {'aliases': '', 'category': 'system', 'key': 'git evennia', 'no_prefix': ' ', 'tags': '', 'text': "\n Pull the latest code from the evennia core or checkout a different branch.\n\n Usage:\n git evennia status - View an overview of the evennia repository status.\n git evennia branch - View available branches in evennia.\n git evennia checkout <branch> - Checkout a different branch in evennia.\n git evennia pull - Pull the latest evennia code.\n\n For updating your local mygame repository, the same commands are available with 'git'.\n\n If there are any conflicts encountered, the command will abort. The command will reload your game after pulling new code automatically, but for some changes involving persistent scripts etc, you may need to manually restart.\n "}¶
directory = '/tmp/tmpsngnovoo/36927506376a646c3289a8525cf3794691127a69/evennia/game_template'¶directory = '/tmp/tmpu7_4ywjh/0ed34f51495c6010c4f8f7ad2b5acf339b5e7932/evennia/game_template'¶
search_index_entry = {'aliases': '', 'category': 'system', 'key': 'git', 'no_prefix': ' ', 'tags': '', 'text': "\n Pull the latest code from your repository or checkout a different branch.\n\n Usage:\n git status - View an overview of your git repository.\n git branch - View available branches.\n git checkout main - Checkout the main branch of your code.\n git pull - Pull the latest code from your current branch.\n\n For updating evennia code, the same commands are available with 'git evennia'.\n \n If there are any conflicts encountered, the command will abort. The command will reload your game after pulling new code automatically, but for changes involving persistent scripts etc, you may need to manually restart.\n "}¶search_index_entry = {'aliases': '', 'category': 'system', 'key': 'git', 'no_prefix': ' ', 'tags': '', 'text': "\n Pull the latest code from your repository or checkout a different branch.\n\n Usage:\n git status - View an overview of your git repository.\n git branch - View available branches.\n git checkout main - Checkout the main branch of your code.\n git pull - Pull the latest code from your current branch.\n\n For updating evennia code, the same commands are available with 'git evennia'.\n\n If there are any conflicts encountered, the command will abort. The command will reload your game after pulling new code automatically, but for changes involving persistent scripts etc, you may need to manually restart.\n "}¶
at_post_unpuppet(account, session=None, **kwargs)[source]¶at_post_unpuppet(account=None, session=None, **kwargs)[source]¶
Called just after the Account successfully disconnected from this object, severing all connections.
account (Account) – The account object that just disconnected -from this object.
session (Session) – Session id controlling the connection that just disconnected.
**kwargs (dict) – Arbitrary, optional arguments for users @@ -2131,7 +2132,7 @@ puppeting this Object.
at_post_unpuppet(account, session=None, **kwargs)[source]¶at_post_unpuppet(account=None, session=None, **kwargs)[source]¶
We stove away the character when the account goes ooc/logs off, otherwise the character object will remain in the room also after the account logged off (“headless”, so to say).
@@ -2142,6 +2143,12 @@ after the account logged off (“headless”, so to say). from this object.session (Session) – Session controlling the connection that just disconnected.
reason (str) – If given, adds a reason for the unpuppet. This +is set when the user is auto-unpuppeted due to being link-dead.
**kwargs (dict) – Arbitrary, optional arguments for users overriding the call (unused by default).
evennia.prototypes.prototypes.DBPrototypeCache[source]¶Bases: object
Cache DB-stored prototypes; it can still be slow to initially load 1000s of +prototypes, due to having to deserialize all prototype-dicts, but after the +first time the cache will be populated and things will be fast.
+ + + + + + + + + + + + +evennia.prototypes.prototypes.DbPrototype(*args, **kwargs)[source]¶evennia.prototypes.prototypes.search_prototype(key=None, tags=None, require_single=False, return_iterators=False, no_db=False)[source]¶evennia.prototypes.prototypes.search_prototype(key=None, tags=None, require_single=False, return_iterators=False, no_db=False, page_size=None, page_no=None)[source]¶
Find prototypes based on key and/or tags, or all prototypes.
no match was found. Note that if neither key nor tags were given, all available prototypes will be returned.
module-based prototypes followed by a paginated queryset of +
module-based prototypes followed by a queryset of db-prototypes.
prototype (dict) – Prototype to validate.
protkey (str, optional) – The name of the prototype definition. If not given, the prototype dict needs to have the prototype_key field set.
protpartents (dict, optional) – The available prototype parent library. If -note given this will be determined from settings/database.
protparents (dict, optional) – Additional prototype-parents, supposedly provided specifically +for this prototype. If given, matching parents will first be taken from this +dict rather than from the global set of prototypes found via settings/database.
is_prototype_base (bool, optional) – We are trying to create a new object based on this object. This means we can’t allow ‘mixin’-style prototypes without typeclass/parent etc.
available_functions (dict, optional) – Mapping of name:protfunction to use for this parsing. If not set, use default sources.
stacktrace (bool, optional) – If set, print the stack parsing process of the protfunc-parser.
raise_errors (bool, optional) – Raise explicit errors from malformed/not found protfunc calls.
raise_errors (bool, optional) – Raise explicit errors from malformed/not found protfunc +calls.
prototype_parents (dict) – A dictionary holding a custom prototype-parent dictionary. Will overload same-named prototypes from prototype_modules.
return_parents (bool) – Return a dict of the entire prototype-parent tree -available to this prototype (no object creation happens). This is a -merged result between the globally found protparents and whatever -custom prototype_parents are given to this function.
only_validate (bool) – Only run validation of prototype/parents (no object creation) and return the create-kwargs.
protfunc_raise_errors (bool) – Raise explicit exceptions on a malformed/not-found @@ -532,8 +528,7 @@ protfunc. Defaults to True.
object (Object, dict or list) –
a list of the creation kwargs to build the object(s) without actually creating it. If -return_parents is set, instead return dict of prototype parents.
+a list of the creation kwargs to build the object(s) without actually creating it.
aliases = [':h', ':q', ':>', ':i', ':s', ':UU', ':dw', ':fd', ':I', ':DD', ':dd', ':wq', ':f', ':<', ':echo', ':!', ':j', ':', ':p', '::', ':uu', ':x', ':y', ':A', ':fi', ':S', ':::', ':=', ':q!', ':u', ':r', ':w']¶aliases = [':r', ':uu', ':j', ':I', ':f', ':w', ':q', ':i', ':fd', ':h', ':dd', ':>', ':x', ':', ':dw', ':UU', ':y', ':S', ':q!', ':::', ':=', ':fi', ':DD', ':!', '::', ':u', ':A', ':s', ':echo', ':p', ':<', ':wq']¶
search_index_entry = {'aliases': ':h :q :> :i :s :UU :dw :fd :I :DD :dd :wq :f :< :echo :! :j : :p :: :uu :x :y :A :fi :S ::: := :q! :u :r :w', 'category': 'general', 'key': ':editor_command_group', 'no_prefix': ' :h :q :> :i :s :UU :dw :fd :I :DD :dd :wq :f :< :echo :! :j : :p :: :uu :x :y :A :fi :S ::: := :q! :u :r :w', 'tags': '', 'text': '\n Commands for the editor\n '}¶search_index_entry = {'aliases': ':r :uu :j :I :f :w :q :i :fd :h :dd :> :x : :dw :UU :y :S :q! ::: := :fi :DD :! :: :u :A :s :echo :p :< :wq', 'category': 'general', 'key': ':editor_command_group', 'no_prefix': ' :r :uu :j :I :f :w :q :i :fd :h :dd :> :x : :dw :UU :y :S :q! ::: := :fi :DD :! :: :u :A :s :echo :p :< :wq', 'tags': '', 'text': '\n Commands for the editor\n '}¶
aliases = ['abort', 'y', 'a', 'yes', 'no', '__nomatch_command', 'n']¶
search_index_entry = {'aliases': 'abort y a yes no __nomatch_command n', 'category': 'general', 'key': '__noinput_command', 'no_prefix': ' abort y a yes no __nomatch_command n', 'tags': '', 'text': '\n Handle a prompt for yes or no. Press [return] for the default choice.\n\n '}¶
aliases = ['abort', 'p', 't', 'a', 'end', 'previous', 'e', 'q', 'next', 'top', 'n', 'quit']¶aliases = ['top', 'abort', 'e', 't', 'p', 'q', 'quit', 'previous', 'n', 'end', 'a', 'next']¶
search_index_entry = {'aliases': 'abort p t a end previous e q next top n quit', 'category': 'general', 'key': '__noinput_command', 'no_prefix': ' abort p t a end previous e q next top n quit', 'tags': '', 'text': '\n Manipulate the text paging. Catch no-input with aliases.\n '}¶search_index_entry = {'aliases': 'top abort e t p q quit previous n end a next', 'category': 'general', 'key': '__noinput_command', 'no_prefix': ' top abort e t p q quit previous n end a next', 'tags': '', 'text': '\n Manipulate the text paging. Catch no-input with aliases.\n '}¶
>pn)AaO3uXaMhNwinP zrZI6lHjP}NqfR=URiPL}NnMRiG7g^^Y+6_$8cw4lChXT_TDh_CbdIBOL#do1fu;sC z)yqet9bdNWQ1oSE=`5;yB~kV(aMlB|zW5&Fuf9}EiqtO?6r^%4W|b&6GWmQFwlfwn#Y$(!WT?pa?@pJRzaxO|Q!^5w&^v$p+1AAwP{^3Iu zq3C?QHqZa*$TU>mh4<3}mHszj<38h8e|BcL6&lZeFzZ?PqpO#@8An&&tG^aootF%@ z&<+hw0Et!fAAoOLQv)chh9W}<#%+|CB({ClV1_8w%BgP&Kw}fdfY6NRTg0HV?EQrk z;oGR|!VLf_yG} bgj@ z%?F{`47|uyj-RY9kh%2t*ZSBW5ng{(2gXMx{aklFGUZnNd(kRDcw`0PY4KrkBMS&y znLb5gs%qXvpiv7GSUy&bY6o5|f9}+mnsshtkY3{)$5l2}_uDjQQJ(8c^h;8i6Q!x! zJ}u&K%7y>Q`@H0p{`uXv*yOj}ZWU^?7)fp0NK#n>y4>H*TGH4u%5Jy52w~Oz&;d{% zY$$o;f2VD}6jZ#pVJWtFdBdTZ`eUNJ;4EHY^rEs3I6z6$?njdCYo4+Af3$Taoc<7> zSeWY2M`xAEyQ7mnv#zS6vM!E_gmbDi=)1HuiTRT)XGMM~mmUJ=w5Sr9vh2Dh8d)r! z2hJW7(GxXiS#+%L$0K5)m~+;M21%{2>XzD#`L#<;#?iGpbE%rOun_-}#t#26Z7aLt zv0^ZPCPgZ+_RD?#)9aT?f9S>aB5wF>K3m4%=P5n8tlL#s*5hzUXEd{m%wcsrrd%C) zV;PtElZ!xnB%g)iC~x^Cl^l@2ne1?(+X_qE?uK$aT{k9irjLUAva}= W0bcavklGFHtH&qhbSSf*+CB3h(jWHE~~e}erPrdVb-(Z#Yh z9ni^vI(aPdazGc#RHnR2#@|GADAROQ8D||TbzKy46NM;To}m)y1 hdU+5QzB)|8emKLQNIG^*{J#d)K2Jx8 z Y$GpOhc8J;jr2C2rApq^>vw;D7V9=%ZIXj79T3yrbtqi z=ImrF4mDB9tFCW{tVeDZg!fSnRrpg>ntlB^wsPoxLT7%9e_&MR?9)mON{=(BxMX@v zP$vOC?DoOsG&8o*IO`_P%M(22(c~+{ -mWT=>uf{eO}sY3oR zE}L@-EzFJXvBh}fX#;k5P~v0 =5N;c%FM8?m579M5{|Q4?E+W;mQ^ zeYqZuS1wng>B>#rtGU?3W-R@b;WD(gm1H+?B;>l8mNr77=Q_b8G%U;ZH8|!|&)O ?aRf6bFUD++KHIm?Dy eAD{cDT~3 zfcB|@y%~J61ACKM9H|+CJp}{s=nKd2dE=VmxLB#(QEd*O^9Enc!R(E^kTu5}*DAfU zH~LiT0#wg-&s=a!`l= 70ojjv39u*28UXve*QW6XLv_bxEG zn& wC2qIT@fAidDvz0Qe*jXaQ$9eMi+cC1Wn2CfmDP6NC QE{1Fx86 zKssG-8IK;W|8@Lim8Ru9od=I=C%s_Q|xzDh{LD5<&< ?S_p!pL7%Z z-40a*=I=~JK)l-h!8To;fBj&+$DjuSafEhfQG(Ba2!;;7BT*v?au{8}kYjz6DxwC* zV^$HBI2^%>s6uqFu>+h%4bxF!Yx29C9qX!vx0z+XLtJUu3opk-%MZt!j$5Jzm+zJ?q8_7Eswl#Cq8t$6lhf6O%ju3vmizJL3i z+ NjFG=ky#&9~40i$YQepYh%FLNH#2urHGv00UjV=E`ZB*$uy`tv#?K zaLXUc4hP$#o998`)}!+vXn2KKKIkvNHJb6F_-haW1+KH}_^x94SDc2XtA{pYzkmOX zWWY{cQXgd3KBpIle@~~ Vz^?VhheGFO-quOZtwVYro^C(%dHq;nP)rjj z@Nc3M;gj%HI=Ou7RF#fzb*fk=x9TFi(_j8}kYf9&=ac|Q@T;C!V$!M-AyOuKUDo-& zkOlQ8OBC&=u5g99_203zh_E(MGXpuNQ9N$5X%V#4e*=wo X7mJ^pBiEAwlrOR5D z%S{t$@kyTWzD+ackkufR-Er%8D4ki`@%}+rYWpdNE#jM}zD++>+xq>`?_Kh0`Qu;7 zEiXx9o)Z0WkY1O3OXDlKXKl%=v=A<%C_#(we^nNwr@FiQ&0`0LC%ALw245bevg-D3 zc^TYsk^JhM!ExcU2ZL80i69<_V=Fv(90z557+ixU4-OGF>HT8w^L$(+fWu@?X1)3P z5uM{BKE $sPY2_??WAj~P(8Z_}!iKPSS8ePh58>k=7Ko4iPiV^9M9zu5D)l(*JvGc1wi z$wRX!5)Qhs?mrjS{pUgijh|hkxxzy09M`?(STTrKC`hjB%I@e?H*oPM-##aTK%Uu{ zq;fwAYhh`IMlDlJcB$=~J=|gYhG%!&f0@s}zPEhQr);h?&hI^#@R1iqa$2rYh(#^L zCGJ^K>6IQ96-8fcSx3yp_v#-vUohu!Byg=9AyjG86f)6>Fxn69hwTM1yY(_dsJyzH zFoX{M&Je;p?z?lFAqZx&?^y>?@h;sI>~o!2XAlIS`_9U`XL0!4Mi4^CSQWD GdQ zl9XNYZZBflB(JL&gpS?XP%6j%Z7`ivM>m+wp~oA-)z`aS!IG+OM3l^$v=FWtkJe*^ zK9t3Is6Lp`vAgTSm(=yfDS(tWI0cdF2K`iDzy9L#iVjq69DZS>H=9>W?a#)tI%mnQ zwB9HOLs)isEW$eG)7255j8&1}f1M$W_k>l uEH z`HjPQQJGP>x=pf{$py#W<8v t zv-!opfeV))8@f$fKZ;wrzFmiZ-q7apCGhSuOSh|3J-Ph-PWZC;4_(T6iOi?f2jZ3v zXEo|(Sc}_rN* d%{OUw>y^ zQ&-*MsQBv|0LVp$kf)tp1`S*xvidC6SX>EvRy2t`jCE&ue=ZfSoF9yUh@#GZBwb&( zX7q4fH62UaY%fBaoINGNi$r@(N|4=X5iFbQo)$EAs|_yT?1Rkl6Pwm)lMOI8Yuh^d z1B>2@O|%Zo+A s<@b#La9yZ7gox zHj9?}jzwz_f9ITXj3q1cPIj{8GFY4LHHwZV?e~!ie#i4!gSgP$0^o~GCzD3-XlyDS zs7&*lsBg_sO&5hc5!F^6Jl1*jKc~CBI--ZWGqZraOGLHpwf%TJ`iYzn9rfnV^+e=+ z*R99Sp3;(6Y()jK^Sd59&x UffypXRKO%BrxcX4D z?n~X@Jeh;2*;B?En= (B4<<1%L} z&6sUn*-P$4QpYEAd?da9<-@_l-p%?>R?ci;_lq6dRaUUH9Vhe)K0daU>A@&ySZlml zqG^*u=|_}dw{r`aRPU=i(_vjvgz2rWpkVB(f3841@29RnKXy`Aptf7lg~%=Xhl%MR zt|P%|iU^q8bPZSFmR*vhT9bUuCtr*Es2>)ce;SR#Vixi4H `1J`opq zZJIHM7;wDBAr72wIpVX9X^$DtP<2!4kxS2D{#lT1{<+cLF1+D6 okUsWiPb@DfedwnMPRd!!WX+`MV%rS(8PgPM5y}Vg_|@=X3=bt z?NiYp6df#y(^>0o(4qm;eqnDDCHY}<=@?i)02jUO$?%S-e-*rEKPOGgfc5GF0mrHW zQ`Ym%0gH`~x!A4^8ZXxAo9s5_oS|{Ue|K!8LYUGlvpBp6fM;52vSWP|I{WP_Aaqt; zTM#Du;3AC3j2zo6YY(S0m1DL@8u#%mcXt61S@ik=m^Szv?1^Qf7D!vhCzI`cs!#Qd zLngu&(Z#V?EDc0wcD7mc&|wIhp=nqjlS`)9jP?q7ggPnQJU)p Kt=YY-));hlN zfVGNd9C00jbvI<$7Rdru`5vLcRWHqQXSyr49%2Gkt`A6UEiJ=bZD}Cm)oMn-$yknf z+z74?8F&_3FdwcXul3uZ^uQnLe;kp+H~<)>iPjR!m<^7%C=%lWSU$##U1R~~y3TDJ zA5KD5iKot(+)@#dHj|I85)8@NpqORu)=Ggf+BaYzl&) Y*y||B2YqfLTSJGQ zHCUl?TaE~V@fn{LzpfeLRqFW*?#RB=@V88jULK~vW3#KBcx&;Gy|~EDf8{ZIw-&wi z{2LhaSl-*VF71ccaOmwaU?Q-a;%`L7=kY_e6BX;QcPrNb!|yO`j-_C&T4?xf2iD=} zmA~KAuA>hS+z)BN^BBQggg*CiKd4}-XvA2RJB+x5QSR_+&5Iyd^#dHolfqeXD@iUB zm9RYF<(LNN@`6TN7QU;}e`0Y{j=5}Ue5~KMb>A0@>pREmZ1Jw{XTTSX;~3Wl(0bs> z13KHY><0p_O8PV&s *}G+ z7~ng(z!LkZOb&lYf41N5@4sE^1@3?Fe*b?z*6m~3<}ClXXoFBRaBTu2+)LSp2y=VifCM$w9ocQ z%%@X{CZn-kni_`Y+NWJKu7wF+c)D(!4M*qv*47OZy&Y^{GV;W8CKF?NIn@RRUl*6J zZ_PTM1i7L6u=%Yna KodQm^t;yuQ$Z>X$V8!KxhHQ5YU{KmL*tJ;Z)Vsgt>% z%nrq2*2xCbc>@rKSr`UeiMdYnJJu3bAl`~P-R)N(HmO3^DfAWVTAi#~-PS91#BR%3 zGPN^e4M!%=2zibZBp*}83;vFIql9K7WrXpBf0v}utfsnUrFetry`WPb{NUyVBW{#< zN{1XQzCstjSYtQvi~OsZ&Kk}A1r5o<7H;_7V 3G;n@$| ze>D&@26Qhy=RzE~oYNo *4k~;7%#Tkq%mE5FTTw6CWc%6osA Fe!(3e35JFG)4t5mj5W!eZgo@|T3ax67~?9y?uFcj^yR|b#7 z=CmaMB9&iHHL=1eTuR;nz~#KM)0bz1i=IS#JD&TH{n;FLAp4W}>^=5p>&*#O$ShM> z
>O!7BIkW{fSI)bpNS_nzhCy<%ClSA?v#qh2 zLbjO)(1va>_oP-aow-(MP*XOXp@v|*J9rLE9^2_OPk86;4FNpZ&K%o TMZv;V-h*e`p#j62+yuVep#dYR-k}xt4z;v*XvMt)E$_Q&on>I?sewSlVgo6{ zSl+7*kC33O>MtCv=m97XV28w$gVBI^Ig>3JARw#20rT#We_xp8_JDk9L~piFHyt48 zmRC6>T-}x_ +$hXn+#-OvKn$+pl@1o%TgrcIW1kX5^H#W!PK4j@dBmf(2A=aq~h zmRQDZg@Net7Z^cDBTo=ea=-~v+KbT;Z%{S;*|fFX1zNXDvpOeNFU-%JUj2*w`&x7^ zzK!2q?w_7z^P#ztJ(`3)v23B*!!c_6*z(0FE{w7)e?>niN^u@Dp+BEIwO*$u962sl zaZi?hqaI |~~el6-vTHL9nP#D$bEIvvVI?n`Loz9a0SFQ6T zDAnvdf0c^TA!)v jW9aTGZ~8B{!`uT5{3)qA^WwHjN=)Y*FUWOPFR6GbpB9 z@0zFuub{A{Xdul7P%zAT%D4jtsaJ^xLgt%}wfrzg@_Id*UAa)1=2xEJUsU>nVF_Av zQqaKbq~Y0*0t0xcaG=#rNgU`NvN*(FIq!96f8s)g8!ua^ZPR7fWqzYR{bEK)UU%fj z(6*R1iH3sk55 Td-!qwuH|j^8ZvdLl0*M ze-k8*6&&D!E9e0jv3edzz$@ng8n0>|IIt_`UHZWOSMJ<}tC$lcPQ^UH16RxgFk;0# zLsDb1fLH$mG+y;T=0K}IsJ3 pexsc)zC{xG(ssX?fl99;B4yI?=`PVtLWxXtBEJ=Ha6Oyi^4be|QT( z_A!<{q}gN(gw`_I@CE{wtQr $b94YCI>yB#2!d{N0p9k?bJ4Yr`BrO`18e_^a&DB!hP zOWL7e>wOk{jPamQTVBZ& SlhE3?Q(?k8Rl}OfNP|W zV4ViGT*0e)Txi@O!LujcV`0~uKT)7<$N8Lb9R~QUv2WT|&w;*{rP~?tS7FcZMT^qk z9u{^3fU8~*n03$4kc@lIe*kCOb5v;4o@2vX_6a(qVV^()+Vvb6(5#POVXgY8>jY*l zXHb#M<{T58`J6+CHluSK@aFUi3#3`SLIG%A=NJIZ>?}O2xuxBY yK$r=46<(7^2C|Ae`tB)OkN~v&aFYb z=td{NB_yZePzTg;nhY4%Zt&9{&wb3(9^1C5ut#(r;k1YL9N4rbxOw6|T& p}7l=s3S|7g=O7v-f!e+K a@fpzI?E7tozWbK!_5`tb4;4{%s{kT)Xq zBhMGJxw<36qqfW{le;UZN`h>Ym&+cwE{3v#vH%4JZvz@O&GV$KA3I=J@K<#Vn`CS; zE1Wg<{peKze_oct0)JN;Rlcfhs#&nOdzR)Fv7R%os9La~fL>bzLf6z|RL~c; $Z!jjpAAH_$TQyWjQEkSK<)E8c^k{TA1h5Mr0WG)KA z7TupDt)7u69@2uVEwNcz6taeOkVKM%S3Aq~F;38je~**&@xbDXh7?Xx;dAH%n-Y0K z0^dGI;M>=x2Z+p5v=K<^>d#?kGp!m<)z%F@OU@tgNto~i_$<8Y- CPV2T<(Z|b+=Djmfy0nZl7-tjIXyR=L!9oEXKjz>FV68p>P ze?)#|TVgXZ50 v8e)0)RX4XA61j9Lrau`xV+=j#^sg^2t>c)w8*=d{42d~eF9P!(RJ7b z$zXIcQEaTjw2#uED3=e_@nrggr9a}df1hWW@Y>MV>G0dp^W3Ngah?*rqMoHitE@UG zuv+x!%OE<6T!M;j;}q{;5Y5{D2o%Td4F;LXMvcwZv#z)9OsI=(`x5%%_ifL!!nXF# z2yBrZ$MS-xya)AySnc=MfzZ5*#UnaGk*M&Q& `Hf3UY1 zp<}q4i7T$ZnP^k}wi2^b3-Lwa+0Dcdp}JvO&cxBO-B6@$#CL;itl#wm;ROiC1ThTv zgfXu9o{%F)4X?1hi%f^tvcJL@jW8BZGz<3_G4mip3;|9UB07|n0)kU^{I=(m5!(o2 zL h4+BBUs=Ie~v5hJij-#qtszk^7~u<#PaWK%Ub3#%@Izl4gQ0i zO swfxm$lu!!&BP7#1V z!V6feNBBe7Y4Hr_B#-cHcZzx-!#S>F+-_eFMgAQNeb|~;2aEgIau~Up0OFa&&N3^s zoHbxTEtB2-90rfIEf`P@e+4yl7D3>~6EVV(q}K;~lLpKtQIItr*xNK
jHL!J>i5(*Z^TYr )(Hji}( G0j1XJL@3+vIu1&W4eKMJ 25K}w>QnIt9ay736O%ML!2_mSs2 zn^oz4JbK|YMkUb5XmxA`k6X*;L~<7OV4A2*GEY*zNo AVJo&tVxQx{xLLB zDI-3lRZjzki_3EeWL}T)5LQ%1QILtnyj(budRcOve|;ysk)Ch|=lf&wdC+b{BVUy) z=P9D}tCm&EClLiP==Y%gMB1l0&w#6SzUk5}6DE_@`SNlPKX6uIfXh>X &DCv37^>VSm$a;_hc;VW5q5m>g8iRdESGec z4OZ86S&B~L@+Q%9d@e+B7_Jwyvw5*ZDXf !Fcu6vzW5zDo#vmd$4qw-n!o#l;x0UT!4GCcfH$*muW zf9at@Q9SkU wxAFF9n^ZY3sfgH5;Aie=tdgO!HhYbe0%zMlGL9syf;$D(eT9Y|`w9 zI*_$PH6zW%3RJJ7>OzdxryDlXUZu-M_0}T~vbUBry;-7-MA6HWVDz!~c(3J2gs)|! za7S}(F}M^%GDe;Yk?aDh`u{=ztN(vFc-8;^%uC+0{Eq+4zP34QS^j}9t)ZHsf4jlj zE^hKC&?l*c!^?xt)N%yN{)Y`@Kc2}g`YC4JPAKMh&~pbZRsyqp^9+KuXW5U${34Sy z$>k(f##sk~E~_c{ L8ez-ocq!@lnNr0x<9QjWaZvzGU|!Gr-6@m$3otrz`SVfOF3z6F9}e{$}YKY$n^ z7w^GlK-~sP%_pms$G~tlnZqm){~WrWZ$Vm %JpmS;eaefy5XRC1h}V^AA;curb~SJh{GAkS@}J6`f4wMwq)06Oe;tdl@c zuZgSOCVg8Mq5}LiOb4;RKo6CwwY+Kukjel&dLgW6^W4KcFkEame^hXOZ4jM2wa01$ zG!```qez&{B9)|h-m ;|6gM0|&a ff@ixAb)Ve@7x@b@X)orz)?G6 zA7+ivM?B)xrLi>X9jUA6s7&@4_scnD*OT{C(mnFBe_T#OyPm{%$&M2)!Jn19imbkW zCTU4l+`p2%rd;>_oun<@swZNO#dB)cQ}>^8#|&M&_&-Tknl-Bw^@;xH1A8K??kBmV zbm;oE1s+WRuN(tRT9SXr$zd`@ll(+W&O2Iiex@bopS0xsi !(~|Qa$-8bRXJ+Y0 z`p@KNe;Sgejh@rupf%MTuhv<)r8tO5X!H+ff^?6NkRTfUznLH+J-(SD3Vpnp93s8C znIaPXxY?S$wf&D-!}pKmr}ablQOr-2#Jr;<=4VP`{z*y9zbJ|MHzhG5GOcndVvg4= z5^;V9QB;Dkm%``_&z})TBrtm^j7os^QW=Rrf9<6#DgoO|Wt0N9xh@hz@5j3!2)I?V zM4e1nY4rR=OwT)FdVVIR=byy%{EL{Le-qR5AH?*K3pZcrA{24H)J9|k@T@jEG3QHd zgu>33;;2NPFO?ArK3|HX5`Rt`@7DKbN(zlB?n%v0q}044rRHZ+YW_(|&A&*gAu+j4 ze`Jb+&in+O$q70$6Lh8}=*&sbnUJ6}8$o9(g5Ep?%}I#!GZ55N(dY&eop+!(=|FVG zf#h@poiTk<1Nx*!^GOZmlN!e-HHc4Y1fSIK{bB5$LU3lp{AcoWOGXT>V3Fz+0@?Wk zvXcjNXAX!?8_=CIpgLhdWwv0PDxlz~f5wRd3chKaCZOPs#z_Ja9%!5+NQt~6B7SC^ z9)NQ#k8Ja5vPtpVt2rg*Z)slg>f+t%ie-!|b9`H80XAOhfO_>_e|SIYJ(s!UH3kQ0 z@mrp3IV+|!5?^z>U}SY$V)I0MpcoG$_acrwXRQZ rfv`o+MUR#j|mF*v}?H?538@ zpKyGr&((<_RUY`m3S1g}9DAI?>qPZS3;wsL8izw6(H?CObV;^Ps~wXg>zzD)9F G L=ykks^s>e-d2hbjmeW`Y7cmEV@Xgvr;C2M|-U*;z!f!!@scu z{?#q(( 0;a#(74}f#q{_IK#_lnD%KW2dR>VwI%Pm@f1?r7bi)Di(oyA%Nwg= zMs$Gq1Dj_^yM6sQj+w~;fA%=6a+ L7`%LwR% z#tq*#-U%mhi*CaBTtbO3CilQ0j8FGC< a>sgX z`w|rR&tlyN3}kSM4MVvcqBRJrj`fk)#uW&L5xG`GFj$ZHER@S Xxe<6Q8_Y+bSsc2y_!HtB{ -VI*`C*onFodQ@RA3I*8q @^( z9k0`Kpg`>K%t$iEA6Sd<0x&u`$KVM4j{^Z(-(yBm TlrxK_N-`Z5(9|K zEXqS&_M7 !R}1@xXAGQds*aBsC=D1=1+AR@2C?CHSd zbM2@Ae-OF!RYK@ox+@_(K0OvsKHFB;6W*=g;z{B$d*jRGGl}EP<+O0klf|jq7s6q? zd@Y2-rFZGe tJ;FOJo*~WoG#fW0>CZDB0?Gd zA9HWF95<4r3*OIDU~G1eRh=D3UDc<1X3EyKe-A}cD$a@$o1|LPb3+3&!6aHpAPYc} z%C^0z$Cx(Tz1;`vC)sfKh(H7ozes@E3yFz{@bB~Z|Mz&cXjMJJT*NV45!X47p^07% zIfiV~vdA%ni!~7E>!Mqz`UvQyDvyT0Y}L`JmaI6EY5DRjsa~cuOS;9%a>Sb7bnF*U zvt8s~aDVClN8GzDNp2%)!uRtO{H@K_q?u-^)oOKb^G1`(DoM3drK+yXYVDY%Sq?LT z5y?&lN%4?b*;oA ?HN)*{K6K!VLWGPNrlqX#^vG`0i*|9Iu2D KWrDTGMSjXV z3Bh7fr+2yMg^ f?6 z+?1Ju`2pB)Ckte9HV)cG96L(ks!_m(%uP`=gB5d#4Qs4N?6c$`H2Mzt@xJ35L{soS zZ_v^B03`75Q_tFiAlkQZW=&gXJDdQ^(tn!ONDn!zzCG}_;WOmj_5f! @@WJ_CB%c?ojj@tdjXG zq4psp0?T*836%&`qESU`5fm!t3L}g+;)#}f_9pUi>Wnd}PR~#x{stez6y9!l$?upU zW?(EZWrZ&~LzOzv<|&HL6Y%p;7g>XYvng(x7dKi+K`7(^4xe!Zk2tt^2fmBmHBor JQ|MMUJ zN2vVsAO9C>0QLYC+0XCJ6G`!kjN>-PjA8KR8vEiue3k$@N$|Ld_f97Ut&@kdgs5ay za8vaycHMZVKy>faFF5O=vD$y4s92?6 c zR0IG)&IlmcSz%crnle~(BM=h#%=aeto7z*>>-@SfTB5 zbk%ZgJALsTfHh3G5DEuS@MzYyYH&y-%|FkoK3slf<{;MWfz(&H^orkw07u1w6m WuDpR zTi0r5F|J$XO)-20#(@eccdjUnLvsxrG7cpvD-TrzH&4NZojBVe_H4j|`~Ji_2B>gK z+s`n+za38z>2cH$k)TvdB)oYPr(onR74`s;xPn01J}-YZ*=*yC ~O%+ka6p7r9JihWw(sIi>iuAG(G2?Ezvg}RM`NytgY z^RIyWf9xD){xFWs2bsV;jEX*BGej;o9>=J_el&mDhh~nj|6TO`b0i2vg1~pt6=yK) zE@3hXh4U1bT*R|W4~O_Z&l)(3=y^KF#$+B@^-~n7yh#H?(<&oHqJqOK pfV8du8? zPwV^VHs3L{w5~Izeg5@Zo72VMW09Wb00Ke_7FDA%<;%Bm760&50!Aa?nhg2{xADEK z;@2@sZL^hfj>>mZ;!}7#Uo&sn(=B=9_O^c(*8bq$h7C9FX?>a7x`3aN{JF7TXIRXv zcWV2!%sO}4Dt^Mp?0b;MSQ6l6Idg^?tzK0yvo$T5zlE1=^YS@#UNTsFmYvt%xv^{6 z+2Ox8c5UbhU_FV=w= E;WA(yjzmw63OP}AcY;n(Qo>dl5Y3mUIe&B4OhOx zeSlkMpT@us!=p$%TI)q#vT85K>!RQ?-G0~gO}4QkdK<6Dr_u0qtvdxjPvn$;%FDC7 zQyK$r_}L@)Xqz`{xu#)TCzkk|e`5U4AEyxaI(ghpvM=)vue#j+lQDt*$bNrB*ZfBq z=VMl`Zc;D|-kuoi!ykv$zQMGxJyF-i^H`iV2&Lq@fWCm= wyTFDSxxC{mPT|2S=CCV>J<9)%BhQbgtn9ZWuY-TB zJY#K^x9r&}7x1R15-ug*-B*7V-b#Vp!LDMxpe>!T8^WulerBl&dlh&xUm)C7tn; 9>&0>6^)fbciSLj&tc;utxF+#|G!^-R*tSn-PAA#A$1Ky>IOktKRWk zTs#y8X8Y2n>dXD+?wKud53fWz>zs=8h^Mb|vSHoZ>J;OthMQK-Q{aCO_$%VSRuOJl zEh-B^d!J?9mZX>9SNsW|y@My~$ipMJo4&)f*|=FD-nynX8@b{sxR5IoJ4d6_+FHAN zmLY?34EI$ZGtWB^ojw_DTtCa)!GuUA1b9@j279?*IW8tZ ID%B pBGjgNO6wGy7h_1R-l)i{@&!kAz4tKium)BF6)AyjL6u zkF)B6!_dYKzWTM#>r*C9^9{{{0flG6PjJc%w)f=o6~y?Nq XhFFeEx#xu=PqNPmA6CCdDrM)HNwI{P+3R z1#b%d3Vuc6*Gkf?0RqGP&9m?6egxJt>>pVRb^N)K_r0ju$2{Jay9R&rkI5 @!4u%NWcWjP`w4+Fwu zJUzDtIvsyC8#&Lra7vH)Zc7I^;9K~26*1Vskd^(m(H%j5&Yq%I@YgDme3P~)h~0C& z?R%?1f5#85 OSLV9g8q+>B 7Ve@eyZqFNS~TuoHznU*!&O%WYbaBqVPYt}7%s z4SWY{%I`OrI+)O$L;ojCEPoFx)$haR4e+_=9e)lS<&M8^5`OAh79F#WU(vOSV%R-@ z6uy4<{1Is4C4ArDuJWfWhM^>WL)pf(O=iv({xx_0kvv*`=bz3BUi7xE^S~i^;l|@v z`GbE@F2m`uzmC+xqo|OZpsphNVK@ybG-ik}?QRhcJ~AUIEoI-Mn(XvuuxrWovX>Pc zI6&Zm<6wBUalV7IVsJNlASpg%&YtJH7~o)U_4-MSk*yZ|NB(T&A2L-j&_AUQ{OW8t z#U(yf`@YDw 4|M2n`9my5^5H5EnzVp* zVcG6sOXdpdTl^8>j}=U-x~^I{Cm ^Jf z1zWO)p>n>Ya0BlAVzm8ZT6XK_S~UD;_|gY{bDDg-#t%G-3@ b866Qc_`t$zouV5&c0+i#}~w*YxE!Rm>+Dn!jElc zZ584YFnFH!>Rz7VAKH{gglQiH9|eDMQTrh6z25}`c6u||m1IA5a^d=#;0-8Zr&zUD zHfLf@G)SzV$mgf_%5G4s`}&Cs;US(nVYhTf54V_cn7P6s1Lqnh 8)knLSAQQS z6!~lXyv?A%jOh%Ur#_Pg1O8wb_WXnAxVr;K8F&9fBIaFiC*4yfF6!Q|;u$vhP9g0# z_)egSqvC&v`*E}3li1Scb(;!_yVcftb7Rd|Jju7!WAWd9bpg8q oILasI z+hnqR6Ytkr#WC!2Lm}+ltoS38iz<)>Lw=X&P7 8$|gFEmK)b3Q~v5qg;l>N^V&MP*>}-&H4i20)Jy6dCPuNNZi>X;m5`ZwI)cD zV?qMMw8WU4FG3B~p~vAoc-{uEn5h4NKhShbu|2FBz?8bF_C0^UHKZ_}&ub-P#~YR- z0KaHVjSA&J-pdN%f4KOI=B*hMhjCr3A};>2RF{1rIA?H}TZ62E^Lw%)Kjo(LXJ%Fi zDA4H<5`3}_3cx@A@qfAsZfhRoj3nXLt}3dA!yeMU=!R Wt2o>{~N zhf4)6g`j~m%l3a0E9?A_g1#2}t8j?=={_r2?Ojynufc*f9qvLEjie~vf&|A{m(d`q zXFhx*nSPvo$~#t8TiC-!i?2m}__DI32$CY1WMIO79nxQEmPc_{v4_n~1;j<&+XQ!& zJeud-=jL1(Kg)FW5P$aT)#J4~**+y!H&70F-VTS#v4(%gDHi)sVd40mPvf(8^*%T5 znVHiKLw-MKjb1=Q=oE1+T*$uXYX}A{y=zT|7ohFnMjtrv45^5H3a~e)6z8GI!&69J zd4qnC3el(_w?@G3pHiH_772wHCTB#{Wc6V^PG-s4r2Rpp47JT}c5uv;Mw=D5n~4jB z7Y+)}70Q3elWaUPo`dI)8LPS2*SBPS!o%S4cp0?^Q8(7rC>Mbo>vbN6SdLd#8wlgQ zzD3%?j$T*<#%d|}M(1_Rz8+21(sG#qbA=cGf=JZk$}%nzy?!4F5j{g%=Y3Adqem`s zIlio_Vh@*&=$aZ+5!vA2#X~+d0rL8tKijEBmQH_Y%q&%X?Bdo|RvYIn_#9&1gz)p^ zd9)*tSw}>t{oYOBWv?89s?Sy_GR;=`)C4FFoo{$ib5x2NLptRP`AAb4YOVJj&il8l zS(!fj*_Ns?*X1YJ rLIzR`4gLI>{a3o?6B|;t_^)kpLzcyDEnP_qD;Ur{R!`D7h(|; lHQ;};U$LD{(@?^)xo?kp7t7noKX z{Fxq#kFnPHH~U7G-EhQz^XzB~E)2SXE~0;0H~@tV-9!QDx|ySVP3kcK6h<>OYD7-# z+kJTUXkjibTOi)bBuhJU&WHs}jB9vCV4--$AFwu9J&Qusu!OYJu5D9NW#JkgXb_Zv z1H7$yHzrN)B{aA(wM9b`BL>(2RfHz@6PlR9J((%KkTgD{`~_TbiGLcfceAiM!Bu|+ zcaYU^q%EGc;B975REt2`;-L%%vxl6Qs;bOv-G`aYh1L)J0qe+QvmSxgS__p$T39xz z8BI=ArCsq9ZJS($D=MMOfPE~6&}MM&B{esV+E*+g8WSR!U|<2)MB?%Adtw6|SpD z{w?8Oic0Afj1j$Rno4__l154#V=8}#<6s<#Cs>e`+F%&)g9Ll6YBKJC67_(rS}}D| z!5T;oknlJgqe7;p1MrX4)BQ7S^2cQh<#B9{`*AU%{Br*cX9eIo7)X%O8Lr|IXSl|% zOT1?@ew)_1!m*T^oN*hyF8M}TmS91i%*S9W5U$SD4}F_VY5|4`7@Y3FXAXZF@RDSP zZ>!O?RJ!E +q9S!D$IZXCZbGMMT906(#1r4C^j?B=jS zLC&jqS)FLUR(?1vwpoY6l6@`9M!e74+SEBQ+PC0b@uaA)Wl@V>@+1d0yackz_b@7C z{-zlzE!ClC@gsWzgG!T4)&_q9e08Pp$Itjwl`q5;-b ^$_1p&4Z(>1QDZ6R)Jo5L(s&eFN9H!?)oFrV_njDy)C62FAYn@a`?a zQ6&Wp^{weTEvq+rn9w4CZLb3>zD1rk;tWx5PFfIby!{{^vbPQ%>iE3 I ^(Z_H|f#X4 #YV!8_U}9y^6B4) zbo{jaI|}I7HdT>9R`Y>^cD&@xTw&`}mQ}YRC1)2~DuLNLwQ<>i`Nkj;K^v&DW^KGc zZ*pZ2g|&4>5RHH105M -4XP%QGv(W*LAyOZQF SHmP0=~a_Amjs|zj-4OcF`fx9gV9Z% AII2VxR;ju|!-FnuX^40u}kZ^z0AS(r!5Ge^he20avSajsf z9Md?hU~B;$meTS 2c z>&-F`+tGhaa{b9z9mQ I_G`XN6PPRUBVs>%xZp4(ABt|_Lk4myIBDT L3G$eTO&9i0m9KH{!<8oRecMAM D8#0&t8SqM=+_yVF1KL$u~tXj;+N#b2vWaZv4L}%phM7tP?i38grE)q!*U%ssJ z0JZ&AjF)&C&QgfR`Y0b-H+UH+E|vX?sxo6V`ih;Mb)oaZRpzF~SV9xnH ;_Nf_e2El5}zkiPbD` zXR>Olu0t%V>cdV}SlGuNxa<$tHWt 4Sp@7^ly`7$#)FFjWG}p2# @<|luu z?^vmTcTznqz+|)TJD?2vC9Rjfn@#Hw-n0G`a~if<&Tn%!5rJ>vKI_uF2(2G<2+$ef z&&YKIp2*NMZ+NK+Afajl0r(y9-xT9enSWXngc$%(z(@2DRB?W)o9Yn`Udr3}z^WV5 z>5UdD29)b663<~~yp6>3ffW81zf*rtJehr#rxN^&EN%12E);?H&wz@vOY&$5d)1>c zrcssWR4nV8rQv;+!Rjf~Mb=u2iq6a7Pm7Ivd_>0=@|3upsyja8XuR@KYhkMPmi@w< zf{Pn1#;RgJ1lhybRP9}{AI_h!8RPG$hZ(8B%fAhJFpnYd%^j__e~Ew0?(=_L;Zy7e zjlYUNEa-3mi)^R|WSL(5m+|Q`3tz*=gOk`;F1pls!-i6IPpb}xhB(k!5t7SE@Q#jY z9qz(XCpfiXppa1@7NbrS0@WTi|60m5jl={7PBY$%V6+}+@huj#mDg~ZB$_e$(d zfkmLpn^g!rb3(BSBJ2X*uHb)FxUoaFLRgF7(4_WLm`M)UVc+po!8V$vdXV3waHt@f zV(>OCdpyqMvMLYxv2OtD5|3M1)*5DEUSY`eNJ)<{-ED4MbtaC5*`b7W63W5Higzgn zl+ab4HlJy-lRe4Qoszm6BInE10=G7-xH1!=+AwO0{##hQ$^WJqhgW|Ej=JG%{@P=F zV%?xBEI& ITr(Cz)Q+eOZ4RUF*D`gaEY`C G z!;#&}cuTiMTE3cM`5PC&v0ouTusHdKb0PDLr;CdoNx8%vXim1`Ihf@ojB{3o1Kyo< zM)lY7FQVa-BaghP*Z_am=in-8Qu*D~B ;q z(3{dIPj-dD6RUA?sue#%uk3wH&sD{#SXfiB-&V8xtj&*QsAY}zOZkXqpY>4rL+i+Z z!TeI$FT-(CXq=A4H3~s-umi!UkTR8vskG?GvJ~fST-8~L@63N4Y=|-)PGliy2D%mn zG|JluQt`!?ssA61VMxeE#esnulK0}M!C_6K ~O+$t1R@1(&pIXF2dhJMnJ`k zXI;U~AT@j=a%I<*8Cq=QEc({8>eo(7)xI45q}pXIk}e(`fpS;&r#sVJgPVyN?~*5u zQG;SE5=m_3l1YE-j&=vb1%_N^Ip5E2WpXU4JJ;5F2a!3%kNDe Y?<{TEG%fhz%?;x zlP$~3cQm3^^DvyTE6)>IN7jz`3s2@tpX5;`esAy8Lf06#z Gyj{Sb>y9(fXlRa)fC7-}{WO>~K}>oJu+beK+u4lG2R{m`-q`MN8IwyRQe-X8 zQuQ*cMHqipSfqHK0q^|TsSGDl (A%qvv@Bf* zCzxz5l;4X7^V1Xbwp;$xb$p1)x<=jnvR%UwulzLH%j$H;D%LC0w310wPE9wZII@ ?D8=OD8Hkb{N7crevfDg+0G5+A Z5U~IO<&;>liMQ4TyR67F=h#2&Mh=@ldHe=c(;vt+&P;2T4*;cXN667K_ z#~6PGHmlj)K*Oy|7sn%<5}iM0F|6Xy){A=4>5`pjOr0zTF>0$mr(>FNJ&Kiv8H&sg z9>xWp9V>eehB! CD7AvtzQj3&Q>hbMtiJZdPs;6X^XB*VgRQE`=uZDmQ;< z(24^>3feFr1)DkUy`1TA;~!;hvy;3Y>KgaY8 cg6i=+iCtEnWCS^dDu?l|!2{XuKLkOmb3cyN=mGcZ&aKJ!ek)@Ba=fe>^ zm^qMMiDVp*7RlI|!el$gq4VWKXHXjYZdN03_=MQE;Z-UodT>yM*yv#|3-Yc7xEmu@ zCTYD)n?c@)iyQDdj_y9w^z=2P#AjwKStnSZ??FfpAU;iFv4p2qB145@U95j>AhA?- z*AY1BjJKlVNn3bc (brB mmLoI-Z^ljc$E?gO*M$%r(Bh4o_J156db4DBmVtB+dLz&!|1}*& zrx7BIJJ1MCfDA(oBtm$gI^KUvkeyOz#pz aBiueEx>d(el$IXDG*RmryE{=^dDB2q|)t4Kj)7_mhWFCTw~b7^^`_ORxw zKOEwCc(lP6!(?P`;;lUUmgmeKmY6ZQDCVCK$i0y72d=JLT?;BGxH!+h{%f=55l)Wb zOPW^|kvY^A{+6qy{fa=BwZko&@TFNnYYuhIe@EiCA1zo{mvwdZlr>uvLM Z>CLFlPGVgPEz^Sis)Lo_Qt4< zw+6MjHXc@!T q6mg#!P-MG}Q$KS>*-5J1rgwWc(!2-%=IkH>#6tWk5%DhSIG{kaH# zEyUBsdhLZY?t10VtV_kUW|pdEyLa)>DvN)dcAVx8=|!buch=64QG0qG{j)r7g4~<4 z(xO8v=hfq-W^l^I*or;+`Lh?NK$jKFR4^FU_Yi+n;%2q2{0lWD1{u?+tfI?{_m@9i zu+EV9qY@Xph5COl&a*jHd(&CfcBiKL;yj$U_{+n5->fl?+QRh54{v-7!;JO{%UoTU z{ww_OwauF4yZdbSP*-``tt6r%shn7A`*KK0=nS#42&RPE{BL|twhJ$bas2|p^q@cV zXVrBJHuK`#m_XyI_Dg=+jGy7acniCz&HpCH8{~!~VnTo3gBie2*KgmjE`s<;VZcwR z35>X+{2Gt8p~f2(1H;XYqB8zT4t8F$#!G=mXRUnc6(j}c_3+gHg;x;M(s(!-nU%m$ z7^UnpHXc!Cr{Y-1>SEzo&T6xbpRu*M!$A}X{2cn{NuA@72_diLp!#0?L9vIo8hssC zcO6XJz=eN_UG|XiO($)}s@5((G;rEtRUHlME$pm34P3$HNnar6s>)ZP;}O6&Tre^r;L z5-cu*f{Umfy>>e#E1-?;n|zm*?QE&&@Q}MZ%KYVjT#OpHfI$9;f1QnkO)*r#I9(u? z5AA={K6}7z$2=96G8WZ*kZ2SXso%rDqY4}rg$s?%dWr}fCWQ;1CkUrgUoMs-P5`9D zrTlADmt$yrv2)#2n&Tf7EQ7c_O8$FXl>J^jURrUJT}sMb!W#02COu`El_(0HBJ#uV z=ZL^x(Sk3;+Gme3YXz|Cb!W*Biwb|Q`Qd-x@yqNn`XG~*7Eis0t% F)D}y-;b>Ju83r zvsQ(fqgms6Oi?awWhsg|J2Z#Us4zKWiQ0cHRIakFufMveQ}$^Vryr@6rzV+KrTmdN z!Agh1PX>n-_b?QQ6=Q>|vKMRKOg7Bw7r2riMhfw&%pt+ZgFo1f?h%YnbZGAK2lri9 z$71qRwr@3!6qjW)j3D#V_4Ru>sd|5@3Yhrqs+xCA@LoH96UO6x)pkT;X8lW+g6(;p zf^Fcx{`BtZ+C(KQ|5iN{&2rgS@UIbWIId#Hs*{+tU)pN-kaa=vCxVS9Vt`mQh($X} zUL5)c=SXl%3P1fcUu-uwQZ#A*z@PJtE|?+sJTb8ly)nqp+qNx;))lQ7w8Vd)NF-1w z#-7?^9$*dCRCDmaWDn9=tLM{DW`P_`ulF_4G?<(q#3RChF3UX+Af(v{0by?riqa6g zE1M 5B%v@AMmNDflSsr_U*yYta}d!7~?B={pKn{iGQ=d zeV6xDh24dVGQRrDn^;tui|>D&UXFk8WLk7lMl4NKyjBBZHZDFrx4#xs>M($yo$+@P zp&(xD_tD#DU^$IfR}ItuZr+b+xr2TKtKVUlAhXxEu)U?pPViN3#~6B%r@>wbx#;~M z7kvb|=!*|1DB}O6(~+G_Ny`|lh4D6^1QrVUg;9dwd_ipNoOtqEC8B@1C>c)1vJ!@R zkZ)xd^&sqa8qN9=r^3oAAF5g*$E#Y{Mm0J`c7vfaSl0jeCX}&)AjvT*SAW4rR335! zb>TX`->0<6)BRl_LpydX!Cz0uV;8~2YUHc8ApP=tr(Ya94rD%M#w)O|BC2ids g&2 `1?i zskmB{r$#(gc4OoSCJx>4Y4SxmUdr%dEWd=fVH2MlLB)2E61F4{yNI6hzr)>n8jlSY zjS!do`MCXvKey76A9@_m%m>ejOf=e_;oygw8&-$gjn7s2k=x^HaGTkZHE-+wuE=-D z-OKJm_vhgOu04O2mVa#0I(y8^Y+06uByqE;{5jVY1!kBGJx(BJe5arWJ@tTit63jY zqpTHDy^m5pk8wiu?iv3lm~vw%XQvOkzl|{I?iv3V+ eb*Ym=>dQ4-7ago{DAY;+M=nUrq}&Z z1Vepjv~HP&zfbwd1d$5?>9u* kck00*n 7Avxg@2_x$ Lm^HTabIZl1fvQ< zOqs!mgcyI7fw)K%w~yeF3;OLeKI9B|7h($vJ{`8xc+i}zcTwUOMpB2SR{H^Qyq^k< z6HXh@bz^T@BxH9R&s^Y-#l)rd1UD~N+}N^bk4HKP_r$cRIP=ZJl`{L(;Ww{c!C3+M znf-}tkK`xf^@q#ld(0k+%fCKcj&k#2oHsiiDXD+FkW~xl0@wux=?f*LrNGji?Ti7; zrl+(mn7p=CA#!-J>tvZKqNqI4K(NmEzNvKmYMs;s5|5K8Bavjm#=J`(vs6D@WHdA= zUGo1OCJs5AGj1%eW;3ed4>@1gpcGPrx#4BZnp6MD&*Ds1zO~o*lV(?GHU!yL^_2{r zj<$ajIIx6NDMBGM6o` gJOUk;;9&kxTH%7VG_2mYHF{I023 zXE1B;tEw|BO)#6DD_>84>rB6dW@F>1Ah^(?e!!suo@R!Yd%(m^0l0yr=O?Ehs)kT$ zD8}tT7egZ7m;w#sOOa^jCpOgJ1~EA3hmU_qoEG;(JJ?xZ#BL$nNd^Z7;YMUkvNPLf zbx}PlNH|DU8`keT_&LE|qJTmU2faoCJ6H4ZP7YqW^PPUd#dcPEN+pAXS^KdlQ!N`H zLdrOM?V-5@E9qIo4VT$tL6}8*pTS{}^(iYmFQx(Ttm26V6~2%k%ik<}6&0t4<* LLt<^76{1qLsw$PdwLR=mr9{^P&d6P60+q`bMf zesy*I&wu>i?{pl0%sa>Df=TGV6+eHzzBVB0-sfZP_EnnFD*Ksda{VW{nS^e5s`dtc zNy8Rnr*!9UN>zHB?g(bu{&Y&4XSxZgaK-<(KtJW>zItl?y_hTh!hhSmfid#eaJV7v zV9y-IZze5n17r_#6+&6BWYreq{fe%6y_A!N0g6oSTGKi-2Vy3@>@rdsh;x4sT*H#> z9(c8lP3k7o+)YE|V+6yUIK1BfpggBitjYskYywLR;JPdnWR-#}b}6a#q-RXSzLa9H zZb6DgU$9CjQsurRdZg;azP$vkA6CQ-iV3e7H=(MB;+1V6Ik+ 4#ks`yPJrUQS1Z$? -0X_+#OvXR{?$6)CK<(GR zbGok*Q1s(J#~dO4-Oz@8{N0N`zxWo0&A)!}I|q|qx&q4+r7M0F?}UFD0WT !c{14(KT*tNoF0;8o$VU^ kROEfxUOWm#v}SdihpTz1G`;vO1SMR%>{yH!g}Qo!*jmjT|75XXfwGQI9~46 zG?|_&U1iX?!?n7&nbUt{indutXHTOkmY3^R*e)y&mlylJ3L3qu;ihB9OTe{klTk~1 zGaWdR5a*xNq5XGd0n0nChQ|7&B34s*1 ;Q;+aOr2JjP4i$q#f zHIYpF&cTP*4y_*tsU+=+-v(35c@vztaPKZy5}-jXXJuecBo#3cm4tz80jou_a@Rc9 z9gWjO<4xB6^B@1+Mz8p9laXrofT!NWX)8o46O}jO7tBqYN?gT%8#~lX8xsw}D~k)N z X@ zJPzwi-GdMgPy18_R4`>_z%WB3 @aMhK;ntorV#sCv! z`D}pUOUG$QLY6NcH{kW{FqHsN-c_f%heoP*o>724w!@qRWR;X5 ?Z;^4i5axE50$P%;UeOcD1^i(fM}aUn)|6f?+edyk(X9pwq2Uh5Jc z@
0{lj_xM!~jD;%)pINN{o3CdR7OOZANGBg-|C0aC*;xnBs z|H^}uhU7z8J@GPN>Yq;8%;f)r{p6)Z>6xndty;XT$b+P%q_cMo-m^45uqMirVFGCm zJ6B;+@It1Me4;VL;>d@MSoXrY5m<0-tR$xf&8i>Uj1M&NlxRp92q-&JW>o=C5qmeV zr!0Sk`Tfjl*B#q$Ro6VvaO0QRA?=IKj4vgo+l&S^Y4VU4nE_iJQ{3}M!*-b%^z;GL zn0LVVki&frc=MfvP`3#1vBM!~HiBZ?0~snbr^Y@Ac!Q_m^IH|5w16>t2VqLr2o%qd zc*g|=;gEf( )2cSPQ5dEUSgGW`H7V6VtBn_MkPP! z@n)?L1L3)WiHgzyF`775ct#c9r$w|e(fJX6MEr-*%49|^7VBfE<|fKgcQTFlKO*ti zNMO7p1u9y&WRS(3N |H) zhCVgxtM0P4)h{m9Tc-jJr$$IIm 0}9wZrrbXNuzV(peKrXOZ>8vm@?! zH4gk3OwKib7=EiGKw6^@IUg^>X (ck|5E2N#wAGwF%IzpxHR&$=IY+TR_FdPmx!H`cJ|n*6TE67aIx$qSNV z(B_8-qV_NZcTo;NBlf?fb^euF^n}yOWA3u}p~}bXZ-WjbS@jZaan~Wp_Pq}2MY`Lu zZ@~06Ze99>%kWeSMaQ&*6Rm$FcKf=}7#RG9Z_|s-fSwfZDnbxI$PfTXG9xEudv>P> zi$;eL$b-%)Ez{$4pNdV+;I2runn 5^X(Vr()w^uVE%vglpm~)29I*ZvNJa?oN9?@Ygs|M^S&h0Y$)ND{=AA zhS0=h9!(u+2-!MqT3TGVq&X}+-C-zkaB#*%VPOl2fDGW-W*sFOOw1e#mT1FIY<8Uy zkd|%k16TktkGEu$wuZq~{6>+4z=;wY>Pw?Q2XR*pqp*gG|6vM}IBdeEnpkZ+LZVnV z2SdR5vD+`lzio1c0EmB7s|op`Ae$2Mc9T+yWI7>nv*(45oiR`5@GHI8pYoC(K9F_= z4`c{N69Ok<*alYapds`c?ssXoyBFhw l}Ddk25iq{V-f_ax@dg_#px88LH%niq=6%^YVB=uH=tc10d! z2u2eECt^?sR_=d5BJ>*W; KW21d?sA@B;?r~VUl^kAvt2-+w}<&aQ$(!w}n>I|l0WVKW6b4wmR*627w zt4NY*BxJ6%=+4 gLv#Ir6t`NWoqyTi(aD0UMHFLHkzB{ND00eqDMaNG~QOro?S zY$!u8nh-eAVm7jx-17-C!?IG2xrTH=6O!C^q_&+Xt;L{LqHpt%(k>)Al~@OGiJwRU zXTKrdL_6(gXJcdGo)EOYg_@U6gFwMCq1iDLlO1D3T1O+f)wGPwB*gr;!#63Vb5EvO zz!Qs2i=TfJt9n-lC^{$WoW3ffb#^&vt|lZ#TQ)b%llT)D8k1yM^ewiHMy+oIuCOwP z5R>Q8!-qPY7jQTAE&rspE>KlgYhfbcH1{HXYTK@A dq=*6QR{2903#9;f(v2nBp z3Cez1sB3l+H0T-UY)VpHTGl?4NS-YY FsH*~>KtfcJCRP| IS%dAu*6;&zh!)N?6l-cm77sv6>Ft&fr;$v{orw|!jB$g!&f%C>@e|N~UVjr51 zLftPHg;EGldJd|N1?8XWns4q& rtH(-gOS^GujN zV=&tMSf)jAZ7$UP@=Pd&@TBLO>R3>=sjm6vn>2pTh=jBpr^ wbk zxa6B#q-J7x9LNz^QN{Rsy >ler^^clM5|;mrNAc;<0vCeM5h$YzDeX9*Z 3lhOk-azydZ&QW&-dC#n!c^#a=Gr#To0=RC>bz_yo=LuKe<;9v@Mt$%6 zMXeyJet9~27n+-+e*v#6H-F~1ctvDYEIdo|rX5094I3~ HX z{PWzg@o&q{mHo1i*jk%wcw}5i`&H``IkyN+)-@5J`yTGKkG~s!Vfs(ExDEOiPUP|{ zg%edu8JsBia@&yVO6GstI^rr@{iho)eKTlJ9{83xXDCQbP(Iw zy8BzU>%w0-q3?g0UqUO0sz YjJrN%Q9o%c|Pkze<1MU$4VI9=SF+6qaR! zOWyf~hR+xW;(`*FzGr^fmP)vkJaUb^j)df%cix%SkZc^5F72}L`~z*@+yk8el0G>% zI2D+0gIoT&hNjOM4ANMHUE4Fq%-wIhibswS$07)BdFOwaek@|kV2~Dl*tI=#%)GF{ zuHunn#I+s-x4d&qzs_UBV9>*`A^;(-Z`Vz=yXff_)fNBFJ}z1zjxDIN`u9bZaGHB@ zmo}Yy_k%{oZCnUaIjo@K$ta9iq7%KbIAJYX4mV5%%@VgWI8OQs8x`sKVgB40r98c3 zcx6q~1{&M;1QXks*c02fZLQe0?PTJKt%+?X6B`rj ?gi?ykD4`tB;r zHleq@HQnn`0RG+G?f3L|`+>KA{~WS7{nS-9yY3HVqR < z78AL`sz|1j&7;Tp_&u+(NLd?hf2NX~DNXV_c^I?jjbuTkU<>^n>3(H>dGa)}lICGi z`9$-$7^|f7rzSE>l_eyq&d)_vQG_YaWUL_XrobX*0GO(SSTIr6t<5g#o>Yc(iiKP> z!*l0#j#SEn4D&zrsayX*vR6-FJ1Mxcdx9aC>O=nmJG9i04%#9txGRUIO;ryW_9Qd6 zA2Dy3f0w{Ry|`H$Q)$BO TD z^ugsZAP&V#wt4)ldNVWw;-{BS>>vP zNXb0AW^;vp_%~!%?mc~aTQ3iknd+SKmrm~m0Bch;_azsS-7>A_sY@vt$~ON|v`2*R z;lZ^EYM+_*QFH#mT`$CLhBUcFXensIN=pbrUC9*#HOcwkoRL$Uii6AHG%nU>rcLQt zit}KLXQ|*+ef*ltQLMQf>S^OOib4*u+xqtIBn=vu&vey!09Zk90M4WrF(fikw+X>B zz(+1SeMN1n k#qr04oObQr&7Qs{qn*3VQDKDwhs=Q7t zwP4hsP7e>=>P1tCfAqU4*9a%nj@2WKN#8`FG0RM1J+@aF2t8>`0CPv&m#GSUJPqC zTkBnQ tr_Zn$b3(+;=si{0=OCG2K1Z zwZMw~dYOb1*lP9QJURl#ax)~X*QeNd8|d>bYh6cw^lTu$u{#n=5N|w!)N)!It#97_ zi#V0+RqLa0&!vN62~7(u!7T`}U*A@e>({VKmz6sRhfte`C2av+9ISL;U2JVD zxi}(!Hm7r{*~z74Xd2thmzZLaRy9MRFh%`M+A{k%f+}*~HKhwg76~!DaJN*dp}50j z&%L enPoU8{YB1XG~68&1o7Mgb%Mn7xc zWWKQCRXMf{9ue-jGMSdIR(2y2&8;44DH?priW0RQDro!Ft{ybT+Py0Vdi&X(k$n1i zUZi&929;=iM<5VLndM* Id$fc!Pg~fAM*k7JY{!r>^Xvt=q1r`N z->gDQ;zyqBJ~NITiM?xYnKfV* tRxL?liUxrvFvyBdrx&Fkx6UbhN=1}$vw zWZZL-GN==giWr+_`QJ|s<*cx4 cH$we9Z$6OrmI<+*l^@}3g3q)KaQ9K{HI z7ImJCqyfojMLUyJo~#X&CN%*)d}-``JaIjqxH-86^e-t+ eI zzDOGIM6_z MeMhP}&yuEa>Avh- zU}-ix>7Q}C3_1F3-u#;Ce=}{e+@k9`rhQrg?^f88(XU(C L%P29} zeSa_aGhh7;&?j06{DSR&?ws;msZX*Euzvy6c65&V)|1bPm+Svpg^sx`2 y Y=>FDY~%Dsq&LYa26i Z3went58QSa+$7aBS?hd)k+r*Ugld3bk;Hz@uM4vi$ z{7TQ5=-l^q&~KN%-Q!dla88FC!C#3Efgg6pqEVv;OSp#>yW9DD(wV40%Y63|JuV+u zZA{EjKLw)f^rDRN9Typ{nR>>Aiw3E>R#8*Y&g%A);&&2b-s)=ebs1<`!S?mtR6cPGL6X18;fB!%4MUB z_c~$8pbu##495r^f7WY&66xsQ&y&awlLyJbGszFMmr@RP0h9nGy5j0KF3GPI{~(c& z`iGy-OfOY}ofB4UB`i(@277dSP}ri73afvJY~ui7J1SdVVSrmZGJ9%;+bN(EVek~j z^dKt&)DbdcvD^B2MTUDvx40)+&z|y=tl;iGBB4KBV V9M} z5{NX{mhH`qzyY+Qw2({i6yKG{GV8hQ)O($|?1Qg#RJh)pif5XlL`}IcY(y5TJJz`k zH(P-IMTmXq>}^b@@00#5*wp$1!lL9~PMxeE1^Ok;#__SsD8`^)aKRSAg== oCX10wOyyxU8DubLN%%G@!F zl5gNP2zAW8!w4K$b+rg;wZ7%w=09-s7Fr+Tt{G=@KOr)Qt3L_Wl11V1@!fd61AjW8 z F(dU9Bu zj_@<;GDtOWPkyu5wL8Yy(loy2Yh2GIX$}%z22u~Q6ZcGhl}8&Jq3($k6?YNBk-2_~ zSpF~_*1aJ_J6J@TUd}DuO!F1J;k)hXv>4?Eze>|9BE`WDjSKI;?UKg0X{5ZfEb#^! zEK0t;!;T3)Iz(( nl2?2!3s^eaKuq_jS{b zS6{cv{%~1lUXLlZAWKRjDNbech>(%pnv!1y7Q^MZ$PWV2(YckSE48EQ5ZBWxD)7c< zX*oqfeV*Ly$2E8|sQl(OZjY8pm+jS-11wGpkE4GSX~V71_O%6xraJG&g@@iUikv3K zt~UVVv2M*jDsQ+HA0H5h>HkIqI(omvRLIfzJWSmto-+%;JR%sPJu_>k9iim6;$$ro zX;3|CHvgFV`^g0yIDL9}Nuz1oeeHBT^lt+QWzsjzNaFG3UyipztWwJM?+S8dW{yL#pSvg}yT i<@4o34PS36hv3cly!PXOab!JRQBGS~6^pXKIO)fu#mB zyr~1A%AG$gYm3F7{i2}{f %`H9Ql>rHU|=N)O|$| zEB>PzqB`@CCB#6M`a0unjV`pRbTE}G;Gh=>wWuIafK!{w!`(n;0QYOO(hjjdNRCCK zuEPkPus&V@m+C)#{$`95C>?ZFJ>wRj!@Aey4@(EXRn!Z=>9160=b>}u!K+m}!sE zhWXdaIl0#dcqF{e{EBp5Duo1pt@n9eva+?x&PZ~)&M1I6Z}@;i$+8pwiBJbTS_!lN zzR(I!p*Ib>m$Pv31dwpgKOIK0T !0seHT~i!BB)0wNDI0DET-Zo3;RKd_e6+NEGHn3wW%rzE zgWmGLG+agBGlsRqN%qxlWvXvEBl}}caqAV*eVx-#eKiCmBn@6QGp^>0$kZh|t)H HqpNLJ(Rjn(lJ@lQ6!w3{c8c`h${&Fs&*^JIr8joL87mi>FeLXkiQFZV09CP7g zO|tZuzZ>B{k E3w WVRns`IEh zUb6H)Br>&Zlp7*D>P&OT-@Kh-Unae}@4L1Iv1;OTj$S~SEBDw>2aIR-Q{7{^vx2RI zgpda!L4sSm6{G0t^RRyY3)}ZU3P>#Wgc^?y^nA*uEqUj^+R0W-gr&BvXCFa{?k;}; zYA!pL=D(;b@$n5rCTPf0OM!-lwlw5W%InW7W|PKC9>ZC*3H_5|Co*U}`gt0((Gdk$ zp&ZU}|03p3;`?oC`dkBHGpgjHH@9hjWyJ7G!z^aRak>cfS9OWxV!n##VKg~0hp$Ht z5{uU3PxZ!0Q&kPd36KD?L@SM2<_^k08oCtdjnni%1t$4Px_gV~s_7rIPP|^tNHeKs zG&b}S*40o=uK9~}O7UM=ZEKVL#=;2&Pd1E_HD5*e42bg7epSjhxARMAd0Jt4`MOWm zJRPK7(00yw7j732dB3)|CsNNVyLnHHMgLSARJ&98qqbC e70W}V zUoAX7aKAFA+G{Ihu&UJU6)zQdZ*KSg%k&IoVQUc>)Swx%#;)nMZYI`zW K8HG?Z^NSK3pe3LE$T`DlQy$gY^sHwipddwg2grUa&yIoA6=m%jsF+mx3 zt|;soDu|Mee6u|Mhn>;q%R7EoaGNWhR-B4xrPhd^o|Hq_G8eP;sv-t#U*>v~LSCXo z^i1RksGA@N5+_C?R&zOMq@(UuWCFrn >Jd3jbZYB_#Yt359Q#H^CkPCRCS4x24}G zo5X&nt*g=jZQR7 P^CyIKs;OT?u@gy^ EIi|P#FKq*;T4bfTDsVQ z6h~L=EjJ8G=pDWiFe*@o#FB!@k)sWwn&mi?+Hjf1m{o2Gm3H+d7%nO|tjzQ^&0aYr z u~$r>Cp9}kEa?D8Za8$73~%6R-LoD==+LBc-uE^px2P+lKH)b*|6DVTC(5O*4OGR ze@*{w@xL>L2DEy9@n{+oL&27{4UP_BCR5`}8;Gwc4DZh!F@y)RaDQa9J}VR!GdTtS z1c9ElJNs9`2HXOviNh!nE@1_OeSMg?DIw%^XmeTSM&&&^o##F}uG$^ew`*_QXruEp zQDHm;>LO+or9+F&*k+dhn kQY#XHljOS|1l5_ z?=*3|4VtB)M5dwyFGXpjH6st+7KERI=fkwxkTVc18BAoPgB1pPB~7{` {Ax|?Whc?(~O3VteuS|gFuq$@0ExtU>}uyuXmMGd#R&? zpWlWuWLGHPlY!PKCM`XQQXjGmN4?6d34THp(|?S$&PN`8CRm7%})aQpUIE?|5za z3?4;>cH_FV?jj8M15FiG@$pwIS1a&*M%N)t*yK`Ast d#56f|=_J`hj_%AJ0#i z|FDj#tzq#0u2-K~OWb6PSVc{U_FFQ{Qf^V1*vx9pF^gKA76}}*w; f_<75aBXqHJJ?b1hGyezlwNAqY?Pv@p#aiH2h6EQU>j|v6gVbMJzCT1tVLEFHeNG zP*b&?vE4{akme?Toy9}a@|gn@cIFba5Uq~?M}m#U>J{3+>JbVz;w-o(9kd&pAZkbD z-3aJhofRI2u fS*sLJf zKA^C-BN#s1+fRfPjIehyujIs$zHveEp})5;3=`8oOhf?M5$Txq+g2~7<|k@d=?@QO zPx=3)u=bg(JM$rY&79DCvQnR*ScSA(H5)dij9TQwb4(17F+oBVY}UQCh|}}wQRr6f zz679z0EAiUpus=}sIb0T1V0F3{O`Zur$&LKMhU=pZMR$TcJY>p0L8_u4!|9 KJC5FA+h|U+W&E;~8@s46}9?p$Lqi3dLpGipOCHIrB-l3^eF!lUc=Sum5Jy zj);P$mMbM(=9v*}sQZ_UgM;!L3JT)CMJ{CkMG@OeY=N^{b{@-C_5-^G(gLM$MV6`) zrZ1DF5!wb~yEkC{pZy8t^l(p|X2Ny#P3VlrJLowf|u8uCM21Tc3>Kr;?D zwv=Z- Re_h}q?66c#lp!N={%sbO@QXUF$&BM3fg*Sp zVVmRoTo4Q2eo&- |S+) zbEsN>?VWJw^TSuALTM+0FA{{qR};=J7KB_Ieh3%+2;S+G#&ls*M43n5L#^-9K5mzj zVhVwx`v1U3)xu;j6a5za*p!7lX=4K5NAd-WjlOJJp~Nhi&jrurGxb^KLR-8-(Jox} z|D~NGgtF^gpq-fN=kf;Ew2B?em>#U;6PNNduyWGVERNICP|}it*5!m_?6}tB@C>xX z9^s|E=6Hup>1>^idWBUD5mLi<+<9SR_(*u(FRu~izth=gi%q%K`Q4Cajt|~E&*5LT zaj`t@nmHP5)17e!&oVz8wXcOoCglIVE-qAW<)kk-%kBCoyXYEnHb6Pl#4s+3?`PC# zedlGgy7K^XC b zGxz*+JA{uQif+4#Y_gr~5)d;vZAmof_epSbC^X%k-2o&li^#?Pa}IN%8~s*99^fv- z?)BjQ7!1_bNU6#HO-8n1W?em`r9Yyv%_ekxaubAk8>C@IHWydxfYBClLBJO?r$j=D zOK^$+;s3ZnIfgjZ>w*3b-REe^x`+Gw`G2dAtHV;Qrf7AEFlp?LY1cQ9z|rvNeCz-a z83c|d#SG01Xt99&b%Bz}Altti{S;|H)TgE3)tsHXKIdZWJvJSp=&w2kH&)b^Aqe2l zj|U#{fq57?ve>nwhQ>*?%%AUO5HVrJID*EYFI@wb&^PE+x{u~Nv8_liSnCkT8)AKF z9nIm>0n4fB=gMA{8F^1{V()aFNcjM5yb;mu3$8Ii*W9l6btRH8ySM0~31-VF@v&)~ zvKKrnUZlg5XJ%T)*(A|{3*&vd6?=k)t@c}<=5iV- fnbtvE xt~H@ zTMZi8ngSYiI1aWl+&jRa?sZ0`tUL(UPcMgUY4tlI>w`M)-jF}Gbf?Bn7dg(Na!uw$ z2Bpk!JSE)_OcsvqDqq?X5bX)ZWJ00qrOw4CO41dTZXzx>@ldT7izRF4L`*}-1yLxM z#o@e=UX(qx$-HPqTEEu(#MfBkt{ZS?03BA=OHjM%`$eeH`+o^F>tB4DGH5E6G9N(d zY%OJ5N$RLhrqRD+3T0M$J=${mY9{JCgj{O5wdP4tkH20Yu*vgKiurYgjk}>FMRLPO zvYrKb=p-P>QhWL3*yNX?R!zz*>~}eaWSk83CksPxT*}ntoc_7VI6Xp)#aT^Q2V7l> z8w@fVqb5^F<@!>0rCyW_6?V2Pf<|6E#heaw(6nEJLj!0* T5dJ%c5O~o&3n_c3{a&Q4B(4}^9T1G)-i7fkS|9! z7Qk7bQ5ODGtQCoDt8g#Hb`j57=xdrGAJ$ynMR5Dd%(nb+k?5=%Hfh@$?4OVvY(O}m zX3d4@Pb@W! z{A7B*Em?`u8X?k;x=@bT(aA9c81D90g2(U0SxQGS3Nk9KGblt9s9$v*G;Fd#0)@UK zb2HFSt&xk%Sbr8;!0;FPk1OZ^VLUcS5RbZ$SA8+}T9Hgm5LMMu_A_FrbO89fxXnt% zC>Q&~`73N_acvp;FKP(;Y#z5x^Y6wW `enb2#wb&G6 zNn;H)Y;!ltP1msPFf!O0s`tM$G1n&IOJU*e(eUAwm7?Pyw8O_1oBqPq_p(9`IK?tZ zBL5kC7cO26_8-v-e%UtQs;taK &unn0mN#mN*zAo;1^WF6EI$wL~wo1=d7Db8O)4e+r#MoXXB a({vJzJkM`bNs;w%$3u(Hd0V*H87I2I)oRhJ}d72n%`Vy6xU0V|*lA zN^=-k8JA4STwGj6EQW?iqaY`fNmrs&22)U}@~wYal$k=zDa0Fdamei`AP9x#71{pS z5d|pd%RT$)o5)*=c$|o9D!+;UZ(9MQL#Va5_|D}RD ~eO2e@JFRhj<>25ib-VsoURihf))^eS6( z1Rd2qn4`&9CEVD+Llm4dEU}D+Zt>dPI%~Z@h1k;J1Ua}xhL+=n84-&g=a=&h6L4|< zQi$q;B?JkA!uyg4$3Sq&kNlvo(>%+$9P7Z5ViB0i`0w+QBRVGqs;gfF)=8Tk%_X)J zd55-6+B%*8*r8-l%7#Zs#s2yyA=bXLN^6+B7i+mClEOQp2wAR#iBMjckDVLldB> =a3*Xl &?kG |D_v0nI-%YD;#bc(>|Zg~qvA(bU>fkg8TI*72y5@=YVQ-b3s2Ry z6?hnUZw!1jr@f4_=S%o&uX>KXojLozt2p1zf!e>@h$AwK(ePoHqM3)WghWk7HTPDa z#jMS|g%c(q K|%;8mEK5pSs~u^CLsf9;FD6{n(J$MO3E$^HNv_{S*pwLIFj zJf0x4t9U?Cp}_5Dnuh17R{*&kZBU6i_5H=-Y1b03PUf4oR-idRJQM^g!ux^p&RFpq zfS{|~1g{X^547LeCLe=E7BismlP3+`6TEnIAgW(j=;NOk@RCUf{%uLolkF_?`|C^h z)=v6wKY{p>f%Y(if6PK($Dt`aLZz%KyHrQ|stt?1=-lhNq&2Vd;~mkw@V@MABg^J; z0MlcP)NZ(DynWHAtVB$I`Qylq{xt>weT?8iakZ*Yc;6}|yqcK}b8Q8rzXsyu_urNj z)NNMnh}C<`U}Ai`Do%xpAF3h=DA@V&q#kse&OTEd7ba2cu3PpX$B%EqelNJGqWilF zE-^*%sq1arKYUs1&fLXBA+ludl{ mae@YKAocsDvt8G_Sk1uf z+S(n W$Onir%l{8Gr zXlU4!m^*C1VWR$JVm*z!d?rH05I@ZKw>6nYiCbPh&`#4|?{`@84c$KiR|bK}QGEym zoH uASQ{Z9FG`^blN-0Vpg-MX3sT{jR+sxXZXj|}MGbTYx8hn)4D%e`8byzY BYm-vD;|8_V4eq#4ZEwyjCb-4Xj zAMIn((`jHDAX2>fg9Ha_AofKIEt<*VEZ9$zZ2zk}VPI99p~0Nb6~i6hx<`>J_-#_$ zY{TSJZ0X&BeJWQ~R!mjIm`6))PtJ3+d#d;&?1u*iO11ZayP$dR&
(!}kCu2DVLve-+%f?t0jjnr>X;FR zp07X&Z(cR7kSh^w78_Ff^Pee~I&=umO%W=M7as{}-*;4?!Q4R?F&VG?w?-N6p`bb! z$xIzmibYyw#N!)Dir%Kl%0VdZACBy0jKi*%s4 c-8aoEkz9Ib(G4YRZX=#-E zPKbm*$-m>SBBL>egy@MD_2>&+9vXB7d{o?g=LH*MeP38IH49?4sS5~;9%#v~6Gchz zboS;)BR{CEUK0BS%g3(1mk;N^h$C0jPtqXK(L@_ArmgHjq|(>QJ`{7o#A|@|Q8jgL z84=q9I%cU8YYbJ^m*C3WTaCk1*-bXp`{vojUUUnZ@a_sdEF#iGbQWQqy_KahQAa(r zeL8yl)Ht1KJcX$Vku2^CH^R^@P3>3mW#*~I HJDpL;Iis+VZ8^;BJm~EUE^K!cu2z`tYRK>Gk9R&BUN $-*nC4y0Qd&h!O)?}s^>8w?&BDSy_dz5DuRaaHQ3}b&(8E&4reCl6!Ob$N- zf)D6nQM$@FG*_sE!#f5u0YL+dq4Z^lyOgm8RVxB?>5jT!wHa|`x%vyG+2e5Fu+`Q3 zh-@umHk4YH8kFbC6uHeA^FIRc<65~q0$Ojv;kOLil3VQuo+dgIX$?ENsm0 OgzU0o;TrDE0mzh3LV@n{&g`486+0VX}sM=jhGfetz1rf9Y3+%1fK--tLOHuDeAc z?ez=3=EFJ6JD=P!u*@G8P_vtV{}Cf0<~7U{R*B91(2xc7bTshov~ZM+9R`!wC7UK7 z7ssH3^+y9A`#rxj^t$Zq7kNGJs}^}90)wPS{j6Wub~NReLO?tOj@Hws)Qn#X5Mr5I zyFkjPQ|_1DFc0rV>S}x^dnn*u?Smjb6+vn9Lx49b{$PZ9gU@AHr82g;XFaFpA-5z+ z_2)BNnKG{3AQ5;Nz(J5HJzNo`sw7)DJ%2Ybg}YJ<0E1yHPW@Q4ID5Y%UqPc!m?dsP z`Ww;b!GtaC?6@|(LC^_rars4bnQD%A(QWVelZyqQ-GmbRWYb#L4jea%CUY1?z&ul< zGD39-dm6bf$ +AStiso;i$C==xLU4jntMFs9Pd;c#;bQRm`MNXJR=DHMNY<2Md#mx!9Yd;} z;+0?&W=v>aR4p*h74>&g^&%9U3^*%ClW=Z-y&!wrTr}rygRYG_>qS7@NzNhQu2PBr zP`4nv(Yl%arGe8UUGu9?0shF!X!ZvT#Rd5&*mP>G%*+LT6Y;V9uJR6(NS1KU!DIv8 zXJxkBLTF8MT*E_-8%Iu1yU3+Ox5JNiar(2Ry;}IYG^4~o^Wp)P5;oU2ZQW4n)TX!G zOajw