constructor() public 
    {
        require(mCURRENT_STATE == STATE_UNINITIALISED);
        
        if (mOwner!=0)
        {
            require (msg.sender == mOwner);
        }
        
      
      mToken = new MEWcoin();
      mMultiSigWallet = MultiSig(mToken.MEW_RESERVE_FUND());
      mDepositWallet = address(mMultiSigWallet);

      
      require(mOwner == 0);
      require(address(mToken.MEW_RESERVE_FUND) != 0x0);
      require(uint256(mToken.decimals()) == decimals);
      
      
      mOwner = msg.sender;
      
      
      mToken.SetAuxOwner(mOwner);
      
      
      mToken.SetupReserve(mMultiSigWallet);
      mToken.SetupCrowdSale();
      emit CreateMEW(address(mToken.MEW_RESERVE_FUND), mToken.TOTAL_RESERVE_FUND());
      emit CreateMEW(address(mToken.MEW_CROWDSALE_FUND), mToken.TOTAL_CROWDSALE_FUND());
      
      
      mCURRENT_STATE = STATE_FUND_INITIALISED;
      
      
      mToken.finishMinting();
      
    }