function finalize () public {
    require(
      msg.sender == owner &&
      rcv        != address(0) &&
      now        >  1538323201 &&
      finalized  == false
    );

    finalized = true;

    uint256 fstkReceivedEtherWei = address(this).balance;
    uint256 rcvReceivedFSTWei = 0;

    
    if (fstkReceivedEtherWei < 300 ether) {
      rcv.transfer(fstkReceivedEtherWei);
      emit Finalize(0, 0);
      return;
    }

    for (uint8 i = 0; i < bonusArray.length; i++) {
      Bonus storage b = bonusArray[i];

      if (fstkReceivedEtherWei >= b.gte && fstkReceivedEtherWei < b.lt) {
        rcvReceivedFSTWei = fstkReceivedEtherWei * b.bonusPercentage * fstPerWei / 100;
      }
    }

    require(FST.transferFrom(fstCentral, rcv, rcvReceivedFSTWei));
    fstCentral.transfer(fstkReceivedEtherWei);

    emit Finalize(fstkReceivedEtherWei, rcvReceivedFSTWei);
  }