whole_func_string: function decodeParams(names, types, data, useNumberedParams = true) {
    // Names is optional, so shift over all the parameters if not provided
    if (arguments.length < 3) {
      data = types;
      types = names;
      names = [];
    }
  
    data = utils.hexOrBuffer(data);
    var values = new Result();
  
    var offset = 0;
    types.forEach(function(type, index) {
      var coder = getParamCoder(type);
  
      if (coder.dynamic) {
        var dynamicOffset = uint256Coder.decode(data, offset);
        var result = coder.decode(data, dynamicOffset.value.toNumber());
        offset += dynamicOffset.consumed;
      } else {
        var result = coder.decode(data, offset);
        offset += result.consumed;
      }
  
      if (useNumberedParams) {
        values[index] = result.value;
      }
  
      if (names[index]) {
        values[names[index]] = result.value;
      }
    });
    return values;
  }
func_code_string: function decodeParams(names, types, data, useNumberedParams = true) {
    // Names is optional, so shift over all the parameters if not provided
    if (arguments.length < 3) {
      data = types;
      types = names;
      names = [];
    }
  
    data = utils.hexOrBuffer(data);
    var values = new Result();
  
    var offset = 0;
    types.forEach(function(type, index) {
      var coder = getParamCoder(type);
  
      if (coder.dynamic) {
        var dynamicOffset = uint256Coder.decode(data, offset);
        var result = coder.decode(data, dynamicOffset.value.toNumber());
        offset += dynamicOffset.consumed;
      } else {
        var result = coder.decode(data, offset);
        offset += result.consumed;
      }
  
      if (useNumberedParams) {
        values[index] = result.value;
      }
  
      if (names[index]) {
        values[names[index]] = result.value;
      }
    });
    return values;
  }
func_documentation_string: decode bytecode data from output names and types