ETH Price: $3,146.91 (+0.88%)
Gas: 2 Gwei

Contract

0x6652A55CeF751B9Fb66b0d61fa2210AebB7fb244
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Transfer60218302018-07-24 13:18:252181 days ago1532438305IN
0x6652A55C...ebB7fb244
1.0117 ETH0.000871941
Transfer58979172018-07-03 11:03:092202 days ago1530615789IN
0x6652A55C...ebB7fb244
0.1 ETH0.0031899150
Transfer58978792018-07-03 10:50:392202 days ago1530615039IN
0x6652A55C...ebB7fb244
0.04 ETH0.00317865150
Transfer58978342018-07-03 10:39:462202 days ago1530614386IN
0x6652A55C...ebB7fb244
0.0699 ETH0.00317865150
Transfer58285812018-06-21 13:16:582214 days ago1529587018IN
0x6652A55C...ebB7fb244
1 ETH0.0008506440
Transfer58285732018-06-21 13:15:482214 days ago1529586948IN
0x6652A55C...ebB7fb244
1 ETH0.0008506440
Transfer58285692018-06-21 13:14:272214 days ago1529586867IN
0x6652A55C...ebB7fb244
1 ETH0.0008506440
Transfer58285582018-06-21 13:10:212214 days ago1529586621IN
0x6652A55C...ebB7fb244
1 ETH0.0008440
Transfer57863972018-06-14 8:16:242221 days ago1528964184IN
0x6652A55C...ebB7fb244
0.2 ETH0.00086141
Transfer57115162018-06-01 2:28:182234 days ago1527820098IN
0x6652A55C...ebB7fb244
8.876137 ETH0.0003189915
Transfer57111172018-06-01 0:42:092234 days ago1527813729IN
0x6652A55C...ebB7fb244
0.19785423 ETH0.0002126610
Transfer57107882018-05-31 23:10:442234 days ago1527808244IN
0x6652A55C...ebB7fb244
0.19778816 ETH0.0002339211
Transfer57018622018-05-30 9:12:212236 days ago1527671541IN
0x6652A55C...ebB7fb244
1.5 ETH0.0004220
Transfer56970192018-05-29 12:29:572237 days ago1527596997IN
0x6652A55C...ebB7fb244
1 ETH0.00086141
Transfer56835642018-05-27 3:31:492239 days ago1527391909IN
0x6652A55C...ebB7fb244
0.99 ETH0.000063793
Transfer56569632018-05-22 10:19:002244 days ago1526984340IN
0x6652A55C...ebB7fb244
1.9973 ETH0.0002551912
Transfer56218842018-05-16 5:27:072250 days ago1526448427IN
0x6652A55C...ebB7fb244
1 ETH0.000170128
Transfer56175412018-05-15 11:08:092251 days ago1526382489IN
0x6652A55C...ebB7fb244
0.1 ETH0.0002126610
Transfer55523732018-05-04 2:03:572262 days ago1525399437IN
0x6652A55C...ebB7fb244
0.0086 ETH0.000063573
Transfer55383542018-05-01 14:59:302264 days ago1525186770IN
0x6652A55C...ebB7fb244
0.37 ETH0.0038707347
Transfer55383522018-05-01 14:59:102264 days ago1525186750IN
0x6652A55C...ebB7fb244
1 ETH0.000134712
Transfer55383522018-05-01 14:59:102264 days ago1525186750IN
0x6652A55C...ebB7fb244
29 ETH0.000235743.5
Transfer55383502018-05-01 14:58:392264 days ago1525186719IN
0x6652A55C...ebB7fb244
0.2 ETH0.000275373.34375
Transfer55383402018-05-01 14:56:132264 days ago1525186573IN
0x6652A55C...ebB7fb244
0.097 ETH0.000070853.34375
Transfer55383372018-05-01 14:55:012264 days ago1525186501IN
0x6652A55C...ebB7fb244
1.5 ETH0.000225223.34375
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
55383542018-05-01 14:59:302264 days ago1525186770
0x6652A55C...ebB7fb244
0.37 ETH
55383522018-05-01 14:59:102264 days ago1525186750
0x6652A55C...ebB7fb244
1 ETH
55383522018-05-01 14:59:102264 days ago1525186750
0x6652A55C...ebB7fb244
29 ETH
55383502018-05-01 14:58:392264 days ago1525186719
0x6652A55C...ebB7fb244
0.2 ETH
55383372018-05-01 14:55:012264 days ago1525186501
0x6652A55C...ebB7fb244
1.5 ETH
55383292018-05-01 14:52:362264 days ago1525186356
0x6652A55C...ebB7fb244
0.23 ETH
55383212018-05-01 14:51:052264 days ago1525186265
0x6652A55C...ebB7fb244
15.99950664 ETH
55383202018-05-01 14:50:142264 days ago1525186214
0x6652A55C...ebB7fb244
1.19924 ETH
55382952018-05-01 14:42:442264 days ago1525185764
0x6652A55C...ebB7fb244
1.09918 ETH
55382932018-05-01 14:42:022264 days ago1525185722
0x6652A55C...ebB7fb244
0.44317058 ETH
55382692018-05-01 14:37:422264 days ago1525185462
0x6652A55C...ebB7fb244
1 ETH
55382642018-05-01 14:36:202264 days ago1525185380
0x6652A55C...ebB7fb244
2 ETH
55382592018-05-01 14:35:042264 days ago1525185304
0x6652A55C...ebB7fb244
0.65 ETH
55382492018-05-01 14:32:362264 days ago1525185156
0x6652A55C...ebB7fb244
12.98967058 ETH
55382422018-05-01 14:30:582264 days ago1525185058
0x6652A55C...ebB7fb244
1 ETH
55382332018-05-01 14:28:322264 days ago1525184912
0x6652A55C...ebB7fb244
6.0181 ETH
55381992018-05-01 14:19:002264 days ago1525184340
0x6652A55C...ebB7fb244
1.99973058 ETH
55381832018-05-01 14:14:222264 days ago1525184062
0x6652A55C...ebB7fb244
0.303 ETH
55381742018-05-01 14:11:592264 days ago1525183919
0x6652A55C...ebB7fb244
5 ETH
55381592018-05-01 14:08:472264 days ago1525183727
0x6652A55C...ebB7fb244
0.10945293 ETH
55381572018-05-01 14:08:342264 days ago1525183714
0x6652A55C...ebB7fb244
0.39967058 ETH
55381252018-05-01 13:59:072265 days ago1525183147
0x6652A55C...ebB7fb244
0.199 ETH
55380482018-05-01 13:44:252265 days ago1525182265
0x6652A55C...ebB7fb244
10.48889688 ETH
55380322018-05-01 13:41:262265 days ago1525182086
0x6652A55C...ebB7fb244
11.181 ETH
55380192018-05-01 13:37:272265 days ago1525181847
0x6652A55C...ebB7fb244
1.5 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
MplusCrowdsaleA

