MetaInfo(BEDictionary dict, Hash infoHash) throws MetaInfoException, InvalidBEncodingException, UnsupportedEncodingException, NullHashException {
		mInfoHash = infoHash;
		
		// ----- Required Keys -----------------------------------------------
		if (dict.contains(KEY_ANNOUNCE))
			mAnnounce = dict.getString(KEY_ANNOUNCE);
		else
			throw new MetaInfoRequiredKeyException(KEY_ANNOUNCE);
		
		if (dict.contains(KEY_INFO))
			mInfo = new Info(dict.getDictionnary(KEY_INFO));
		else
			throw new MetaInfoRequiredKeyException(KEY_INFO);
		// -------------------------------------------------------------------
		
		// ----- Optional keys -----------------------------------------------
		if (dict.contains(KEY_ANNOUNCE_LIST))
			mAnnounceList = new AnnounceList(dict.getList(KEY_ANNOUNCE_LIST));
		
		if (dict.contains(KEY_CREATION_DATE))
			mCreationDate = dict.getLong(KEY_CREATION_DATE);

		if (dict.contains(KEY_CREATED_BY))
			mCreatedBy = dict.getString(KEY_CREATED_BY);

		if (dict.contains(KEY_ENCODING))
			mEncoding = dict.getString(KEY_ENCODING);

		if (dict.contains(KEY_COMMENT))
			mComment = dict.getString(KEY_COMMENT);
		// -------------------------------------------------------------------
	}