pragma solidity ^0.5.0; contract Debuggable { constructor () internal { } function toString(uint _base) internal pure returns (string memory) { bytes memory _tmp = new bytes(32); uint i; for(i = 0;_base > 0;i++) { _tmp[i] = byte(uint8((_base % 10) + 48)); _base /= 10; } bytes memory _real = new bytes(i--); for(uint j = 0; j < _real.length; j++) { _real[j] = _tmp[i--]; } return string(_real); } function concat(string memory _base, string memory _value) internal pure returns (string memory) { bytes memory _baseBytes = bytes(_base); bytes memory _valueBytes = bytes(_value); assert(_valueBytes.length > 0); string memory _tmpValue = new string(_baseBytes.length + _valueBytes.length); bytes memory _newValue = bytes(_tmpValue); uint i; uint j; for (i = 0; i < _baseBytes.length; i++) { _newValue[j++] = _baseBytes[i]; } for (i = 0; i < _valueBytes.length; i++) { _newValue[j++] = _valueBytes[i]; } return string(_newValue); } }