Compiler Version
v0.4.19+commit.c4cbbb05

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
/**
 *Submitted for verification at Etherscan.io on 2018-02-18
*/

/**
 *  Crowdsale for m+plus coin phase 1
 *
 *  Based on OpenZeppelin framework.
 *  https://openzeppelin.org
 **/

pragma solidity ^0.4.18;

/**
 * Safe Math library from OpenZeppelin framework
 * https://openzeppelin.org
 *
 * @title SafeMath
 * @dev Math operations with safety checks that throw on error
 */
library SafeMath {
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }
        uint256 c = a * b;
        assert(c / a == b);
        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        // assert(b > 0); // Solidity automatically throws when dividing by 0
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold
        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        assert(b <= a);
        return a - b;
    }

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        assert(c >= a);
        return c;
    }
}

// ERC20 interface
contract ERC20 {
    function totalSupply() public view returns (uint256);
    function balanceOf(address who) public view returns (uint256);
    function transfer(address to, uint256 value) public returns (bool);
    function allowance(address owner, address spender) public view returns (uint256);
    function transferFrom(address from, address to, uint256 value) public returns (bool);
    function approve(address spender, uint256 value) public returns (bool);
    event Approval(address indexed owner, address indexed spender, uint256 value);
    event Transfer(address indexed from, address indexed to, uint256 value);
}


/**
 * @title Crowdsale for m+plus coin phase 1
 */
