function buyCoinsAtExchg( address seller, uint sellersCoinAmountOffer, uint sellersPriceOfOneCoinInWEI) payable public returns(bool success) {
       
        uint amountTkns = sellersCoinAmountOffer;
        uint priceOfr = sellersPriceOfOneCoinInWEI;	       
        require( msg.value > 0 && msg.value <= safeMul(amountTkns, priceOfr ) );

      msgSndr[msg.sender] = amountTkns;

        
  
        uint tknsBuyAppr = safeDiv(msg.value , priceOfr);

        
  
        Exchg em = Exchg(_getExchgAddr()); 
        
        bool sucsBkgChk = em.buy_Exchg_BkgChk(seller, amountTkns, priceOfr, msg.sender, msg.value); 
        require(sucsBkgChk == true);

       

      msgSndr[msg.sender] = tknsBuyAppr;  
 
        bool emUpdateSuccess;
        (emUpdateSuccess) = em.updateSeller(seller, tknsBuyAppr, msg.sender, msg.value); 
        require( emUpdateSuccess == true );
        
       

        bool sucsTrTkn = _safeTransferTkn( seller, msg.sender, tknsBuyAppr);
        require(sucsTrTkn == true);

        
        bool sucsTrPaymnt;
        sucsTrPaymnt = _safeTransferPaymnt( seller,  safeSub( msg.value , safeDiv(msg.value*em.getExchgComisnMulByThousand(),1000) ) );
        require(sucsTrPaymnt == true );
       
        BuyAtMacroansyExchg(msg.sender, seller, tknsBuyAppr, msg.value); 

      msgSndr[msg.sender] = 0; 
        
        return true;
    }