```json
{
  "sym_variables": [
    ("x0", "hours worked by Ringo"),
    ("x1", "hours worked by Paul"),
    ("x2", "hours worked by Peggy"),
    ("x3", "hours worked by George"),
    ("x4", "hours worked by Laura"),
    ("x5", "hours worked by Bobby"),
    ("x6", "hours worked by Mary")
  ],
  "objective_function": "4*x0 + 9*x1 + 8*x2 + 6*x3 + x4 + 6*x5 + 2*x6",
  "constraints": [
    "19*x0 + 6*x5 >= 37",
    "11*x4 + 6*x5 >= 25",
    "31*x1 + 11*x4 >= 22",
    "19*x0 + 30*x3 + 15*x6 >= 29",
    "19*x0 + 11*x4 + 15*x6 >= 29",
    "30*x2 + 30*x3 + 11*x4 >= 29",
    "19*x0 + 30*x2 + 11*x4 >= 29",
    "19*x0 + 30*x2 + 30*x3 >= 29",
    "19*x0 + 6*x5 + 15*x6 >= 29",
    "30*x2 + 30*x3 + 15*x6 >= 29",
    "19*x0 + 31*x1 + 11*x4 >= 29",
    "31*x1 + 30*x3 + 15*x6 >= 29",
    "31*x1 + 11*x4 + 6*x5 >= 29",
    "19*x0 + 31*x1 + 6*x5 >= 29",
    "19*x0 + 31*x1 + 30*x2 >= 29",
    "19*x0 + 30*x2 + 15*x6 >= 29",
    "30*x2 + 6*x5 + 15*x6 >= 29",
    "31*x1 + 30*x2 + 30*x3 >= 29",
    "30*x3 + 11*x4 + 6*x5 >= 29",
    "30*x2 + 11*x4 + 6*x5 >= 29",
    "31*x1 + 30*x3 + 6*x5 >= 29",
    "19*x0 + 11*x4 + 6*x5 >= 29",
    "11*x4 + 6*x5 + 15*x6 >= 29",
    "19*x0 + 31*x1 + 30*x3 >= 29",
    "19*x0 + 31*x1 + 15*x6 >= 29",
    "31*x1 + 30*x2 + 15*x6 >= 29",
    "31*x1 + 30*x3 + 11*x4 >= 29",
    "30*x2 + 11*x4 + 15*x6 >= 29",
    "30*x3 + 11*x4 + 15*x6 >= 29",
    "31*x1 + 6*x5 + 15*x6 >= 29",

    "5*x1 + 24*x3 >= 34",
    "12*x2 + 1*x0 >= 25",
    "5*x1 + 24*x3 + 32*x4 >= 49",
    "-8*x0 + 8*x1 >= 0",
    "30*x2 + 15*x6 <= 96",
    "19*x0 + 30*x3 <= 311",
    "31*x1 + 11*x4 <= 73",
    "30*x3 + 11*x4 + 15*x6 <= 47",
    "19*x0 + 30*x2 + 6*x5 <= 248",
    "19*x0 + 30*x3 + 11*x4 <= 143",
    "19*x0 + 31*x1 + 15*x6 <= 137",
    "19*x0 + 31*x1 + 30*x2 + 30*x3 + 11*x4 + 6*x5 + 15*x6 <= 137",
    "7*x0 + 34*x1 + 28*x2 + 2*x3 + 19*x4 + x5 + 18*x6 <= 589",
    "28*x2 + 18*x6 <= 475",
    "7*x0 + 28*x2 <= 247",
    "7*x0 + 34*x1 <= 137",
    "19*x4 + 18*x6 <= 148",
    "34*x1 + 18*x6 <= 222",
    "34*x1 + x5 <= 525",
    "2*x3 + 18*x6 <= 402",
    "7*x0 + 2*x3 <= 555",
    "19*x4 + x5 <= 324",
    "7*x0 + 18*x6 <= 476",
    "x5 + 18*x6 <= 477",
    "7*x0 + x5 + 18*x6 <= 410",
    "7*x0 + 28*x2 + x5 <= 327",
    "7*x0 + 34*x1 + 19*x4 <= 94",
    "2*x3 + 19*x4 + x5 <= 214",
    "28*x2 + 2*x3 + 18*x6 <= 246",
    "28*x2 + 19*x4 + 18*x6 <= 550",
    "34*x1 + 28*x2 + 19*x4 <= 535",
    "7*x0 + 34*x1 + 28*x2 <= 342",
    "7*x0 + 28*x2 + 19*x4 <= 410",
    "7*x0 + 34*x1 + 2*x3 <= 381",
    "34*x1 + 19*x4 + x5 <= 157",
    "2*x3 + 19*x4 + 18*x6 <= 339",
    "19*x4 + x5 + 18*x6 <= 152",
    "7*x0 + 2*x3 + 18*x6 <= 162",
    "7*x0 + 19*x4 + x5 <= 353",
    "34*x1 + 28*x2 + 18*x6 <= 339",
    "34*x1 + 28*x2 + 2*x3 <= 535",
    "7*x0 + 28*x2 + 18*x6 <= 188",
    "7*x0 + 34*x1 + 18*x6 <= 389",
    "28*x2 + 19*x4 + x5 <= 462",
    "7*x0 + 19*x4 + 18*x6 <= 149",
    "7*x0 + 34*x1 + 28*x2 + 2*x3 + 19*x4 + x5 + 18*x6 <= 149",
    "21*x5 + 34*x6 <= 295",
    "5*x1 + 24*x3 <= 271",
    "5*x1 + 21*x5 <= 284",
    "1*x0 + 34*x6 <= 229",
    "1*x0 + 5*x1 <= 127",
    "1*x0 + 32*x4 <= 226",
    "24*x3 + 32*x4 <= 201",
    "24*x3 + 21*x5 <= 139",
    "12*x2 + 24*x3 <= 143",
    "12*x2 + 32*x4 <= 287",
    "12*x2 + 21*x5 <= 354",
    "12*x2 + 34*x6 <= 152",
    "1*x0 + 24*x3 <= 173",
    "5*x1 + 34*x6 <= 362",
    "12*x2 + 24*x3 + 34*x6 <= 292",
    "1*x0 + 5*x1 + 32*x4 <= 234",
    "24*x3 + 21*x5 + 34*x6 <= 307",
    "12*x2 + 21*x5 + 34*x6 <= 54",
    "1*x0 + 5*x1 + 24*x3 <= 63",
    "12*x2 + 32*x4 + 34*x6 <= 330",
    "5*x1 + 12*x2 + 21*x5 <= 277",
    "12*x2 + 32*x4 + 21*x5 <= 304",
    "5*x1 + 24*x3 + 32*x4 <= 72",
    "1*x0 + 12*x2 + 21*x5 <= 289",
    "5*x1 + 24*x3 + 21*x5 <= 187",
    "1*x0 + 24*x3 + 32*x4 <= 302",
    "5*x1 + 24*x3 + 34*x6 <= 160",
    "5*x1 + 12*x2 + 34*x6 <= 94",
    "1*x0 + 5*x1 + 34*x6 <= 289",
    "5*x1 + 12*x2 + 32*x4 <= 266",
    "12*x2 + 24*x3 + 32*x4 <= 60",
    "1*x0 + 5*x1 + 12*x2 + 24*x3 + 32*x4 + 21*x5 + 34*x6 <= 60"
  ]
}
```