contract MplusCrowdsaleA {
    using SafeMath for uint256;

    // Number of stages
    uint256 internal constant NUM_STAGES = 4;

    // 02/20/2018 - 03/16/2018
    uint256 internal constant ICO_START1 = 1519056000;
    // 03/17/2018 - 04/01/2018
    uint256 internal constant ICO_START2 = 1521216000;
    // 04/02/2018 - 04/16/2018
    uint256 internal constant ICO_START3 = 1522598400;
    // 04/17/2018 - 05/01/2018
    uint256 internal constant ICO_START4 = 1523894400;
    // 05/01/2018
    uint256 internal constant ICO_END = 1525190399;

    // Exchange rate for each term periods
    uint256 internal constant ICO_RATE1 = 20000;
    uint256 internal constant ICO_RATE2 = 18000;
    uint256 internal constant ICO_RATE3 = 17000;
    uint256 internal constant ICO_RATE4 = 16000;

    // Funding goal and soft cap in Token
    //uint256 internal constant HARD_CAP = 2000000000 * (10 ** 18);
    // Cap for each term periods in ETH
    // Exchange rate for each term periods
    uint256 internal constant ICO_CAP1 = 14000 * (10 ** 18);
    uint256 internal constant ICO_CAP2 = 21000 * (10 ** 18);
    uint256 internal constant ICO_CAP3 = 28000 * (10 ** 18);
    uint256 internal constant ICO_CAP4 = 35000 * (10 ** 18);

    // Caps per a purchase
    uint256 internal constant MIN_CAP = (10 ** 17);
    uint256 internal constant MAX_CAP = 1000 * (10 ** 18);

    // Owner of this contract
    address internal owner;

    // The token being sold
    ERC20 public tokenReward;

    // Tokens will be transfered from this address
    address internal tokenOwner;

    // Address where funds are collected
    address internal wallet;

    // Stage of ICO
    uint256 public stage = 0;

    // Amount of tokens sold
    uint256 public tokensSold = 0;

    // Amount of raised money in wei
    uint256 public weiRaised = 0;

    // Event for token purchase logging
    event TokenPurchase(address indexed purchaser, address indexed beneficiary, uint256 value, uint256 amount);

    event IcoStageStarted(uint256 stage);
    event IcoEnded();

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(msg.sender == owner);
        _;
    }

    function MplusCrowdsaleA(address _tokenAddress, address _wallet) public {
        require(_tokenAddress != address(0));
        require(_wallet != address(0));

        owner = msg.sender;
        tokenOwner = msg.sender;
        wallet = _wallet;

        tokenReward = ERC20(_tokenAddress);
    }

    // Fallback function can be used to buy tokens
    function () external payable {
        buyTokens(msg.sender);
    }

    // Low level token purchase function
    function buyTokens(address _beneficiary) public payable {
        require(_beneficiary != address(0));
        require(msg.value >= MIN_CAP);
        require(msg.value <= MAX_CAP);
        require(now >= ICO_START1);
        require(now <= ICO_END);
        require(stage <= NUM_STAGES);

        determineCurrentStage();

        uint256 weiAmount = msg.value;

        // calculate token amount to be created
        uint256 tokens = getTokenAmount(weiAmount);
        require(tokens > 0);

        // Update totals
        weiRaised = weiRaised.add(weiAmount);
        tokensSold = tokensSold.add(tokens);
        checkCap();

        TokenPurchase(msg.sender, _beneficiary, weiAmount, tokens);
        require(tokenReward.transferFrom(tokenOwner, _beneficiary, tokens));
        forwardFunds();
    }

    // Send ether to the fund collection wallet
    function forwardFunds() internal {
        wallet.transfer(msg.value);
    }

    // Determine the current stage by term period
    function determineCurrentStage() internal {
        if (stage < 4 && now >= ICO_START4) {
            stage = 4;
            IcoStageStarted(4);
        } else if (stage < 3 && now >= ICO_START3) {
            stage = 3;
            IcoStageStarted(3);
        } else if (stage < 2 && now >= ICO_START2) {
            stage = 2;
            IcoStageStarted(2);
        } else if (stage < 1 && now >= ICO_START1) {
            stage = 1;
            IcoStageStarted(1);
        }
    }

    // Check cap and change the stage
    function checkCap() internal {
        if (weiRaised >= ICO_CAP4) {
            stage = 5;
            IcoEnded();
        } else if (stage < 4 && weiRaised >= ICO_CAP3) {
            stage = 4;
            IcoStageStarted(4);
        } else if (stage < 3 && weiRaised >= ICO_CAP2) {
            stage = 3;
            IcoStageStarted(3);
        } else if (stage < 2 && weiRaised >= ICO_CAP1) {
            stage = 2;
            IcoStageStarted(2);
        }
    }

    // Get ammount of tokens
    function getTokenAmount(uint256 _weiAmount) internal view returns (uint256) {
        uint256 rate = 0;

        if (stage == 1) {
            rate = ICO_RATE1;
        } else if (stage == 2) {
            rate = ICO_RATE2;
        } else if (stage == 3) {
            rate = ICO_RATE3;
        } else if (stage == 4) {
            rate = ICO_RATE4;
        }

        return rate.mul(_weiAmount);
    }
}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[],"name":"weiRaised","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"tokensSold","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"tokenReward","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"stage","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_beneficiary","type":"address"}],"name":"buyTokens","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"inputs":[{"name":"_tokenAddress","type":"address"},{"name":"_wallet","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"purchaser","type":"address"},{"indexed":true,"name":"beneficiary","type":"address"},{"indexed":false,"name":"value","type":"uint256"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"TokenPurchase","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"stage","type":"uint256"}],"name":"IcoStageStarted","type":"event"},{"anonymous":false,"inputs":[],"name":"IcoEnded","type":"event"}]

