added: now plugin ticket uses a new horizontal table (plugins.ticket)

columns: dir_id, param, value
we are able to build complicated tickets 



git-svn-id: svn://ttmath.org/publicrep/winix/trunk@664 e52654a7-88a9-db11-a3e9-0013d4bc506e
This commit is contained in:
2010-10-19 00:31:20 +00:00
parent 33057acd62
commit 1b053c03ba
53 changed files with 1680 additions and 1902 deletions

View File

@@ -3,9 +3,9 @@
acceptbaseparser.o: acceptbaseparser.h
app.o: app.h config.h confparser.h htmlfilter.h system.h dirs.h item.h
app.o: dircontainer.h ../db/db.h ../db/dbbase.h ../db/dbconn.h
app.o: ../db/dbtextstream.h ../core/textstream.h ../db/dbitemquery.h
app.o: ../core/item.h ../db/dbitemcolumns.h ../core/user.h ../core/group.h
app.o: ../core/thread.h ../core/error.h log.h ../core/dircontainer.h
app.o: ../db/dbtextstream.h ../core/textstream.h ../core/error.h log.h
app.o: ../db/dbitemquery.h ../core/item.h ../db/dbitemcolumns.h
app.o: ../core/user.h ../core/group.h ../core/thread.h ../core/dircontainer.h
app.o: ../core/ugcontainer.h request.h requesttypes.h session.h error.h
app.o: user.h plugindata.h rebus.h mounts.h mount.h mountparser.h users.h
app.o: ugcontainer.h lastcontainer.h groups.h group.h loadavg.h
@@ -38,12 +38,12 @@ config.o: config.h confparser.h htmlfilter.h log.h plugin.h pluginmsg.h
config.o: plugindata.h request.h requesttypes.h session.h item.h error.h
config.o: user.h rebus.h system.h dirs.h dircontainer.h ../db/db.h
config.o: ../db/dbbase.h ../db/dbconn.h ../db/dbtextstream.h
config.o: ../core/textstream.h ../db/dbitemquery.h ../core/item.h
config.o: ../db/dbitemcolumns.h ../core/user.h ../core/group.h
config.o: ../core/thread.h ../core/error.h ../core/dircontainer.h
config.o: ../core/ugcontainer.h mounts.h mount.h mountparser.h users.h
config.o: ugcontainer.h lastcontainer.h groups.h group.h loadavg.h
config.o: sessionmanager.h sessioncontainer.h ../functions/functions.h
config.o: ../core/textstream.h ../core/error.h ../db/dbitemquery.h
config.o: ../core/item.h ../db/dbitemcolumns.h ../core/user.h ../core/group.h
config.o: ../core/thread.h ../core/dircontainer.h ../core/ugcontainer.h
config.o: mounts.h mount.h mountparser.h users.h ugcontainer.h
config.o: lastcontainer.h groups.h group.h loadavg.h sessionmanager.h
config.o: sessioncontainer.h ../functions/functions.h
config.o: ../functions/functionbase.h ../core/request.h ../core/config.h
config.o: ../core/system.h ../core/notify.h ../../ezc/src/ezc.h
config.o: ../functions/functionparser.h ../functions/adduser.h
@@ -66,21 +66,21 @@ config.o: ../core/sessionmanager.h
confparser.o: confparser.h misc.h item.h
dircontainer.o: dircontainer.h item.h log.h
dirs.o: dirs.h item.h dircontainer.h ../db/db.h ../db/dbbase.h ../db/dbconn.h
dirs.o: ../db/dbtextstream.h ../core/textstream.h ../db/dbitemquery.h
dirs.o: ../core/item.h ../db/dbitemcolumns.h ../core/user.h ../core/group.h
dirs.o: ../core/thread.h ../core/error.h log.h ../core/dircontainer.h
dirs.o: ../core/ugcontainer.h request.h requesttypes.h session.h error.h
dirs.o: user.h plugindata.h rebus.h config.h confparser.h htmlfilter.h
dirs.o: notify.h ../templatesnotify/templatesnotify.h ../../ezc/src/ezc.h
dirs.o: ../core/mount.h ../core/locale.h ../core/config.h ../templates/misc.h
dirs.o: ../templates/localefilter.h ../core/locale.h system.h mounts.h
dirs.o: mount.h mountparser.h users.h ugcontainer.h lastcontainer.h groups.h
dirs.o: group.h loadavg.h
dirs.o: ../db/dbtextstream.h ../core/textstream.h ../core/error.h log.h
dirs.o: ../db/dbitemquery.h ../core/item.h ../db/dbitemcolumns.h
dirs.o: ../core/user.h ../core/group.h ../core/thread.h
dirs.o: ../core/dircontainer.h ../core/ugcontainer.h request.h requesttypes.h
dirs.o: session.h error.h user.h plugindata.h rebus.h config.h confparser.h
dirs.o: htmlfilter.h notify.h ../templatesnotify/templatesnotify.h
dirs.o: ../../ezc/src/ezc.h ../core/mount.h ../core/locale.h ../core/config.h
dirs.o: ../templates/misc.h ../templates/localefilter.h ../core/locale.h
dirs.o: system.h mounts.h mount.h mountparser.h users.h ugcontainer.h
dirs.o: lastcontainer.h groups.h group.h loadavg.h
groups.o: groups.h group.h ugcontainer.h ../db/db.h ../db/dbbase.h
groups.o: ../db/dbconn.h ../db/dbtextstream.h ../core/textstream.h
groups.o: ../db/dbitemquery.h ../core/item.h ../db/dbitemcolumns.h
groups.o: ../core/user.h ../core/group.h ../core/thread.h ../core/error.h
groups.o: log.h ../core/dircontainer.h ../core/ugcontainer.h
groups.o: ../core/error.h log.h ../db/dbitemquery.h ../core/item.h
groups.o: ../db/dbitemcolumns.h ../core/user.h ../core/group.h
groups.o: ../core/thread.h ../core/dircontainer.h ../core/ugcontainer.h
htmlfilter.o: htmlfilter.h
httpsimpleparser.o: httpsimpleparser.h
lastcontainer.o: lastcontainer.h log.h
@@ -91,27 +91,27 @@ misc.o: misc.h item.h log.h
mount.o: mount.h
mountparser.o: mountparser.h mount.h item.h error.h dirs.h dircontainer.h
mountparser.o: ../db/db.h ../db/dbbase.h ../db/dbconn.h ../db/dbtextstream.h
mountparser.o: ../core/textstream.h ../db/dbitemquery.h ../core/item.h
mountparser.o: ../db/dbitemcolumns.h ../core/user.h ../core/group.h
mountparser.o: ../core/thread.h ../core/error.h log.h ../core/dircontainer.h
mountparser.o: ../core/textstream.h ../core/error.h log.h ../db/dbitemquery.h
mountparser.o: ../core/item.h ../db/dbitemcolumns.h ../core/user.h
mountparser.o: ../core/group.h ../core/thread.h ../core/dircontainer.h
mountparser.o: ../core/ugcontainer.h request.h requesttypes.h session.h
mountparser.o: user.h plugindata.h rebus.h config.h confparser.h htmlfilter.h
mountparser.o: misc.h
mounts.o: mounts.h mount.h error.h dirs.h item.h dircontainer.h ../db/db.h
mounts.o: ../db/dbbase.h ../db/dbconn.h ../db/dbtextstream.h
mounts.o: ../core/textstream.h ../db/dbitemquery.h ../core/item.h
mounts.o: ../db/dbitemcolumns.h ../core/user.h ../core/group.h
mounts.o: ../core/thread.h ../core/error.h log.h ../core/dircontainer.h
mounts.o: ../core/ugcontainer.h request.h requesttypes.h session.h user.h
mounts.o: plugindata.h rebus.h config.h confparser.h htmlfilter.h
mounts.o: mountparser.h plugin.h pluginmsg.h system.h users.h ugcontainer.h
mounts.o: lastcontainer.h groups.h group.h loadavg.h sessionmanager.h
mounts.o: sessioncontainer.h ../functions/functions.h
mounts.o: ../functions/functionbase.h ../core/request.h ../core/config.h
mounts.o: ../core/system.h ../core/notify.h ../../ezc/src/ezc.h
mounts.o: ../functions/functionparser.h ../functions/adduser.h
mounts.o: ../functions/cat.h ../functions/chmod.h ../functions/privchanger.h
mounts.o: ../functions/chown.h ../functions/ckeditor.h ../functions/cp.h
mounts.o: ../core/textstream.h ../core/error.h log.h ../db/dbitemquery.h
mounts.o: ../core/item.h ../db/dbitemcolumns.h ../core/user.h ../core/group.h
mounts.o: ../core/thread.h ../core/dircontainer.h ../core/ugcontainer.h
mounts.o: request.h requesttypes.h session.h user.h plugindata.h rebus.h
mounts.o: config.h confparser.h htmlfilter.h mountparser.h plugin.h
mounts.o: pluginmsg.h system.h users.h ugcontainer.h lastcontainer.h groups.h
mounts.o: group.h loadavg.h sessionmanager.h sessioncontainer.h
mounts.o: ../functions/functions.h ../functions/functionbase.h
mounts.o: ../core/request.h ../core/config.h ../core/system.h
mounts.o: ../core/notify.h ../../ezc/src/ezc.h ../functions/functionparser.h
mounts.o: ../functions/adduser.h ../functions/cat.h ../functions/chmod.h
mounts.o: ../functions/privchanger.h ../functions/chown.h
mounts.o: ../functions/ckeditor.h ../functions/cp.h
mounts.o: ../functions/createthread.h ../functions/default.h
mounts.o: ../functions/download.h ../functions/emacs.h ../functions/last.h
mounts.o: ../functions/login.h ../functions/logout.h ../functions/ls.h
@@ -129,24 +129,25 @@ mounts.o: ../core/sessionmanager.h
notify.o: log.h notify.h ../templatesnotify/templatesnotify.h
notify.o: ../../ezc/src/ezc.h ../core/mount.h ../core/locale.h confparser.h
notify.o: ../core/config.h ../templates/misc.h ../templates/localefilter.h
notify.o: ../core/locale.h request.h requesttypes.h session.h item.h error.h
notify.o: user.h plugindata.h rebus.h config.h htmlfilter.h system.h dirs.h
notify.o: dircontainer.h ../db/db.h ../db/dbbase.h ../db/dbconn.h
notify.o: ../db/dbtextstream.h ../core/textstream.h ../db/dbitemquery.h
notify.o: ../core/item.h ../db/dbitemcolumns.h ../core/user.h ../core/group.h
notify.o: ../core/thread.h ../core/error.h ../core/dircontainer.h
notify.o: ../core/ugcontainer.h mounts.h mount.h mountparser.h users.h
notify.o: ugcontainer.h lastcontainer.h groups.h group.h loadavg.h misc.h
notify.o: ../core/locale.h ../core/user.h request.h requesttypes.h session.h
notify.o: item.h error.h user.h plugindata.h rebus.h config.h htmlfilter.h
notify.o: system.h dirs.h dircontainer.h ../db/db.h ../db/dbbase.h
notify.o: ../db/dbconn.h ../db/dbtextstream.h ../core/textstream.h
notify.o: ../core/error.h ../db/dbitemquery.h ../core/item.h
notify.o: ../db/dbitemcolumns.h ../core/group.h ../core/thread.h
notify.o: ../core/dircontainer.h ../core/ugcontainer.h mounts.h mount.h
notify.o: mountparser.h users.h ugcontainer.h lastcontainer.h groups.h
notify.o: group.h loadavg.h misc.h
plugin.o: plugin.h pluginmsg.h log.h plugindata.h config.h confparser.h
plugin.o: htmlfilter.h request.h requesttypes.h session.h item.h error.h
plugin.o: user.h rebus.h system.h dirs.h dircontainer.h ../db/db.h
plugin.o: ../db/dbbase.h ../db/dbconn.h ../db/dbtextstream.h
plugin.o: ../core/textstream.h ../db/dbitemquery.h ../core/item.h
plugin.o: ../db/dbitemcolumns.h ../core/user.h ../core/group.h
plugin.o: ../core/thread.h ../core/error.h ../core/dircontainer.h
plugin.o: ../core/ugcontainer.h mounts.h mount.h mountparser.h users.h
plugin.o: ugcontainer.h lastcontainer.h groups.h group.h loadavg.h
plugin.o: sessionmanager.h sessioncontainer.h ../functions/functions.h
plugin.o: ../core/textstream.h ../core/error.h ../db/dbitemquery.h
plugin.o: ../core/item.h ../db/dbitemcolumns.h ../core/user.h ../core/group.h
plugin.o: ../core/thread.h ../core/dircontainer.h ../core/ugcontainer.h
plugin.o: mounts.h mount.h mountparser.h users.h ugcontainer.h
plugin.o: lastcontainer.h groups.h group.h loadavg.h sessionmanager.h
plugin.o: sessioncontainer.h ../functions/functions.h
plugin.o: ../functions/functionbase.h ../core/request.h ../core/config.h
plugin.o: ../core/system.h ../core/notify.h ../../ezc/src/ezc.h
plugin.o: ../functions/functionparser.h ../functions/adduser.h
@@ -170,9 +171,9 @@ plugindata.o: plugindata.h plugin.h pluginmsg.h log.h config.h confparser.h
plugindata.o: htmlfilter.h request.h requesttypes.h session.h item.h error.h
plugindata.o: user.h rebus.h system.h dirs.h dircontainer.h ../db/db.h
plugindata.o: ../db/dbbase.h ../db/dbconn.h ../db/dbtextstream.h
plugindata.o: ../core/textstream.h ../db/dbitemquery.h ../core/item.h
plugindata.o: ../db/dbitemcolumns.h ../core/user.h ../core/group.h
plugindata.o: ../core/thread.h ../core/error.h ../core/dircontainer.h
plugindata.o: ../core/textstream.h ../core/error.h ../db/dbitemquery.h
plugindata.o: ../core/item.h ../db/dbitemcolumns.h ../core/user.h
plugindata.o: ../core/group.h ../core/thread.h ../core/dircontainer.h
plugindata.o: ../core/ugcontainer.h mounts.h mount.h mountparser.h users.h
plugindata.o: ugcontainer.h lastcontainer.h groups.h group.h loadavg.h
plugindata.o: sessionmanager.h sessioncontainer.h ../functions/functions.h
@@ -205,9 +206,9 @@ request.o: request.h requesttypes.h session.h item.h error.h user.h
request.o: plugindata.h rebus.h config.h confparser.h htmlfilter.h log.h
request.o: plugin.h pluginmsg.h system.h dirs.h dircontainer.h ../db/db.h
request.o: ../db/dbbase.h ../db/dbconn.h ../db/dbtextstream.h
request.o: ../core/textstream.h ../db/dbitemquery.h ../core/item.h
request.o: ../db/dbitemcolumns.h ../core/user.h ../core/group.h
request.o: ../core/thread.h ../core/error.h ../core/dircontainer.h
request.o: ../core/textstream.h ../core/error.h ../db/dbitemquery.h
request.o: ../core/item.h ../db/dbitemcolumns.h ../core/user.h
request.o: ../core/group.h ../core/thread.h ../core/dircontainer.h
request.o: ../core/ugcontainer.h mounts.h mount.h mountparser.h users.h
request.o: ugcontainer.h lastcontainer.h groups.h group.h loadavg.h
request.o: sessionmanager.h sessioncontainer.h ../functions/functions.h
@@ -238,9 +239,9 @@ sessionmanager.o: error.h user.h plugindata.h rebus.h lastcontainer.h
sessionmanager.o: config.h confparser.h htmlfilter.h request.h requesttypes.h
sessionmanager.o: system.h dirs.h dircontainer.h ../db/db.h ../db/dbbase.h
sessionmanager.o: ../db/dbconn.h ../db/dbtextstream.h ../core/textstream.h
sessionmanager.o: ../db/dbitemquery.h ../core/item.h ../db/dbitemcolumns.h
sessionmanager.o: ../core/user.h ../core/group.h ../core/thread.h
sessionmanager.o: ../core/error.h log.h ../core/dircontainer.h
sessionmanager.o: ../core/error.h log.h ../db/dbitemquery.h ../core/item.h
sessionmanager.o: ../db/dbitemcolumns.h ../core/user.h ../core/group.h
sessionmanager.o: ../core/thread.h ../core/dircontainer.h
sessionmanager.o: ../core/ugcontainer.h mounts.h mount.h mountparser.h
sessionmanager.o: users.h ugcontainer.h groups.h group.h loadavg.h
sessionmanager.o: sessionparser.h plugin.h pluginmsg.h
@@ -272,28 +273,33 @@ sessionparser.o: sessionparser.h session.h item.h error.h user.h plugindata.h
sessionparser.o: rebus.h sessioncontainer.h lastcontainer.h users.h
sessionparser.o: ugcontainer.h request.h requesttypes.h config.h confparser.h
sessionparser.o: htmlfilter.h ../db/db.h ../db/dbbase.h ../db/dbconn.h
sessionparser.o: ../db/dbtextstream.h ../core/textstream.h
sessionparser.o: ../db/dbitemquery.h ../core/item.h ../db/dbitemcolumns.h
sessionparser.o: ../core/user.h ../core/group.h ../core/thread.h
sessionparser.o: ../core/error.h log.h ../core/dircontainer.h
sessionparser.o: ../db/dbtextstream.h ../core/textstream.h ../core/error.h
sessionparser.o: log.h ../db/dbitemquery.h ../core/item.h
sessionparser.o: ../db/dbitemcolumns.h ../core/user.h ../core/group.h
sessionparser.o: ../core/thread.h ../core/dircontainer.h
sessionparser.o: ../core/ugcontainer.h
system.o: system.h dirs.h item.h dircontainer.h ../db/db.h ../db/dbbase.h
system.o: ../db/dbconn.h ../db/dbtextstream.h ../core/textstream.h
system.o: ../db/dbitemquery.h ../core/item.h ../db/dbitemcolumns.h
system.o: ../core/user.h ../core/group.h ../core/thread.h ../core/error.h
system.o: log.h ../core/dircontainer.h ../core/ugcontainer.h request.h
system.o: requesttypes.h session.h error.h user.h plugindata.h rebus.h
system.o: config.h confparser.h htmlfilter.h mounts.h mount.h mountparser.h
system.o: users.h ugcontainer.h lastcontainer.h groups.h group.h loadavg.h
system.o: misc.h notify.h ../templatesnotify/templatesnotify.h
system.o: ../../ezc/src/ezc.h ../core/mount.h ../core/locale.h
system.o: ../core/config.h ../templates/misc.h ../templates/localefilter.h
system.o: ../core/locale.h
system.o: ../core/error.h log.h ../db/dbitemquery.h ../core/item.h
system.o: ../db/dbitemcolumns.h ../core/user.h ../core/group.h
system.o: ../core/thread.h ../core/dircontainer.h ../core/ugcontainer.h
system.o: request.h requesttypes.h session.h error.h user.h plugindata.h
system.o: rebus.h config.h confparser.h htmlfilter.h mounts.h mount.h
system.o: mountparser.h users.h ugcontainer.h lastcontainer.h groups.h
system.o: group.h loadavg.h misc.h notify.h
system.o: ../templatesnotify/templatesnotify.h ../../ezc/src/ezc.h
system.o: ../core/mount.h ../core/locale.h ../core/config.h
system.o: ../templates/misc.h ../templates/localefilter.h ../core/locale.h
system.o: ../templates/templates.h ../templates/patterncacher.h
system.o: ../core/item.h ../templates/ckeditorgetparser.h
system.o: ../core/httpsimpleparser.h ../core/log.h
system.o: ../templates/indexpatterns.h ../core/request.h ../core/system.h
system.o: ../core/sessionmanager.h
textstream.o: textstream.h
users.o: users.h user.h ugcontainer.h lastcontainer.h request.h
users.o: requesttypes.h session.h item.h error.h plugindata.h rebus.h
users.o: config.h confparser.h htmlfilter.h ../db/db.h ../db/dbbase.h
users.o: ../db/dbconn.h ../db/dbtextstream.h ../core/textstream.h
users.o: ../db/dbitemquery.h ../core/item.h ../db/dbitemcolumns.h
users.o: ../core/user.h ../core/group.h ../core/thread.h ../core/error.h
users.o: log.h ../core/dircontainer.h ../core/ugcontainer.h
users.o: ../core/error.h log.h ../db/dbitemquery.h ../core/item.h
users.o: ../db/dbitemcolumns.h ../core/user.h ../core/group.h
users.o: ../core/thread.h ../core/dircontainer.h ../core/ugcontainer.h