```python
import gurobipy as gp

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

# Create variables
ringo = model.addVar(vtype=gp.GRB.INTEGER, name="ringo")
paul = model.addVar(vtype=gp.GRB.INTEGER, name="paul")
peggy = model.addVar(vtype=gp.GRB.INTEGER, name="peggy")
george = model.addVar(vtype=gp.GRB.INTEGER, name="george")
laura = model.addVar(vtype=gp.GRB.INTEGER, name="laura")
bobby = model.addVar(vtype=gp.GRB.INTEGER, name="bobby")
mary = model.addVar(vtype=gp.GRB.INTEGER, name="mary")


# Set objective function
model.setObjective(4 * ringo + 9 * paul + 8 * peggy + 6 * george + laura + 6 * bobby + 2 * mary, gp.GRB.MAXIMIZE)

# Resource and attribute data
resources = {
    'r0': {'description': 'paperwork competence rating', 'upper_bound': 319, 'x0': 19, 'x1': 31, 'x2': 30, 'x3': 30, 'x4': 11, 'x5': 6, 'x6': 15},
    'r1': {'description': 'likelihood to quit index', 'upper_bound': 589, 'x0': 7, 'x1': 34, 'x2': 28, 'x3': 2, 'x4': 19, 'x5': 1, 'x6': 18},
    'r2': {'description': 'computer competence rating', 'upper_bound': 368, 'x0': 1, 'x1': 5, 'x2': 12, 'x3': 24, 'x4': 32, 'x5': 21, 'x6': 34}
}

# Add constraints based on the JSON representation
with open('constraints.json', 'r') as f:
    import json
    data = json.load(f)

for constraint_str in data['constraints']:
    model.addConstr(eval(constraint_str))


# Add resource constraints (if applicable - these were not explicitly stated in the problem description but are included here for completeness)
# for resource, data in resources.items():
#     model.addConstr(sum(data[f'x{i}'] * vars()[names[i]] for i in range(len(names))) <= data['upper_bound'], resource)


# Optimize model
model.optimize()

# Print results
if model.status == gp.GRB.OPTIMAL:
    print('Obj: %g' % model.objVal)
    for v in model.getVars():
        print('%s %g' % (v.varName, v.x))
elif model.status == gp.GRB.INFEASIBLE:
    print("The model is infeasible.")
else:
    print(f"Optimization terminated with status {model.status}")

```