```json
{
  "sym_variables": [
    ("x0", "hole punches"),
    ("x1", "usb flash drives"),
    ("x2", "color printers"),
    ("x3", "cans of coffee"),
    ("x4", "office chairs"),
    ("x5", "smoke detectors")
  ],
  "objective_function": "8.08 * x0 + 9.17 * x1 + 4.76 * x2 + 3.89 * x3 + 6.11 * x4 + 7.68 * x5",
  "constraints": [
    "7 * x0 + 6 * x1 + 10 * x2 + 10 * x3 + 9 * x4 + 5 * x5 <= 174",
    "8 * x0 + 9 * x1 + 1 * x2 + 9 * x3 + 5 * x4 + 10 * x5 <= 403",
    "10 * x3 + 5 * x5 >= 12",
    "7 * x0 + 10 * x2 >= 25",
    "10 * x3 + 9 * x4 >= 13",
    "7 * x0 + 10 * x2 + 10 * x3 >= 29",
    "6 * x1 + 10 * x2 + 9 * x4 >= 29",
    "7 * x0 + 6 * x1 + 9 * x4 >= 29",
    "7 * x0 + 6 * x1 + 10 * x3 >= 29",
    "7 * x0 + 10 * x2 + 9 * x4 >= 29",
    "6 * x1 + 10 * x3 + 5 * x5 >= 29",
    "6 * x1 + 10 * x2 + 5 * x5 >= 29",
    "10 * x2 + 10 * x3 + 9 * x4 >= 29",
    "7 * x0 + 10 * x2 + 5 * x5 >= 29",
    "10 * x2 + 10 * x3 + 5 * x5 >= 29",
    "10 * x2 + 9 * x4 + 5 * x5 >= 29",
    "7 * x0 + 6 * x1 + 5 * x5 >= 29",
    "7 * x0 + 10 * x3 + 5 * x5 >= 29",
    "6 * x1 + 10 * x3 + 9 * x4 >= 29",
    "8 * x0 + 10 * x5 >= 60",
    "9 * x3 + 5 * x4 >= 56",
    "8 * x0 + 9 * x1 >= 35",
    "8 * x0 + 1 * x2 >= 59",
    "9 * x3 + 10 * x5 >= 39",
    "9 * x1 + 9 * x3 >= 24",
    "8 * x0 + 5 * x4 >= 25",
    "1 * x2 + 10 * x5 >= 57",
    "8 * x0 + 9 * x3 >= 60",
    "9 * x1 + 10 * x5 >= 48",
    "7 * x0 + 10 * x3 <= 150",
    "6 * x1 + 10 * x2 <= 138",
    "10 * x2 + 5 * x5 <= 73",
    "7 * x0 + 6 * x1 <= 76",
    "6 * x1 + 10 * x3 + 9 * x4 <= 58",
    "10 * x2 + 10 * x3 + 9 * x4 <= 160",
    "6 * x1 + 10 * x2 + 10 * x3 <= 101",
    "10 * x3 + 9 * x4 + 5 * x5 <= 168",
    "6 * x1 + 10 * x2 + 5 * x5 <= 40",
    "6 * x1 + 10 * x3 + 5 * x5 <= 50",
    "7 * x0 + 6 * x1 + 5 * x5 <= 144",
    "7 * x0 + 6 * x1 + 10 * x2 + 10 * x3 + 9 * x4 + 5 * x5 <= 144",
    "8 * x0 + 9 * x3 <= 151",
    "8 * x0 + 10 * x5 <= 321",
    "9 * x3 + 5 * x4 <= 347",
    "9 * x1 + 1 * x2 <= 138",
    "1 * x2 + 10 * x5 <= 338",
    "9 * x3 + 10 * x5 <= 214",
    "8 * x0 + 9 * x1 <= 363",
    "9 * x1 + 10 * x5 <= 267",
    "8 * x0 + 1 * x2 <= 135",
    "5 * x4 + 10 * x5 <= 386",
    "9 * x1 + 5 * x4 <= 194",
    "8 * x0 + 5 * x4 <= 166",
    "8 * x0 + 9 * x1 + 1 * x2 <= 305",
    "8 * x0 + 9 * x1 + 10 * x5 <= 328",
    "9 * x1 + 9 * x3 + 5 * x4 <= 182",
    "8 * x0 + 1 * x2 + 10 * x5 <= 92",
    "8 * x0 + 9 * x1 + 1 * x2 + 9 * x3 + 5 * x4 + 10 * x5 <= 92"
  ]
}
```

```python
import gurobipy as gp

# Create a new model
m = gp.Model("optimization_problem")

# Create variables
x = m.addVars(6, vtype=gp.GRB.INTEGER, name=["hole_punches", "usb_flash_drives", "color_printers", "cans_of_coffee", "office_chairs", "smoke_detectors"])


# Set objective function
m.setObjective(8.08 * x[0] + 9.17 * x[1] + 4.76 * x[2] + 3.89 * x[3] + 6.11 * x[4] + 7.68 * x[5], gp.GRB.MAXIMIZE)

# Add constraints
m.addConstr(7 * x[0] + 6 * x[1] + 10 * x[2] + 10 * x[3] + 9 * x[4] + 5 * x[5] <= 174, "r0")
m.addConstr(8 * x[0] + 9 * x[1] + 1 * x[2] + 9 * x[3] + 5 * x[4] + 10 * x[5] <= 403, "r1")

# ... (rest of the constraints from the JSON "constraints" field)

# Optimize model
m.optimize()

# Print results
if m.status == gp.GRB.OPTIMAL:
    print("Optimal solution found:")
    for i in range(6):
        print(f"{x[i].varName}: {x[i].x}")
    print(f"Objective value: {m.objVal}")
elif m.status == gp.GRB.INFEASIBLE:
    print("Model is infeasible.")
else:
    print(f"Optimization terminated with status {m.status}")

```