View File

@@ -117,7 +117,8 @@ return true;
// !! dac clearowanie childs_tab
// !! ewentualnie mozna dodac trzeci domyslny parametr bool clear_tab = true
bool Dirs::GetDirChilds(long parent, std::vector<Item*> & childs_tab)
{
if( parent != -1 && !IsDir(parent) )

View File

@@ -36,7 +36,7 @@ public:
// these methods return false if there is no such a dir
bool IsDir(long dir_id);
bool GetDirChilds(long parent_id, std::vector<Item*> & childs_tab);
bool GetDirChilds(long parent_id, std::vector<Item*> & childs_tab); // !! zamienic na GetChilds()
bool MakePath(long dir_id, std::string & path);
bool ChangeParent(long dir_id, long new_parent_id);
bool HasParent(long dir_id, long parent_id);
@@ -45,7 +45,7 @@ public:
int AnalyzePath(const std::string & path, long & dir_id, std::string & dir, std::string & file);
static void SplitPath(const std::string & path, std::string & dir, std::string & file);
DirContainer::ParentIterator FindFirstParent(long parent_id);
DirContainer::ParentIterator FindFirstParent(long parent_id); // !! zmienic w koncu nazwe na FindFirstChild
DirContainer::ParentIterator NextParent(DirContainer::ParentIterator i);
DirContainer::ParentIterator ParentEnd();

View File

@@ -514,6 +514,13 @@ return false;
}
bool IsSubString(const std::string & short_str, const std::string & long_str)
{
return IsSubString(short_str.c_str(), long_str.c_str());
}
bool IsSubStringNoCase(const char * short_str, const char * long_str)
{
while( *short_str && *long_str && ToSmall(*short_str) == ToSmall(*long_str) )
@@ -529,6 +536,12 @@ return false;
}
bool IsSubStringNoCase(const std::string & short_str, const std::string & long_str)
{
return IsSubStringNoCase(short_str.c_str(), long_str.c_str());
}
bool EqualNoCase(const char * str1, const char * str2)
{
while( *str1 && *str2 && ToSmall(*str1) == ToSmall(*str2) )

View File

@@ -54,7 +54,9 @@ const char * SkipWhite(const char * s);
const char * ToStr(int value);
bool IsSubString(const char * short_str, const char * long_str);
bool IsSubString(const std::string & short_str, const std::string & long_str);
bool IsSubStringNoCase(const char * short_str, const char * long_str);
bool IsSubStringNoCase(const std::string & short_str, const std::string & long_str);
bool EqualNoCase(const char * str1, const char * str2);
bool EqualNoCase(const std::string & str1, const std::string & str2);

View File

@@ -11,7 +11,7 @@
#include "misc.h"
#include "error.h"
#include "notify.h"
#include "templates/templates.h"
@@ -485,7 +485,7 @@ bool System::MakePath(Item & item, bool create_dir)
Error System::AddFile(Item & item)
Error System::AddFile(Item & item, bool notify)
{
if( item.type == Item::dir )
return WINIX_ERR_FILE_EXPECTED;
@@ -497,7 +497,8 @@ Error System::AddFile(Item & item)
log << log2 << "System: added a new file, url: " << item.url << ", id: " << item.id
<< ", parent_id: " << item.parent_id << logend;
request->notify_code |= WINIX_NOTIFY_ITEM_ADD;
if( notify )
request->notify_code |= WINIX_NOTIFY_ITEM_ADD;
}
return status;
@@ -506,7 +507,7 @@ return status;
Error System::EditFile(Item & item, bool with_url)
Error System::EditFile(Item & item, bool with_url, bool notify)
{
if( item.type == Item::dir )
return WINIX_ERR_FILE_EXPECTED;
@@ -521,13 +522,14 @@ Error System::EditFile(Item & item, bool with_url)
if( status == WINIX_ERR_OK )
{
TemplatesFunctions::pattern_cacher.UpdatePattern(item);
log << log2 << "System: modified an item" << logend;
request->notify_code |= WINIX_NOTIFY_ITEM_EDIT;
if( notify )
request->notify_code |= WINIX_NOTIFY_ITEM_EDIT;
}
return status;
}

View File

@@ -83,8 +83,8 @@ public:
bool MakePath(const Item & item, std::string & path, bool create_dir);
bool MakePath(Item & item, bool create_dir); // output path is: item.auth_path
Error AddFile(Item & item);
Error EditFile(Item & item, bool with_url = true);
Error AddFile(Item & item, bool notify = true);
Error EditFile(Item & item, bool with_url = true, bool notify = true);
private:
Request * request;