Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Changeset 2076


Ignore:
Timestamp:
Oct 31, 2008, 7:35:08 AM (15 years ago)
Author:
dafrick
Message:

Completed XMLPort for all objects.

Location:
code/branches/questsystem/src/orxonox/objects
Files:
24 edited

Legend:

Unmodified
Added
Removed
  • code/branches/questsystem/src/orxonox/objects/AddQuest.cc

    r2068 r2076  
    4343    AddQuest::AddQuest() : ChangeQuestStatus()
    4444    {
    45        
    46     }
    47 
    48     /**
    49     @brief
    50         Constructor.
    51     @param questId
    52         The id of the quest to be added.
    53     */
    54     AddQuest::AddQuest(std::string questId) : ChangeQuestStatus(questId)
    55     {
    5645        RegisterObject(AddQuest);
    5746    }
     
    6352    AddQuest::~AddQuest()
    6453    {
     54    }
     55   
     56    void AddQuest::XMLPort(Element& xmlelement, XMLPort::Mode mode)
     57    {
     58        SUPER(AddQuest, XMLPort, xmlelement, mode);
     59       
    6560    }
    6661   
  • code/branches/questsystem/src/orxonox/objects/AddQuest.h

    r2068 r2076  
    3232#include <string>
    3333
     34#include "core/XMLPort.h"
    3435#include "ChangeQuestStatus.h"
    3536
     
    4849        public:
    4950            AddQuest();
    50             AddQuest(std::string questId);
    5151            ~AddQuest();
     52           
     53            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
    5254           
    5355            virtual bool invoke(Player* player); //!< Invokes the effect.
  • code/branches/questsystem/src/orxonox/objects/AddQuestHint.cc

    r2068 r2076  
    4141       
    4242    }
    43 
    44     /**
    45     @brief
    46         Constructor.
    47     @param hintId
    48         The id of the hint to be set to active.
    49     */
    50     AddQuestHint::AddQuestHint(std::string hintId) : QuestEffect()
    51     {
    52         RegisterObject(AddQuestHint);
    53         this->hintId_ = hintId;
    54     }
    5543   
    5644    /**
     
    6048    AddQuestHint::~AddQuestHint()
    6149    {
     50    }
     51   
     52    void AddQuestHint::XMLPort(Element& xmlelement, XMLPort::Mode mode)
     53    {
     54        SUPER(AddQuestHint, XMLPort, xmlelement, mode);
     55       
     56        XMLPortParam(AddQuestHint, "hintId", setHintId, getHintId, xmlelement, mode);
     57       
    6258    }
    6359
  • code/branches/questsystem/src/orxonox/objects/AddQuestHint.h

    r2068 r2076  
    4848        public:
    4949            AddQuestHint();
    50             AddQuestHint(std::string hintId);
    5150            ~AddQuestHint();
     51           
     52            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
    5253           
    5354            virtual bool invoke(Player* player); //!< Invokes the effect.
     
    5556        private:
    5657            std::string hintId_;
     58           
     59            inline const std::string & getHintId(void) const
     60                { return this->hintId_; }
     61            inline void setHintId(const std::string & id)
     62                { this->hintId_ = id; }
    5763   
    5864    };
  • code/branches/questsystem/src/orxonox/objects/AddReward.cc

    r2068 r2076  
    3737    AddReward::AddReward() : QuestEffect()
    3838    {
    39        
    40     }
    41    
    42     /**
    43     @brief
    44         Constructor. Creates a new AddReward effect with an input reward.
    45     @param reward
    46         A reward.
    47     */
    48     AddReward::AddReward(Rewardable* reward) : QuestEffect()
    49     {
    5039        this->initialize();
    51         this->addRewardable(reward);
    52     }
    53    
    54     /**
    55     @brief
    56         Constructor. Creates a new AddReward effect with an input list of rewards.
    57     @param rewards
    58         A list of rewards.
    59     */
    60     AddReward::AddReward(std::list<Rewardable*>* rewards) : QuestEffect()
    61     {
    62         this->initialize();
    63         this->rewards_ = rewards;
    6440    }
    6541   
     
    7248    }
    7349
     50    void AddReward::XMLPort(Element& xmlelement, XMLPort::Mode mode)
     51    {
     52        SUPER(AddReward, XMLPort, xmlelement, mode);
     53       
     54        XMLPortObject(AddReward, Rewardable, "", addRewardable, getRewardables, xmlelement, mode);
     55       
     56    }
     57
    7458    /**
    7559    @brief
     
    7963    {
    8064        RegisterObject(AddReward);
     65    }
     66   
     67    const Rewardable* AddReward::getRewardables(unsigned int index) const
     68    {
     69        int i = index;
     70        for (std::list<Rewardable*>::const_iterator reward = this->rewards_.begin(); reward != this->rewards_.end(); ++reward)
     71        {
     72            if(i == 0)
     73            {
     74               return *reward;
     75            }
     76            i--;
     77        }
     78        return NULL;
    8179    }
    8280
     
    9189    bool AddReward::invoke(Player* player)
    9290    {
    93         if ( this->rewards_ == NULL )
    94         {
    95             COUT(2) << "NULL-Rewards list encountered." << std::endl;
    96             return false;
    97         }
    98        
    9991        bool check = true;
    100         for ( std::list<Rewardable*>::iterator reward = this->rewards_->begin(); reward != this->rewards_->end(); ++reward )
     92        for ( std::list<Rewardable*>::iterator reward = this->rewards_.begin(); reward != this->rewards_.end(); ++reward )
    10193        {
    10294            check = check && (*reward)->reward(player);
  • code/branches/questsystem/src/orxonox/objects/AddReward.h

    r2068 r2076  
    3232#include <list>
    3333
     34#include "core/XMLPort.h"
    3435#include "Rewardable.h"
    3536#include "QuestEffect.h"
     
    4950        public:
    5051            AddReward();
    51             AddReward(Rewardable* reward);
    52             AddReward(std::list<Rewardable*>* rewards);
    5352            ~AddReward();
     53           
     54            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
    5455           
    5556            virtual bool invoke(Player* player); //!< Invokes the effect.
    5657           
    5758        private:
    58             std::list<Rewardable*>* rewards_;
     59            std::list<Rewardable*> rewards_;
    5960       
    6061            void initialize(void); //!< Initializes the object.
    6162       
    6263            inline void addRewardable(Rewardable* reward)
    63                 { this->rewards_->push_back(reward); }
     64                { this->rewards_.push_back(reward); }
     65            const Rewardable* getRewardables(unsigned int index) const;
    6466   
    6567    };
  • code/branches/questsystem/src/orxonox/objects/ChangeQuestStatus.cc

    r2021 r2076  
    3535    ChangeQuestStatus::ChangeQuestStatus() : QuestEffect()
    3636    {
    37        
     37        RegisterObject(ChangeQuestStatus);
    3838    }
    3939
    40     /**
    41     @brief
    42         Constructor.
    43     @param questId
    44         The id of the quest the status should be changed of.
    45     */
    46     ChangeQuestStatus::ChangeQuestStatus(std::string questId) : QuestEffect()
    47     {
    48         RegisterObject(ChangeQuestStatus);
    49         this->questId_ = questId;
    50     }
    51    
    5240    /**
    5341    @brief
     
    5745    {
    5846    }
     47   
     48    void ChangeQuestStatus::XMLPort(Element& xmlelement, XMLPort::Mode mode)
     49    {
     50        SUPER(ChangeQuestStatus, XMLPort, xmlelement, mode);
     51       
     52        XMLPortParam(ChangeQuestStatus, "questId", setQuestId, getQuestId, xmlelement, mode);
     53    }
    5954
    6055}
  • code/branches/questsystem/src/orxonox/objects/ChangeQuestStatus.h

    r2068 r2076  
    3232#include <string>
    3333
     34#include "core/XMLPort.h"
    3435#include "QuestEffect.h"
    3536
     
    4849        public:
    4950            ChangeQuestStatus();
    50             ChangeQuestStatus(std::string questId);
    5151            virtual ~ChangeQuestStatus();
     52           
     53            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
    5254           
    5355            virtual bool invoke(Player* player) = 0; //!< Invokes the effect.
    5456           
    5557        protected:
    56             inline std::string getQuestId(void) //!< Returns the quest id.
    57                 { return questId_; }
     58            inline const std::string & getQuestId(void) const //!< Returns the quest id.
     59                { return this->questId_; }
    5860       
    5961            std::string questId_; //!< The id of the quest the status should be changed of.
     62           
     63        private:
     64            inline void setQuestId(const std::string & id)
     65                { this->questId_ = id; }
    6066
    6167    };
  • code/branches/questsystem/src/orxonox/objects/CompleteQuest.cc

    r2068 r2076  
    4040    CompleteQuest::CompleteQuest() : ChangeQuestStatus()
    4141    {
    42        
    43     }
    44    
    45     /**
    46     @brief
    47         Constructor.
    48     @param questId
    49         The id of the quest to be completed.
    50     */
    51     CompleteQuest::CompleteQuest(std::string questId) : ChangeQuestStatus(questId)
    52     {
    5342        RegisterObject(CompleteQuest);
    5443    }
     
    6049    CompleteQuest::~CompleteQuest()
    6150    {
     51    }
     52   
     53    void CompleteQuest::XMLPort(Element& xmlelement, XMLPort::Mode mode)
     54    {
     55        SUPER(CompleteQuest, XMLPort, xmlelement, mode);
    6256    }
    6357   
  • code/branches/questsystem/src/orxonox/objects/CompleteQuest.h

    r2068 r2076  
    3232#include <string>
    3333
     34#include "core/XMLPort.h"
    3435#include "ChangeQuestStatus.h"
    3536
     
    4849        public:
    4950            CompleteQuest();
    50             CompleteQuest(std::string questId);
    5151            ~CompleteQuest();
     52           
     53            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
    5254           
    5355            virtual bool invoke(Player* player); //!< Invokes the effect.
  • code/branches/questsystem/src/orxonox/objects/FailQuest.cc

    r2068 r2076  
    4040    FailQuest::FailQuest() : ChangeQuestStatus()
    4141    {
    42        
    43     }
    44 
    45     /**
    46     @brief
    47         Constructor.
    48     @param questId
    49         The id of the quest to be failed.
    50     */
    51     FailQuest::FailQuest(std::string questId) : ChangeQuestStatus(questId)
    52     {
    5342        RegisterObject(FailQuest);
    5443    }
     
    6049    FailQuest::~FailQuest()
    6150    {
     51    }
     52   
     53    void FailQuest::XMLPort(Element& xmlelement, XMLPort::Mode mode)
     54    {
     55        SUPER(FailQuest, XMLPort, xmlelement, mode);
    6256    }
    6357   
  • code/branches/questsystem/src/orxonox/objects/FailQuest.h

    r2068 r2076  
    3232#include <string>
    3333
     34#include "core/XMLPort.h"
    3435#include "ChangeQuestStatus.h"
    3536
     
    4849        public:
    4950            FailQuest();
    50             FailQuest(std::string questId);
    5151            ~FailQuest();
     52           
     53            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
    5254           
    5355            virtual bool invoke(Player* player); //!< Invokes the effect.
  • code/branches/questsystem/src/orxonox/objects/GlobalQuest.cc

    r2068 r2076  
    4444        this->initialize();
    4545    }
    46 
    47     /**
    48     @brief
    49         Constructor.
    50     @param id
    51         The unique identifier.
    52     @param title
    53         The title of the quest.
    54     @param description
    55         The description of the quest.
    56     */
    57     GlobalQuest::GlobalQuest(std::string id) : Quest(id)
    58     {
    59         this->initialize();
    60     }
    6146   
    6247    /**
     
    6752    {
    6853       
     54    }
     55   
     56    void GlobalQuest::XMLPort(Element& xmlelement, XMLPort::Mode mode)
     57    {
     58        SUPER(GlobalQuest, XMLPort, xmlelement, mode);
     59
     60        COUT(1) << "New GlobalQuest {" << this->getId() << "} created." << std::endl;
    6961    }
    7062   
  • code/branches/questsystem/src/orxonox/objects/GlobalQuest.h

    r2068 r2076  
    3232#include <set>
    3333
     34#include "core/XMLPort.h"
    3435#include "Quest.h"
    3536
     
    4950        public:
    5051            GlobalQuest();
    51             GlobalQuest(std::string id);
    5252            ~GlobalQuest();
     53           
     54            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
    5355           
    5456        protected:
  • code/branches/questsystem/src/orxonox/objects/LocalQuest.cc

    r2068 r2076  
    4040        this->initialize();
    4141    }
    42 
    43     /**
    44     @brief
    45         Constructor.
    46     @param id
    47         The unique identifier.
    48     */
    49     LocalQuest::LocalQuest(std::string id) : Quest(id)
    50     {
    51         this->initialize();
    52     }
    5342   
    5443    /**
     
    5948    {
    6049       
     50    }
     51   
     52    void LocalQuest::XMLPort(Element& xmlelement, XMLPort::Mode mode)
     53    {
     54        SUPER(LocalQuest, XMLPort, xmlelement, mode);
     55
     56        COUT(1) << "New LocalQuest {" << this->getId() << "} created." << std::endl;
    6157    }
    6258   
  • code/branches/questsystem/src/orxonox/objects/LocalQuest.h

    r2068 r2076  
    3333#include <string>
    3434
     35#include "core/XMLPort.h"
    3536#include "Quest.h"
    3637
     
    4950        public:
    5051            LocalQuest();
    51             LocalQuest(std::string id);
    5252            ~LocalQuest();
     53           
     54            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
    5355           
    5456        protected:
  • code/branches/questsystem/src/orxonox/objects/Quest.cc

    r2068 r2076  
    3838        this->initialize();
    3939    }
    40 
    41     /**
    42     @brief
    43         Constructor. Creates a quest with a given id, title and description.
    44     @param id
    45         The unique identifier of the quest.
    46     @param title
    47         The title of the quest.
    48     @param description
    49         The description of the quest.
    50     */
    51     Quest::Quest(std::string id) : QuestItem(id)
    52     {
    53         this->initialize();
    54     }
    5540   
    5641    /**
     
    6348    }
    6449   
     50    void Quest::XMLPort(Element& xmlelement, XMLPort::Mode mode)
     51    {
     52        SUPER(Quest, XMLPort, xmlelement, mode);
     53       
     54        XMLPortObject(Quest, Quest, "", addSubQuest, getSubQuests, xmlelement, mode);
     55        XMLPortObject(Quest, QuestHint, "", addHint, getHints, xmlelement, mode);
     56        XMLPortObject(Quest, QuestEffect, "fail-effects", addFailEffect, getFailEffects, xmlelement, mode);
     57        XMLPortObject(Quest, QuestEffect, "complete-effects", addCompleteEffect, getCompleteEffects, xmlelement, mode);
     58       
     59        QuestManager::registerQuest(this); //Registers the quest with the QuestManager.
     60    }
     61   
    6562    /**
    6663    @brief
     
    7269       
    7370        this->parentQuest_ = NULL;
    74         QuestManager::registerQuest(this); //Registers the quest with the QuestManager.
    7571    }
    7672
     
    111107        }
    112108       
     109        quest->setParentQuest(this);
    113110        this->subQuests_.push_back(quest);
    114111        return true;
     112    }
     113   
     114   
     115    /**
     116    @brief
     117        Adds a Hint to the list of hints
     118    @param hint
     119        The hint that should be added to the list of hints.
     120    @return
     121        Returns true if the hint was successfully added.
     122    */
     123    bool Quest::addHint(QuestHint* hint)
     124    {
     125        if(hint == NULL)
     126        {
     127            COUT(2) << "A NULL-QuestHint was trying to be added." << std::endl;
     128            return false;
     129        }
     130       
     131        this->hints_.push_back(hint);
     132        hint->setQuest(this);
     133        return true;
     134    }
     135   
     136    /**
     137    @brief
     138       
     139    */
     140    bool Quest::addFailEffect(QuestEffect* effect)
     141    {
     142        if(effect == NULL)
     143        {
     144            COUT(2) << "A NULL-QuestEffect was trying to be added" << std::endl;
     145            return false;
     146        }
     147       
     148        this->failEffects_.push_back(effect);
     149        return true;
     150    }
     151   
     152    /**
     153    @brief
     154       
     155    */
     156    bool Quest::addCompleteEffect(QuestEffect* effect)
     157    {
     158        if(effect == NULL)
     159        {
     160            COUT(2) << "A NULL-QuestEffect was trying to be added" << std::endl;
     161            return false;
     162        }
     163       
     164        this->completeEffects_.push_back(effect);
     165        return true;
     166    }
     167   
     168    /**
     169    @brief
     170       
     171    */
     172    const Quest* Quest::getParentQuest(void)
     173    {
     174        return this->parentQuest_;
     175    }
     176   
     177    /**
     178    @brief
     179       
     180    */
     181    const Quest* Quest::getSubQuests(unsigned int index) const
     182    {
     183        int i = index;
     184        for (std::list<Quest*>::const_iterator subQuest = this->subQuests_.begin(); subQuest != this->subQuests_.end(); ++subQuest)
     185        {
     186            if(i == 0)
     187            {
     188               return *subQuest;
     189            }
     190            i--;
     191        }
     192        return NULL;
     193    }
     194   
     195    /**
     196    @brief
     197       
     198    */
     199    const QuestHint* Quest::getHints(unsigned int index) const
     200    {
     201        int i = index;
     202        for (std::list<QuestHint*>::const_iterator hint = this->hints_.begin(); hint != this->hints_.end(); ++hint)
     203        {
     204            if(i == 0)
     205            {
     206               return *hint;
     207            }
     208            i--;
     209        }
     210        return NULL;
     211    }
     212   
     213    /**
     214    @brief
     215       
     216    */
     217    const QuestEffect* Quest::getFailEffects(unsigned int index) const
     218    {
     219        int i = index;
     220        for (std::list<QuestEffect*>::const_iterator effect = this->failEffects_.begin(); effect != this->failEffects_.end(); ++effect)
     221        {
     222            if(i == 0)
     223            {
     224               return *effect;
     225            }
     226            i--;
     227        }
     228        return NULL;
     229    }
     230   
     231    /**
     232    @brief
     233       
     234    */
     235    const QuestEffect* Quest::getCompleteEffects(unsigned int index) const
     236    {
     237        int i = index;
     238        for (std::list<QuestEffect*>::const_iterator effect = this->completeEffects_.begin(); effect != this->completeEffects_.end(); ++effect)
     239        {
     240            if(i == 0)
     241            {
     242               return *effect;
     243            }
     244            i--;
     245        }
     246        return NULL;
    115247    }
    116248   
     
    175307        return this->getStatus(player) == questStatus::completed;
    176308    }
    177 
    178     /**
    179     @brief
    180         Adds a Hint to the list of hints
    181     @param hint
    182         The hint that should be added to the list of hints.
    183     @return
    184         Returns true if the hint was successfully added.
    185     */
    186     bool Quest::addHint(QuestHint* hint)
    187     {
    188         if(hint == NULL)
    189         {
    190             COUT(2) << "A NULL-QuestHint was trying to be added." << std::endl;
    191             return false;
    192         }
    193        
    194         this->hints_.push_back(hint);
    195         hint->setQuest(this);
    196         return true;
    197     }
    198309   
    199310    /**
  • code/branches/questsystem/src/orxonox/objects/Quest.h

    r2068 r2076  
    3333#include <string>
    3434
     35#include "core/XMLPort.h"
    3536#include "QuestDescription.h"
    3637#include "QuestItem.h"
     
    6768        public:
    6869            Quest();
    69             Quest(std::string id);
    7070            virtual ~Quest();
     71           
     72            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
    7173   
    7274            inline Quest* getParentQuest(void) const //!< Returns the parent quest of the quest.
    7375                { return this->parentQuest_; }
    74             inline const std::list<Quest*> & getSubQuest(void) const //!< Returns the list of sub quests.
     76            inline const std::list<Quest*> & getSubQuestList(void) const //!< Returns the list of sub quests.
    7577                { return this->subQuests_; }
    7678           
     
    8385            bool fail(Player* player); //!< Fails the quest.
    8486            bool complete(Player* player); //!< Completes the quest.
    85                
    86             bool addHint(QuestHint* hint); //!< Add a hint to the list of hints.
    8787           
    8888        protected:
     
    9595            bool setParentQuest(Quest* quest); //!< Sets the parent quest of the quest.
    9696            bool addSubQuest(Quest* quest); //!< Adds a sub quest to the quest.
     97            bool addHint(QuestHint* hint); //!< Add a hint to the list of hints.
     98            bool addFailEffect(QuestEffect* effect);
     99            bool addCompleteEffect(QuestEffect* effect);
     100           
     101            const Quest* getParentQuest(void);
     102            const Quest* getSubQuests(unsigned int index) const;
     103            const QuestHint* getHints(unsigned int index) const;
     104            const QuestEffect* getFailEffects(unsigned int index) const;
     105            const QuestEffect* getCompleteEffects(unsigned int index) const;
    97106           
    98107            virtual questStatus::Enum getStatus(const Player* player) const = 0; //!< Returns the status of the quest for a specific player.
  • code/branches/questsystem/src/orxonox/objects/QuestDescription.cc

    r2068 r2076  
    3939        this->initialize();
    4040    }
    41        
    42     /**
    43     @brief
    44         Constructor. Creates a new QuestDescription object and adds a title and description.
    45     @param title
    46     @param description
    47     */
    48     QuestDescription::QuestDescription(std::string title, std::string description) : BaseObject()
    49     {
    50         this->initialize();
    51         this->title_ = title;
    52         this->description_ = description;
    53     }
    5441   
    5542    QuestDescription::~QuestDescription()
     
    6552        XMLPortParam(QuestDescription, "description", setDescription, getDescription, xmlelement, mode);
    6653       
    67         COUT(1) << "QuestDescription created!" << std::endl;
     54        COUT(1) << "New QuestDescription with title '" << this->getTitle() << "' created." << std::endl;
    6855    }
    6956   
  • code/branches/questsystem/src/orxonox/objects/QuestDescription.h

    r2068 r2076  
    4848        public:
    4949            QuestDescription();
    50             QuestDescription(std::string title, std::string description = "");
    5150            ~QuestDescription();
    5251           
  • code/branches/questsystem/src/orxonox/objects/QuestHint.cc

    r2068 r2076  
    4545        this->initialize();
    4646    }
    47 
    48     /**
    49     @brief
    50         Constructor.  Needs as input a unique identifier to be able to identify different instances of this class (and subclasses).
    51     @param id
    52         The unique identifier.
    53     @param title
    54         The title of the hint.
    55     @param description
    56         The description of the hint, resp. the hint itself.
    57     */
    58     QuestHint::QuestHint(std::string id) : QuestItem(id)
    59     {
    60         this->initialize();
    61     }
    6247   
    6348    /**
     
    7863    {
    7964        SUPER(QuestHint, XMLPort, xmlelement, mode);
     65       
     66        COUT(1) << "New QuestHint {" << this->getId() << "} created." << std::endl;
    8067    }
    8168
  • code/branches/questsystem/src/orxonox/objects/QuestHint.h

    r2068 r2076  
    6767        public:
    6868            QuestHint();
    69             QuestHint(std::string id);
    7069            ~QuestHint();
    7170           
  • code/branches/questsystem/src/orxonox/objects/QuestItem.cc

    r2068 r2076  
    3232
    3333namespace orxonox {
    34 
    35     CreateFactory(QuestItem);
    3634   
    3735    QuestItem::QuestItem() : BaseObject()
    3836    {
    3937        this->initialize();
    40     }
    41    
    42     /**
    43     @brief
    44         Constructor. Needs as input a unique identifier to be able to identify different instances of this class (and subclasses).
    45     @param id
    46         The unique identifier. Should be of GUID form: http://en.wikipedia.org/wiki/Globally_Unique_Identifier#Basic_structure
    47     */
    48     QuestItem::QuestItem(std::string id) : BaseObject()
    49     {
    50         this->initialize();
    51        
    52         this->id_ = id;
    5338    }
    5439   
  • code/branches/questsystem/src/orxonox/objects/QuestItem.h

    r2068 r2076  
    5151        public:
    5252            QuestItem();
    53             QuestItem(std::string id);
    5453            virtual ~QuestItem();
    5554           
Note: See TracChangeset for help on using the changeset viewer.