function transfer(address _to, uint256 _tokenId) public;

  event Transfer(address indexed from, address indexed to, uint256 tokenId);
  event Approval(address indexed owner, address indexed approved, uint256 tokenId);

}

contract CryptoAllStars is ERC721 {

  

  
  event Birth(uint256 tokenId, string name, address owner);

  
  event TokenSold(uint256 tokenId, uint256 oldPrice, uint256 newPrice, address prevOwner, address winner, string name);

  
  
  event Transfer(address from, address to, uint256 tokenId);

  

  
  string public constant NAME = "CryptoAllStars"; 
  string public constant SYMBOL = "AllStarToken"; 

  uint256 private startingPrice = 0.001 ether;
  uint256 private constant PROMO_CREATION_LIMIT = 10000;
  uint256 private firstStepLimit =  0.053613 ether;
  uint public currentGen = 0;

  

  
  
  mapping (uint256 => address) public allStarIndexToOwner;

  
  
  mapping (address => uint256) private ownershipTokenCount;

  
  
  
  mapping (uint256 => address) public allStarIndexToApproved;

  
  mapping (uint256 => uint256) private allStarIndexToPrice;

  
  address public ceo = 0x047F606fD5b2BaA5f5C6c4aB8958E45CB6B054B7;
  address public cfo = 0xed8eFE0C11E7f13Be0B9d2CD5A675095739664d6;

  uint256 public promoCreatedCount;

  
  struct AllStar {
    string name;
    uint gen;
  }