code: func packElement(t Type, reflectValue reflect.Value) []byte {
  	switch t.T {
  	case IntTy, UintTy:
  		return packNum(reflectValue)
  	case StringTy:
  		return packBytesSlice([]byte(reflectValue.String()), reflectValue.Len())
  	case AddressTy:
  		if reflectValue.Kind() == reflect.Array {
  			reflectValue = mustArrayToByteSlice(reflectValue)
  		}
  
  		return common.LeftPadBytes(reflectValue.Bytes(), 32)
  	case BoolTy:
  		if reflectValue.Bool() {
  			return math.PaddedBigBytes(common.Big1, 32)
  		}
  		return math.PaddedBigBytes(common.Big0, 32)
  	case BytesTy:
  		if reflectValue.Kind() == reflect.Array {
  			reflectValue = mustArrayToByteSlice(reflectValue)
  		}
  		return packBytesSlice(reflectValue.Bytes(), reflectValue.Len())
  	case FixedBytesTy, FunctionTy:
  		if reflectValue.Kind() == reflect.Array {
  			reflectValue = mustArrayToByteSlice(reflectValue)
  		}
  		return common.RightPadBytes(reflectValue.Bytes(), 32)
  	default:
  		panic("abi: fatal error")
  	}
  }
docs: // packElement packs the given reflect value according to the abi specification in
  // t.