FAILURE MAP
← Case archive

FA-59231 / Payroll withholding rules / Open access

Pay dates in a calendar year: year end date · case 01

In leap years a December 31 pay date is left out of the count.

Verified by executionVariant 1 · 9 checks per implementationDownload source bundle ↓JSON ↗

ROOT CAUSE

The year end is computed as 364 days after January 1, which is December 30 in leap years.

VERIFIED REPAIR

Restore the contract rule at the year end date step: use `hi = datetime.date(x['year'], 12, 31)`.

Unsuccessful approach: The attempt hard-codes December 30, dropping December 31 pay dates in every year.

Case contract

Input {anchor [y,m,d] (any pay date), step 7|14 days, year}. Pay dates are anchor + k*step for all integers k. Return [count of pay dates within Jan 1..Dec 31 of year inclusive, ISO date of the first one, whether the count exceeds the nominal periods (26 biweekly, 52 weekly)].

Why this case matters

Annualization factors change in 27-pay-period years; missing or extra pay dates distort per-period withholding.

1 / The failure

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json
import datetime
N = 1
observations = []
def solve(x):
    anchor = datetime.date(*x['anchor'])
    lo = datetime.date(x['year'], 1, 1)
    hi = lo + datetime.timedelta(days=364)
    off = (lo - anchor).days
    k = -(-off // x['step'])
    first = anchor + datetime.timedelta(days=k * x['step'])
    count = (hi - first).days // x['step'] + 1
    periods = 26 if x['step'] == 14 else 52
    return [count, first.isoformat(), count > periods]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression (boundary)', {'anchor': [2020, 12, 31], 'step': 14, 'year': 2020}, [27, '2020-01-02', True]), ('regression', {'anchor': [2022, 8, 16], 'step': 7, 'year': 2024}, [53, '2024-01-02', True]), ('partial-repair probe (boundary)', {'anchor': [2026, 1, 1], 'step': 14, 'year': 2026}, [27, '2026-01-01', True]), ('partial-repair probe', {'anchor': [2021, 6, 20], 'step': 14, 'year': 2023}, [27, '2023-01-01', True]), ('boundary control', {'anchor': [2024, 1, 5], 'step': 14, 'year': 2024}, [26, '2024-01-05', False]), ('normal control', {'anchor': [2023, 8, 10], 'step': 14, 'year': 2024}, [26, '2024-01-11', False]), ('normal control', {'anchor': [2024, 3, 10], 'step': 14, 'year': 2024}, [26, '2024-01-14', False]), ('normal control', {'anchor': [2020, 3, 23], 'step': 14, 'year': 2020}, [26, '2020-01-13', False]), ('normal control', {'anchor': [2019, 7, 21], 'step': 7, 'year': 2020}, [52, '2020-01-05', False])], [('regression', {'anchor': [2022, 8, 16], 'step': 7, 'year': 2024}, [53, '2024-01-02', True]), ('regression', {'anchor': [2020, 3, 26], 'step': 14, 'year': 2020}, [27, '2020-01-02', True]), ('partial-repair probe', {'anchor': [2021, 6, 20], 'step': 14, 'year': 2023}, [27, '2023-01-01', True]), ('partial-repair probe', {'anchor': [2021, 1, 17], 'step': 14, 'year': 2023}, [27, '2023-01-01', True]), ('boundary control', {'anchor': [2024, 1, 5], 'step': 14, 'year': 2024}, [26, '2024-01-05', False]), ('normal control', {'anchor': [2021, 6, 11], 'step': 7, 'year': 2023}, [52, '2023-01-06', False]), ('normal control', {'anchor': [2025, 10, 16], 'step': 14, 'year': 2026}, [26, '2026-01-08', False]), ('normal control', {'anchor': [2024, 10, 14], 'step': 7, 'year': 2024}, [53, '2024-01-01', True]), ('normal control', {'anchor': [2018, 5, 7], 'step': 14, 'year': 2020}, [26, '2020-01-13', False])], [('regression', {'anchor': [2020, 3, 26], 'step': 14, 'year': 2020}, [27, '2020-01-02', True]), ('regression', {'anchor': [2023, 3, 28], 'step': 14, 'year': 2024}, [27, '2024-01-02', True]), ('partial-repair probe', {'anchor': [2022, 8, 16], 'step': 7, 'year': 2024}, [53, '2024-01-02', True]), ('partial-repair probe', {'anchor': [2025, 3, 13], 'step': 7, 'year': 2026}, [53, '2026-01-01', True]), ('boundary control', {'anchor': [2024, 1, 5], 'step': 14, 'year': 2024}, [26, '2024-01-05', False]), ('normal control', {'anchor': [2027, 5, 14], 'step': 14, 'year': 2026}, [26, '2026-01-09', False]), ('normal control', {'anchor': [2020, 3, 29], 'step': 7, 'year': 2020}, [52, '2020-01-05', False]), ('normal control', {'anchor': [2024, 2, 16], 'step': 14, 'year': 2023}, [26, '2023-01-06', False]), ('normal control', {'anchor': [2024, 2, 4], 'step': 14, 'year': 2023}, [26, '2023-01-08', False])], [('regression', {'anchor': [2023, 3, 28], 'step': 14, 'year': 2024}, [27, '2024-01-02', True]), ('regression', {'anchor': [2025, 10, 14], 'step': 7, 'year': 2024}, [53, '2024-01-02', True]), ('partial-repair probe', {'anchor': [2020, 3, 26], 'step': 14, 'year': 2020}, [27, '2020-01-02', True]), ('partial-repair probe', {'anchor': [2024, 10, 27], 'step': 7, 'year': 2023}, [53, '2023-01-01', True]), ('boundary control', {'anchor': [2024, 1, 5], 'step': 14, 'year': 2024}, [26, '2024-01-05', False]), ('normal control', {'anchor': [2024, 5, 1], 'step': 14, 'year': 2024}, [26, '2024-01-10', False]), ('normal control', {'anchor': [2021, 5, 10], 'step': 14, 'year': 2023}, [26, '2023-01-02', False]), ('normal control', {'anchor': [2027, 5, 22], 'step': 14, 'year': 2026}, [26, '2026-01-03', False]), ('normal control', {'anchor': [2024, 12, 7], 'step': 14, 'year': 2024}, [26, '2024-01-06', False])], [('regression', {'anchor': [2025, 10, 14], 'step': 7, 'year': 2024}, [53, '2024-01-02', True]), ('regression', {'anchor': [2020, 7, 16], 'step': 7, 'year': 2020}, [53, '2020-01-02', True]), ('partial-repair probe', {'anchor': [2023, 3, 28], 'step': 14, 'year': 2024}, [27, '2024-01-02', True]), ('partial-repair probe', {'anchor': [2021, 5, 2], 'step': 7, 'year': 2023}, [53, '2023-01-01', True]), ('boundary control', {'anchor': [2024, 1, 5], 'step': 14, 'year': 2024}, [26, '2024-01-05', False]), ('normal control', {'anchor': [2022, 9, 20], 'step': 14, 'year': 2023}, [26, '2023-01-10', False]), ('normal control', {'anchor': [2025, 8, 7], 'step': 7, 'year': 2025}, [52, '2025-01-02', False]), ('normal control', {'anchor': [2027, 11, 30], 'step': 14, 'year': 2026}, [26, '2026-01-13', False]), ('normal control', {'anchor': [2026, 7, 18], 'step': 14, 'year': 2025}, [26, '2025-01-04', False])]]
for i, (label, args, expected) in enumerate(fixtures[N-1]):
    check("%s %d" % (label, i), solve(args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
Boundary fixtureActualExpectedOutcome
regression (boundary) 0[26, '2020-01-02', False][27, '2020-01-02', True]Failed
regression 1[52, '2024-01-02', False][53, '2024-01-02', True]Failed
partial-repair probe (boundary) 2[27, '2026-01-01', True][27, '2026-01-01', True]Passed
partial-repair probe 3[27, '2023-01-01', True][27, '2023-01-01', True]Passed
boundary control 4[26, '2024-01-05', False][26, '2024-01-05', False]Passed
normal control 5[26, '2024-01-11', False][26, '2024-01-11', False]Passed
normal control 6[26, '2024-01-14', False][26, '2024-01-14', False]Passed
normal control 7[26, '2020-01-13', False][26, '2020-01-13', False]Passed
normal control 8[52, '2020-01-05', False][52, '2020-01-05', False]Passed

SHA-256 / dbe5608eecab479deaf5838874b41ce4bcfc7f33773df2540716eb9a7a1863b5

2 / The unsuccessful fix

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json
import datetime
N = 1
observations = []
def solve(x):
    anchor = datetime.date(*x['anchor'])
    lo = datetime.date(x['year'], 1, 1)
    hi = datetime.date(x['year'], 12, 30)
    off = (lo - anchor).days
    k = -(-off // x['step'])
    first = anchor + datetime.timedelta(days=k * x['step'])
    count = (hi - first).days // x['step'] + 1
    periods = 26 if x['step'] == 14 else 52
    return [count, first.isoformat(), count > periods]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression (boundary)', {'anchor': [2020, 12, 31], 'step': 14, 'year': 2020}, [27, '2020-01-02', True]), ('regression', {'anchor': [2022, 8, 16], 'step': 7, 'year': 2024}, [53, '2024-01-02', True]), ('partial-repair probe (boundary)', {'anchor': [2026, 1, 1], 'step': 14, 'year': 2026}, [27, '2026-01-01', True]), ('partial-repair probe', {'anchor': [2021, 6, 20], 'step': 14, 'year': 2023}, [27, '2023-01-01', True]), ('boundary control', {'anchor': [2024, 1, 5], 'step': 14, 'year': 2024}, [26, '2024-01-05', False]), ('normal control', {'anchor': [2023, 8, 10], 'step': 14, 'year': 2024}, [26, '2024-01-11', False]), ('normal control', {'anchor': [2024, 3, 10], 'step': 14, 'year': 2024}, [26, '2024-01-14', False]), ('normal control', {'anchor': [2020, 3, 23], 'step': 14, 'year': 2020}, [26, '2020-01-13', False]), ('normal control', {'anchor': [2019, 7, 21], 'step': 7, 'year': 2020}, [52, '2020-01-05', False])], [('regression', {'anchor': [2022, 8, 16], 'step': 7, 'year': 2024}, [53, '2024-01-02', True]), ('regression', {'anchor': [2020, 3, 26], 'step': 14, 'year': 2020}, [27, '2020-01-02', True]), ('partial-repair probe', {'anchor': [2021, 6, 20], 'step': 14, 'year': 2023}, [27, '2023-01-01', True]), ('partial-repair probe', {'anchor': [2021, 1, 17], 'step': 14, 'year': 2023}, [27, '2023-01-01', True]), ('boundary control', {'anchor': [2024, 1, 5], 'step': 14, 'year': 2024}, [26, '2024-01-05', False]), ('normal control', {'anchor': [2021, 6, 11], 'step': 7, 'year': 2023}, [52, '2023-01-06', False]), ('normal control', {'anchor': [2025, 10, 16], 'step': 14, 'year': 2026}, [26, '2026-01-08', False]), ('normal control', {'anchor': [2024, 10, 14], 'step': 7, 'year': 2024}, [53, '2024-01-01', True]), ('normal control', {'anchor': [2018, 5, 7], 'step': 14, 'year': 2020}, [26, '2020-01-13', False])], [('regression', {'anchor': [2020, 3, 26], 'step': 14, 'year': 2020}, [27, '2020-01-02', True]), ('regression', {'anchor': [2023, 3, 28], 'step': 14, 'year': 2024}, [27, '2024-01-02', True]), ('partial-repair probe', {'anchor': [2022, 8, 16], 'step': 7, 'year': 2024}, [53, '2024-01-02', True]), ('partial-repair probe', {'anchor': [2025, 3, 13], 'step': 7, 'year': 2026}, [53, '2026-01-01', True]), ('boundary control', {'anchor': [2024, 1, 5], 'step': 14, 'year': 2024}, [26, '2024-01-05', False]), ('normal control', {'anchor': [2027, 5, 14], 'step': 14, 'year': 2026}, [26, '2026-01-09', False]), ('normal control', {'anchor': [2020, 3, 29], 'step': 7, 'year': 2020}, [52, '2020-01-05', False]), ('normal control', {'anchor': [2024, 2, 16], 'step': 14, 'year': 2023}, [26, '2023-01-06', False]), ('normal control', {'anchor': [2024, 2, 4], 'step': 14, 'year': 2023}, [26, '2023-01-08', False])], [('regression', {'anchor': [2023, 3, 28], 'step': 14, 'year': 2024}, [27, '2024-01-02', True]), ('regression', {'anchor': [2025, 10, 14], 'step': 7, 'year': 2024}, [53, '2024-01-02', True]), ('partial-repair probe', {'anchor': [2020, 3, 26], 'step': 14, 'year': 2020}, [27, '2020-01-02', True]), ('partial-repair probe', {'anchor': [2024, 10, 27], 'step': 7, 'year': 2023}, [53, '2023-01-01', True]), ('boundary control', {'anchor': [2024, 1, 5], 'step': 14, 'year': 2024}, [26, '2024-01-05', False]), ('normal control', {'anchor': [2024, 5, 1], 'step': 14, 'year': 2024}, [26, '2024-01-10', False]), ('normal control', {'anchor': [2021, 5, 10], 'step': 14, 'year': 2023}, [26, '2023-01-02', False]), ('normal control', {'anchor': [2027, 5, 22], 'step': 14, 'year': 2026}, [26, '2026-01-03', False]), ('normal control', {'anchor': [2024, 12, 7], 'step': 14, 'year': 2024}, [26, '2024-01-06', False])], [('regression', {'anchor': [2025, 10, 14], 'step': 7, 'year': 2024}, [53, '2024-01-02', True]), ('regression', {'anchor': [2020, 7, 16], 'step': 7, 'year': 2020}, [53, '2020-01-02', True]), ('partial-repair probe', {'anchor': [2023, 3, 28], 'step': 14, 'year': 2024}, [27, '2024-01-02', True]), ('partial-repair probe', {'anchor': [2021, 5, 2], 'step': 7, 'year': 2023}, [53, '2023-01-01', True]), ('boundary control', {'anchor': [2024, 1, 5], 'step': 14, 'year': 2024}, [26, '2024-01-05', False]), ('normal control', {'anchor': [2022, 9, 20], 'step': 14, 'year': 2023}, [26, '2023-01-10', False]), ('normal control', {'anchor': [2025, 8, 7], 'step': 7, 'year': 2025}, [52, '2025-01-02', False]), ('normal control', {'anchor': [2027, 11, 30], 'step': 14, 'year': 2026}, [26, '2026-01-13', False]), ('normal control', {'anchor': [2026, 7, 18], 'step': 14, 'year': 2025}, [26, '2025-01-04', False])]]
for i, (label, args, expected) in enumerate(fixtures[N-1]):
    check("%s %d" % (label, i), solve(args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
Boundary fixtureActualExpectedOutcome
regression (boundary) 0[26, '2020-01-02', False][27, '2020-01-02', True]Failed
regression 1[52, '2024-01-02', False][53, '2024-01-02', True]Failed
partial-repair probe (boundary) 2[26, '2026-01-01', False][27, '2026-01-01', True]Failed
partial-repair probe 3[26, '2023-01-01', False][27, '2023-01-01', True]Failed
boundary control 4[26, '2024-01-05', False][26, '2024-01-05', False]Passed
normal control 5[26, '2024-01-11', False][26, '2024-01-11', False]Passed
normal control 6[26, '2024-01-14', False][26, '2024-01-14', False]Passed
normal control 7[26, '2020-01-13', False][26, '2020-01-13', False]Passed
normal control 8[52, '2020-01-05', False][52, '2020-01-05', False]Passed

SHA-256 / 0ddd83cd2cac9166559db9e4fd7458235b5e9e7368517158224cec521c49348f

3 / The verified repair

Exit 0
"""Failure Map reference implementation. Python standard library only."""
import json
import datetime
N = 1
observations = []
def solve(x):
    anchor = datetime.date(*x['anchor'])
    lo = datetime.date(x['year'], 1, 1)
    hi = datetime.date(x['year'], 12, 31)
    off = (lo - anchor).days
    k = -(-off // x['step'])
    first = anchor + datetime.timedelta(days=k * x['step'])
    count = (hi - first).days // x['step'] + 1
    periods = 26 if x['step'] == 14 else 52
    return [count, first.isoformat(), count > periods]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression (boundary)', {'anchor': [2020, 12, 31], 'step': 14, 'year': 2020}, [27, '2020-01-02', True]), ('regression', {'anchor': [2022, 8, 16], 'step': 7, 'year': 2024}, [53, '2024-01-02', True]), ('partial-repair probe (boundary)', {'anchor': [2026, 1, 1], 'step': 14, 'year': 2026}, [27, '2026-01-01', True]), ('partial-repair probe', {'anchor': [2021, 6, 20], 'step': 14, 'year': 2023}, [27, '2023-01-01', True]), ('boundary control', {'anchor': [2024, 1, 5], 'step': 14, 'year': 2024}, [26, '2024-01-05', False]), ('normal control', {'anchor': [2023, 8, 10], 'step': 14, 'year': 2024}, [26, '2024-01-11', False]), ('normal control', {'anchor': [2024, 3, 10], 'step': 14, 'year': 2024}, [26, '2024-01-14', False]), ('normal control', {'anchor': [2020, 3, 23], 'step': 14, 'year': 2020}, [26, '2020-01-13', False]), ('normal control', {'anchor': [2019, 7, 21], 'step': 7, 'year': 2020}, [52, '2020-01-05', False])], [('regression', {'anchor': [2022, 8, 16], 'step': 7, 'year': 2024}, [53, '2024-01-02', True]), ('regression', {'anchor': [2020, 3, 26], 'step': 14, 'year': 2020}, [27, '2020-01-02', True]), ('partial-repair probe', {'anchor': [2021, 6, 20], 'step': 14, 'year': 2023}, [27, '2023-01-01', True]), ('partial-repair probe', {'anchor': [2021, 1, 17], 'step': 14, 'year': 2023}, [27, '2023-01-01', True]), ('boundary control', {'anchor': [2024, 1, 5], 'step': 14, 'year': 2024}, [26, '2024-01-05', False]), ('normal control', {'anchor': [2021, 6, 11], 'step': 7, 'year': 2023}, [52, '2023-01-06', False]), ('normal control', {'anchor': [2025, 10, 16], 'step': 14, 'year': 2026}, [26, '2026-01-08', False]), ('normal control', {'anchor': [2024, 10, 14], 'step': 7, 'year': 2024}, [53, '2024-01-01', True]), ('normal control', {'anchor': [2018, 5, 7], 'step': 14, 'year': 2020}, [26, '2020-01-13', False])], [('regression', {'anchor': [2020, 3, 26], 'step': 14, 'year': 2020}, [27, '2020-01-02', True]), ('regression', {'anchor': [2023, 3, 28], 'step': 14, 'year': 2024}, [27, '2024-01-02', True]), ('partial-repair probe', {'anchor': [2022, 8, 16], 'step': 7, 'year': 2024}, [53, '2024-01-02', True]), ('partial-repair probe', {'anchor': [2025, 3, 13], 'step': 7, 'year': 2026}, [53, '2026-01-01', True]), ('boundary control', {'anchor': [2024, 1, 5], 'step': 14, 'year': 2024}, [26, '2024-01-05', False]), ('normal control', {'anchor': [2027, 5, 14], 'step': 14, 'year': 2026}, [26, '2026-01-09', False]), ('normal control', {'anchor': [2020, 3, 29], 'step': 7, 'year': 2020}, [52, '2020-01-05', False]), ('normal control', {'anchor': [2024, 2, 16], 'step': 14, 'year': 2023}, [26, '2023-01-06', False]), ('normal control', {'anchor': [2024, 2, 4], 'step': 14, 'year': 2023}, [26, '2023-01-08', False])], [('regression', {'anchor': [2023, 3, 28], 'step': 14, 'year': 2024}, [27, '2024-01-02', True]), ('regression', {'anchor': [2025, 10, 14], 'step': 7, 'year': 2024}, [53, '2024-01-02', True]), ('partial-repair probe', {'anchor': [2020, 3, 26], 'step': 14, 'year': 2020}, [27, '2020-01-02', True]), ('partial-repair probe', {'anchor': [2024, 10, 27], 'step': 7, 'year': 2023}, [53, '2023-01-01', True]), ('boundary control', {'anchor': [2024, 1, 5], 'step': 14, 'year': 2024}, [26, '2024-01-05', False]), ('normal control', {'anchor': [2024, 5, 1], 'step': 14, 'year': 2024}, [26, '2024-01-10', False]), ('normal control', {'anchor': [2021, 5, 10], 'step': 14, 'year': 2023}, [26, '2023-01-02', False]), ('normal control', {'anchor': [2027, 5, 22], 'step': 14, 'year': 2026}, [26, '2026-01-03', False]), ('normal control', {'anchor': [2024, 12, 7], 'step': 14, 'year': 2024}, [26, '2024-01-06', False])], [('regression', {'anchor': [2025, 10, 14], 'step': 7, 'year': 2024}, [53, '2024-01-02', True]), ('regression', {'anchor': [2020, 7, 16], 'step': 7, 'year': 2020}, [53, '2020-01-02', True]), ('partial-repair probe', {'anchor': [2023, 3, 28], 'step': 14, 'year': 2024}, [27, '2024-01-02', True]), ('partial-repair probe', {'anchor': [2021, 5, 2], 'step': 7, 'year': 2023}, [53, '2023-01-01', True]), ('boundary control', {'anchor': [2024, 1, 5], 'step': 14, 'year': 2024}, [26, '2024-01-05', False]), ('normal control', {'anchor': [2022, 9, 20], 'step': 14, 'year': 2023}, [26, '2023-01-10', False]), ('normal control', {'anchor': [2025, 8, 7], 'step': 7, 'year': 2025}, [52, '2025-01-02', False]), ('normal control', {'anchor': [2027, 11, 30], 'step': 14, 'year': 2026}, [26, '2026-01-13', False]), ('normal control', {'anchor': [2026, 7, 18], 'step': 14, 'year': 2025}, [26, '2025-01-04', False])]]
for i, (label, args, expected) in enumerate(fixtures[N-1]):
    check("%s %d" % (label, i), solve(args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
Boundary fixtureActualExpectedOutcome
regression (boundary) 0[27, '2020-01-02', True][27, '2020-01-02', True]Passed
regression 1[53, '2024-01-02', True][53, '2024-01-02', True]Passed
partial-repair probe (boundary) 2[27, '2026-01-01', True][27, '2026-01-01', True]Passed
partial-repair probe 3[27, '2023-01-01', True][27, '2023-01-01', True]Passed
boundary control 4[26, '2024-01-05', False][26, '2024-01-05', False]Passed
normal control 5[26, '2024-01-11', False][26, '2024-01-11', False]Passed
normal control 6[26, '2024-01-14', False][26, '2024-01-14', False]Passed
normal control 7[26, '2020-01-13', False][26, '2020-01-13', False]Passed
normal control 8[52, '2020-01-05', False][52, '2020-01-05', False]Passed

SHA-256 / f0ba775bcd649f892636359b0d19bb6eec5e78956994db6d8a2e34964b4db45d

Verification & scope

A deterministic teaching model of a stipulated payroll rule with toy thresholds and rates. It makes no claim of conformance to any tax authority, statute or jurisdiction and is not payroll software. This reproducer isolates one failure mechanism. Results cover the supplied fixtures. Variants within a family share a test contract and should remain grouped when constructing evaluation splits. Related mechanisms with a shared evaluation_group must also remain together; these controlled models are not independent production incidents.

Observations recorded using Python 3.12.14 at 2026-09-29T14:46:34.214726+00:00.

Case digest / 936d5c7547e222baf6c7de0bc9608856a169a3ca9c483a497da088634c2453a2