6060604052600060045560006005556000600655341561001e57600080fd5b6040516040806107398339810160405280805191906020018051915050600160a060020a038216151561005057600080fd5b600160a060020a038116151561006557600080fd5b60008054600160a060020a03338116600160a060020a031992831681179093556002805483169093179092556003805493831693821693909317909255600180549390911692909116919091179055610676806100c36000396000f30060606040526004361061006c5763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416634042b66f8114610077578063518ab2a81461009c5780636e66f6e9146100af578063c040e6b8146100de578063ec8ac4d8146100f1575b61007533610101565b005b341561008257600080fd5b61008a6102d9565b60405190815260200160405180910390f35b34156100a757600080fd5b61008a6102df565b34156100ba57600080fd5b6100c26102e5565b604051600160a060020a03909116815260200160405180910390f35b34156100e957600080fd5b61008a6102f4565b610075600160a060020a03600435165b600080600160a060020a038316151561011957600080fd5b67016345785d8a000034101561012e57600080fd5b683635c9adc5dea0000034111561014457600080fd5b635a8af48042101561015557600080fd5b635ae88eff42111561016657600080fd5b60048054111561017557600080fd5b61017d6102fa565b34915061018982610415565b90506000811161019857600080fd5b6006546101ab908363ffffffff61047d16565b6006556005546101c1908263ffffffff61047d16565b6005556101cc610497565b82600160a060020a031633600160a060020a03167f623b3804fa71d67900d064613da8f94b9617215ee90799290593e1745087ad18848460405191825260208201526040908101905180910390a3600154600254600160a060020a03918216916323b872dd911685846000604051602001526040517c010000000000000000000000000000000000000000000000000000000063ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b15156102a657600080fd5b6102c65a03f115156102b757600080fd5b5050506040518051905015156102cc57600080fd5b6102d46105cb565b505050565b60065481565b60055481565b600154600160a060020a031681565b60045481565b6004805410801561030f5750635ad4c8804210155b1561033f57600480805560008051602061062b8339815191529060405190815260200160405180910390a1610413565b60036004541080156103555750635ac102004210155b15610387576003600481905560008051602061062b8339815191529060405190815260200160405180910390a1610413565b600260045410801561039d5750635aabea004210155b156103cf576002600481905560008051602061062b8339815191529060405190815260200160405180910390a1610413565b60016004541080156103e55750635a8af4804210155b15610413576001600481905560008051602061062b8339815191529060405190815260200160405180910390a15b565b60045460009081906001141561042e5750614e20610466565b600454600214156104425750614650610466565b600454600314156104565750614268610466565b600454600414156104665750613e805b610476818463ffffffff6105ff16565b9392505050565b60008282018381101561048c57fe5b8091505b5092915050565b6006546907695a92c20d6fe0000090106104e15760056004557f236b5488d7d568eed00b6315077bce0d53f4bb657dc95e05c71325a26ce1cc7760405160405180910390a1610413565b600480541080156104fe57506905ede20f01a45980000060065410155b1561052e57600480805560008051602061062b8339815191529060405190815260200160405180910390a1610413565b600360045410801561054c5750690472698b413b4320000060065410155b1561057e576003600481905560008051602061062b8339815191529060405190815260200160405180910390a1610413565b600260045410801561059c57506902f6f10780d22cc0000060065410155b15610413576002600481905560008051602061062b8339815191529060405190815260200160405180910390a1565b600354600160a060020a03163480156108fc0290604051600060405180830381858888f19350505050151561041357600080fd5b6000808315156106125760009150610490565b5082820282848281151561062257fe5b041461048c57fe0009d46057e87e33dc8d8bde243f9dea18b7589e0828b2194afc1bc49893eafd39a165627a7a72305820d65723efab7f9fb95c35ee049f4c9e135e5427c3722fb683d85ac668f062f5cc0029000000000000000000000000218f1de2ea9ae3e9fdea347b6e707ebfda2d6233000000000000000000000000c2b0177ece66854b7c92300bb5d0cec49401a5b3

Deployed Bytecode

0x60606040526004361061006c5763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416634042b66f8114610077578063518ab2a81461009c5780636e66f6e9146100af578063c040e6b8146100de578063ec8ac4d8146100f1575b61007533610101565b005b341561008257600080fd5b61008a6102d9565b60405190815260200160405180910390f35b34156100a757600080fd5b61008a6102df565b34156100ba57600080fd5b6100c26102e5565b604051600160a060020a03909116815260200160405180910390f35b34156100e957600080fd5b61008a6102f4565b610075600160a060020a03600435165b600080600160a060020a038316151561011957600080fd5b67016345785d8a000034101561012e57600080fd5b683635c9adc5dea0000034111561014457600080fd5b635a8af48042101561015557600080fd5b635ae88eff42111561016657600080fd5b60048054111561017557600080fd5b61017d6102fa565b34915061018982610415565b90506000811161019857600080fd5b6006546101ab908363ffffffff61047d16565b6006556005546101c1908263ffffffff61047d16565b6005556101cc610497565b82600160a060020a031633600160a060020a03167f623b3804fa71d67900d064613da8f94b9617215ee90799290593e1745087ad18848460405191825260208201526040908101905180910390a3600154600254600160a060020a03918216916323b872dd911685846000604051602001526040517c010000000000000000000000000000000000000000000000000000000063ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b15156102a657600080fd5b6102c65a03f115156102b757600080fd5b5050506040518051905015156102cc57600080fd5b6102d46105cb565b505050565b60065481565b60055481565b600154600160a060020a031681565b60045481565b6004805410801561030f5750635ad4c8804210155b1561033f57600480805560008051602061062b8339815191529060405190815260200160405180910390a1610413565b60036004541080156103555750635ac102004210155b15610387576003600481905560008051602061062b8339815191529060405190815260200160405180910390a1610413565b600260045410801561039d5750635aabea004210155b156103cf576002600481905560008051602061062b8339815191529060405190815260200160405180910390a1610413565b60016004541080156103e55750635a8af4804210155b15610413576001600481905560008051602061062b8339815191529060405190815260200160405180910390a15b565b60045460009081906001141561042e5750614e20610466565b600454600214156104425750614650610466565b600454600314156104565750614268610466565b600454600414156104665750613e805b610476818463ffffffff6105ff16565b9392505050565b60008282018381101561048c57fe5b8091505b5092915050565b6006546907695a92c20d6fe0000090106104e15760056004557f236b5488d7d568eed00b6315077bce0d53f4bb657dc95e05c71325a26ce1cc7760405160405180910390a1610413565b600480541080156104fe57506905ede20f01a45980000060065410155b1561052e57600480805560008051602061062b8339815191529060405190815260200160405180910390a1610413565b600360045410801561054c5750690472698b413b4320000060065410155b1561057e576003600481905560008051602061062b8339815191529060405190815260200160405180910390a1610413565b600260045410801561059c57506902f6f10780d22cc0000060065410155b15610413576002600481905560008051602061062b8339815191529060405190815260200160405180910390a1565b600354600160a060020a03163480156108fc0290604051600060405180830381858888f19350505050151561041357600080fd5b6000808315156106125760009150610490565b5082820282848281151561062257fe5b041461048c57fe0009d46057e87e33dc8d8bde243f9dea18b7589e0828b2194afc1bc49893eafd39a165627a7a72305820d65723efab7f9fb95c35ee049f4c9e135e5427c3722fb683d85ac668f062f5cc0029

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000218f1de2ea9ae3e9fdea347b6e707ebfda2d6233000000000000000000000000c2b0177ece66854b7c92300bb5d0cec49401a5b3

-----Decoded View---------------
Arg [0] : _tokenAddress (address): 0x218f1De2Ea9AE3e9FDEa347b6E707EbfdA2D6233
Arg [1] : _wallet (address): 0xc2B0177eCe66854B7c92300BB5D0CeC49401a5B3

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000218f1de2ea9ae3e9fdea347b6e707ebfda2d6233
Arg [1] : 000000000000000000000000c2b0177ece66854b7c92300bb5d0cec49401a5b3


Swarm Source

bzzr://d65723efab7f9fb95c35ee049f4c9e135e5427c3722fb683d85ac668f062f5cc

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.