FAILURE MAP
← Case archive

FA-59186 / Payroll withholding rules / Open access

Cumulative wages withholding method: tax to date proration · case 01

Withholding collapses to a single period's share of tax despite prior withholding being subtracted.

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

ROOT CAUSE

The annual tax is de-annualized for one period instead of all elapsed periods.

VERIFIED REPAIR

Restore the contract rule at the tax to date proration step: use `due = tax(annual) * k / x['periods']`.

Unsuccessful approach: The attempt uses periods elapsed before this one, omitting the current period's share.

Case contract

Input {ytd_wages, ytd_wh, wage, period_index k (1-based, includes this period), periods}. Annualized = (ytd_wages + wage)*periods/k exactly. Annual tax: 0% to 10,000.00, 12% to 40,000.00, 24% above. Tax to date = annual tax * k/periods. Withholding = max(0, tax_to_date - ytd_wh) rounded half-up at the end.

Why this case matters

The cumulative method spreads irregular pay across elapsed periods and trues up against prior withholding.

1 / The failure

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json
from fractions import Fraction
import math
N = 1
observations = []
def solve(x):
    k = x['period_index']
    total = x['ytd_wages'] + x['wage']
    annual = Fraction(total * x['periods'], k)
    def tax(a):
        t = Fraction(0)
        if a > 1000000:
            t += (min(a, 4000000) - 1000000) * Fraction(12, 100)
        if a > 4000000:
            t += (a - 4000000) * Fraction(24, 100)
        return t
    due = tax(annual) / x['periods']
    wh = max(0, due - x['ytd_wh'])
    return math.floor(wh + Fraction(1, 2))
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression', {'ytd_wages': 7060061, 'ytd_wh': 424656, 'wage': 491569, 'period_index': 24, 'periods': 52}, 1110812), ('regression', {'ytd_wages': 9590400, 'ytd_wh': 237513, 'wage': 534789, 'period_index': 22, 'periods': 26}, 1684840), ('partial-repair probe', {'ytd_wages': 8775450, 'ytd_wh': 1616919, 'wage': 334681, 'period_index': 24, 'periods': 26}, 15666), ('partial-repair probe', {'ytd_wages': 6145936, 'ytd_wh': 219937, 'wage': 315568, 'period_index': 15, 'periods': 52}, 1157747), ('normal control', {'ytd_wages': 2182615, 'ytd_wh': 379871, 'wage': 414670, 'period_index': 20, 'periods': 26}, 0), ('normal control', {'ytd_wages': 3504142, 'ytd_wh': 423680, 'wage': 219362, 'period_index': 26, 'periods': 26}, 0), ('normal control', {'ytd_wages': 953768, 'ytd_wh': 32122, 'wage': 67782, 'period_index': 21, 'periods': 26}, 0), ('normal control', {'ytd_wages': 185427, 'ytd_wh': 36091, 'wage': 108159, 'period_index': 2, 'periods': 12}, 0)], [('regression', {'ytd_wages': 9590400, 'ytd_wh': 237513, 'wage': 534789, 'period_index': 22, 'periods': 26}, 1684840), ('regression', {'ytd_wages': 8775450, 'ytd_wh': 1616919, 'wage': 334681, 'period_index': 24, 'periods': 26}, 15666), ('partial-repair probe', {'ytd_wages': 6145936, 'ytd_wh': 219937, 'wage': 315568, 'period_index': 15, 'periods': 52}, 1157747), ('partial-repair probe', {'ytd_wages': 0, 'ytd_wh': 1, 'wage': 366567, 'period_index': 1, 'periods': 12}, 37975), ('normal control', {'ytd_wages': 2268722, 'ytd_wh': 255963, 'wage': 370037, 'period_index': 8, 'periods': 12}, 0), ('normal control', {'ytd_wages': 141603, 'ytd_wh': 11497, 'wage': 15563, 'period_index': 7, 'periods': 12}, 0), ('normal control', {'ytd_wages': 29165, 'ytd_wh': 3348, 'wage': 5167, 'period_index': 8, 'periods': 52}, 0), ('normal control', {'ytd_wages': 32735, 'ytd_wh': 3167, 'wage': 155253, 'period_index': 2, 'periods': 12}, 0)], [('regression', {'ytd_wages': 8775450, 'ytd_wh': 1616919, 'wage': 334681, 'period_index': 24, 'periods': 26}, 15666), ('regression', {'ytd_wages': 6145936, 'ytd_wh': 219937, 'wage': 315568, 'period_index': 15, 'periods': 52}, 1157747), ('partial-repair probe', {'ytd_wages': 0, 'ytd_wh': 1, 'wage': 366567, 'period_index': 1, 'periods': 12}, 37975), ('partial-repair probe', {'ytd_wages': 4585857, 'ytd_wh': 265867, 'wage': 360821, 'period_index': 12, 'periods': 26}, 644413), ('normal control', {'ytd_wages': 507467, 'ytd_wh': 39498, 'wage': 384392, 'period_index': 10, 'periods': 12}, 0), ('normal control', {'ytd_wages': 2675147, 'ytd_wh': 522064, 'wage': 171429, 'period_index': 26, 'periods': 26}, 0), ('normal control', {'ytd_wages': 5196549, 'ytd_wh': 1001382, 'wage': 210690, 'period_index': 42, 'periods': 52}, 0), ('normal control', {'ytd_wages': 1078164, 'ytd_wh': 161049, 'wage': 458540, 'period_index': 6, 'periods': 12}, 0)], [('regression', {'ytd_wages': 6145936, 'ytd_wh': 219937, 'wage': 315568, 'period_index': 15, 'periods': 52}, 1157747), ('regression', {'ytd_wages': 4585857, 'ytd_wh': 265867, 'wage': 360821, 'period_index': 12, 'periods': 26}, 644413), ('partial-repair probe', {'ytd_wages': 2724662, 'ytd_wh': 86701, 'wage': 332622, 'period_index': 7, 'periods': 52}, 566278), ('partial-repair probe', {'ytd_wages': 1665992, 'ytd_wh': 58323, 'wage': 387492, 'period_index': 4, 'periods': 12}, 234513), ('normal control', {'ytd_wages': 978329, 'ytd_wh': 122337, 'wage': 298469, 'period_index': 9, 'periods': 26}, 0), ('normal control', {'ytd_wages': 3416481, 'ytd_wh': 668694, 'wage': 525477, 'period_index': 15, 'periods': 26}, 0), ('normal control', {'ytd_wages': 78474, 'ytd_wh': 12616, 'wage': 2681, 'period_index': 35, 'periods': 52}, 0), ('normal control', {'ytd_wages': 780083, 'ytd_wh': 115357, 'wage': 60520, 'period_index': 12, 'periods': 26}, 0)], [('regression', {'ytd_wages': 4585857, 'ytd_wh': 265867, 'wage': 360821, 'period_index': 12, 'periods': 26}, 644413), ('regression', {'ytd_wages': 2724662, 'ytd_wh': 86701, 'wage': 332622, 'period_index': 7, 'periods': 52}, 566278), ('partial-repair probe', {'ytd_wages': 3055036, 'ytd_wh': 132701, 'wage': 516493, 'period_index': 12, 'periods': 12}, 175882), ('partial-repair probe', {'ytd_wages': 17382079, 'ytd_wh': 703861, 'wage': 564605, 'period_index': 25, 'periods': 52}, 3314882), ('normal control', {'ytd_wages': 343578, 'ytd_wh': 51820, 'wage': 340882, 'period_index': 8, 'periods': 12}, 0), ('normal control', {'ytd_wages': 30504, 'ytd_wh': 1425, 'wage': 14017, 'period_index': 11, 'periods': 12}, 0), ('normal control', {'ytd_wages': 255421, 'ytd_wh': 47741, 'wage': 37513, 'period_index': 11, 'periods': 12}, 0), ('normal control', {'ytd_wages': 4101816, 'ytd_wh': 781382, 'wage': 93819, 'period_index': 46, 'periods': 52}, 0)]]
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 001110812Failed
regression 101684840Failed
partial-repair probe 2015666Failed
partial-repair probe 301157747Failed
normal control 400Passed
normal control 500Passed
normal control 600Passed
normal control 700Passed

SHA-256 / f9cb3a6eba71f223c861fd432138e6c5288cb96afb90adcc4398d07989160031

2 / The unsuccessful fix

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json
from fractions import Fraction
import math
N = 1
observations = []
def solve(x):
    k = x['period_index']
    total = x['ytd_wages'] + x['wage']
    annual = Fraction(total * x['periods'], k)
    def tax(a):
        t = Fraction(0)
        if a > 1000000:
            t += (min(a, 4000000) - 1000000) * Fraction(12, 100)
        if a > 4000000:
            t += (a - 4000000) * Fraction(24, 100)
        return t
    due = tax(annual) * (k - 1) / x['periods']
    wh = max(0, due - x['ytd_wh'])
    return math.floor(wh + Fraction(1, 2))
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression', {'ytd_wages': 7060061, 'ytd_wh': 424656, 'wage': 491569, 'period_index': 24, 'periods': 52}, 1110812), ('regression', {'ytd_wages': 9590400, 'ytd_wh': 237513, 'wage': 534789, 'period_index': 22, 'periods': 26}, 1684840), ('partial-repair probe', {'ytd_wages': 8775450, 'ytd_wh': 1616919, 'wage': 334681, 'period_index': 24, 'periods': 26}, 15666), ('partial-repair probe', {'ytd_wages': 6145936, 'ytd_wh': 219937, 'wage': 315568, 'period_index': 15, 'periods': 52}, 1157747), ('normal control', {'ytd_wages': 2182615, 'ytd_wh': 379871, 'wage': 414670, 'period_index': 20, 'periods': 26}, 0), ('normal control', {'ytd_wages': 3504142, 'ytd_wh': 423680, 'wage': 219362, 'period_index': 26, 'periods': 26}, 0), ('normal control', {'ytd_wages': 953768, 'ytd_wh': 32122, 'wage': 67782, 'period_index': 21, 'periods': 26}, 0), ('normal control', {'ytd_wages': 185427, 'ytd_wh': 36091, 'wage': 108159, 'period_index': 2, 'periods': 12}, 0)], [('regression', {'ytd_wages': 9590400, 'ytd_wh': 237513, 'wage': 534789, 'period_index': 22, 'periods': 26}, 1684840), ('regression', {'ytd_wages': 8775450, 'ytd_wh': 1616919, 'wage': 334681, 'period_index': 24, 'periods': 26}, 15666), ('partial-repair probe', {'ytd_wages': 6145936, 'ytd_wh': 219937, 'wage': 315568, 'period_index': 15, 'periods': 52}, 1157747), ('partial-repair probe', {'ytd_wages': 0, 'ytd_wh': 1, 'wage': 366567, 'period_index': 1, 'periods': 12}, 37975), ('normal control', {'ytd_wages': 2268722, 'ytd_wh': 255963, 'wage': 370037, 'period_index': 8, 'periods': 12}, 0), ('normal control', {'ytd_wages': 141603, 'ytd_wh': 11497, 'wage': 15563, 'period_index': 7, 'periods': 12}, 0), ('normal control', {'ytd_wages': 29165, 'ytd_wh': 3348, 'wage': 5167, 'period_index': 8, 'periods': 52}, 0), ('normal control', {'ytd_wages': 32735, 'ytd_wh': 3167, 'wage': 155253, 'period_index': 2, 'periods': 12}, 0)], [('regression', {'ytd_wages': 8775450, 'ytd_wh': 1616919, 'wage': 334681, 'period_index': 24, 'periods': 26}, 15666), ('regression', {'ytd_wages': 6145936, 'ytd_wh': 219937, 'wage': 315568, 'period_index': 15, 'periods': 52}, 1157747), ('partial-repair probe', {'ytd_wages': 0, 'ytd_wh': 1, 'wage': 366567, 'period_index': 1, 'periods': 12}, 37975), ('partial-repair probe', {'ytd_wages': 4585857, 'ytd_wh': 265867, 'wage': 360821, 'period_index': 12, 'periods': 26}, 644413), ('normal control', {'ytd_wages': 507467, 'ytd_wh': 39498, 'wage': 384392, 'period_index': 10, 'periods': 12}, 0), ('normal control', {'ytd_wages': 2675147, 'ytd_wh': 522064, 'wage': 171429, 'period_index': 26, 'periods': 26}, 0), ('normal control', {'ytd_wages': 5196549, 'ytd_wh': 1001382, 'wage': 210690, 'period_index': 42, 'periods': 52}, 0), ('normal control', {'ytd_wages': 1078164, 'ytd_wh': 161049, 'wage': 458540, 'period_index': 6, 'periods': 12}, 0)], [('regression', {'ytd_wages': 6145936, 'ytd_wh': 219937, 'wage': 315568, 'period_index': 15, 'periods': 52}, 1157747), ('regression', {'ytd_wages': 4585857, 'ytd_wh': 265867, 'wage': 360821, 'period_index': 12, 'periods': 26}, 644413), ('partial-repair probe', {'ytd_wages': 2724662, 'ytd_wh': 86701, 'wage': 332622, 'period_index': 7, 'periods': 52}, 566278), ('partial-repair probe', {'ytd_wages': 1665992, 'ytd_wh': 58323, 'wage': 387492, 'period_index': 4, 'periods': 12}, 234513), ('normal control', {'ytd_wages': 978329, 'ytd_wh': 122337, 'wage': 298469, 'period_index': 9, 'periods': 26}, 0), ('normal control', {'ytd_wages': 3416481, 'ytd_wh': 668694, 'wage': 525477, 'period_index': 15, 'periods': 26}, 0), ('normal control', {'ytd_wages': 78474, 'ytd_wh': 12616, 'wage': 2681, 'period_index': 35, 'periods': 52}, 0), ('normal control', {'ytd_wages': 780083, 'ytd_wh': 115357, 'wage': 60520, 'period_index': 12, 'periods': 26}, 0)], [('regression', {'ytd_wages': 4585857, 'ytd_wh': 265867, 'wage': 360821, 'period_index': 12, 'periods': 26}, 644413), ('regression', {'ytd_wages': 2724662, 'ytd_wh': 86701, 'wage': 332622, 'period_index': 7, 'periods': 52}, 566278), ('partial-repair probe', {'ytd_wages': 3055036, 'ytd_wh': 132701, 'wage': 516493, 'period_index': 12, 'periods': 12}, 175882), ('partial-repair probe', {'ytd_wages': 17382079, 'ytd_wh': 703861, 'wage': 564605, 'period_index': 25, 'periods': 52}, 3314882), ('normal control', {'ytd_wages': 343578, 'ytd_wh': 51820, 'wage': 340882, 'period_index': 8, 'periods': 12}, 0), ('normal control', {'ytd_wages': 30504, 'ytd_wh': 1425, 'wage': 14017, 'period_index': 11, 'periods': 12}, 0), ('normal control', {'ytd_wages': 255421, 'ytd_wh': 47741, 'wage': 37513, 'period_index': 11, 'periods': 12}, 0), ('normal control', {'ytd_wages': 4101816, 'ytd_wh': 781382, 'wage': 93819, 'period_index': 46, 'periods': 52}, 0)]]
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 010468341110812Failed
regression 115974601684840Failed
partial-repair probe 2015666Failed
partial-repair probe 310659011157747Failed
normal control 400Passed
normal control 500Passed
normal control 600Passed
normal control 700Passed

SHA-256 / a562e1944d2072577f74ca489918580e9e5b4b9b851289aa9787dcaba7cd3b42

3 / The verified repair

Exit 0
"""Failure Map reference implementation. Python standard library only."""
import json
from fractions import Fraction
import math
N = 1
observations = []
def solve(x):
    k = x['period_index']
    total = x['ytd_wages'] + x['wage']
    annual = Fraction(total * x['periods'], k)
    def tax(a):
        t = Fraction(0)
        if a > 1000000:
            t += (min(a, 4000000) - 1000000) * Fraction(12, 100)
        if a > 4000000:
            t += (a - 4000000) * Fraction(24, 100)
        return t
    due = tax(annual) * k / x['periods']
    wh = max(0, due - x['ytd_wh'])
    return math.floor(wh + Fraction(1, 2))
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression', {'ytd_wages': 7060061, 'ytd_wh': 424656, 'wage': 491569, 'period_index': 24, 'periods': 52}, 1110812), ('regression', {'ytd_wages': 9590400, 'ytd_wh': 237513, 'wage': 534789, 'period_index': 22, 'periods': 26}, 1684840), ('partial-repair probe', {'ytd_wages': 8775450, 'ytd_wh': 1616919, 'wage': 334681, 'period_index': 24, 'periods': 26}, 15666), ('partial-repair probe', {'ytd_wages': 6145936, 'ytd_wh': 219937, 'wage': 315568, 'period_index': 15, 'periods': 52}, 1157747), ('normal control', {'ytd_wages': 2182615, 'ytd_wh': 379871, 'wage': 414670, 'period_index': 20, 'periods': 26}, 0), ('normal control', {'ytd_wages': 3504142, 'ytd_wh': 423680, 'wage': 219362, 'period_index': 26, 'periods': 26}, 0), ('normal control', {'ytd_wages': 953768, 'ytd_wh': 32122, 'wage': 67782, 'period_index': 21, 'periods': 26}, 0), ('normal control', {'ytd_wages': 185427, 'ytd_wh': 36091, 'wage': 108159, 'period_index': 2, 'periods': 12}, 0)], [('regression', {'ytd_wages': 9590400, 'ytd_wh': 237513, 'wage': 534789, 'period_index': 22, 'periods': 26}, 1684840), ('regression', {'ytd_wages': 8775450, 'ytd_wh': 1616919, 'wage': 334681, 'period_index': 24, 'periods': 26}, 15666), ('partial-repair probe', {'ytd_wages': 6145936, 'ytd_wh': 219937, 'wage': 315568, 'period_index': 15, 'periods': 52}, 1157747), ('partial-repair probe', {'ytd_wages': 0, 'ytd_wh': 1, 'wage': 366567, 'period_index': 1, 'periods': 12}, 37975), ('normal control', {'ytd_wages': 2268722, 'ytd_wh': 255963, 'wage': 370037, 'period_index': 8, 'periods': 12}, 0), ('normal control', {'ytd_wages': 141603, 'ytd_wh': 11497, 'wage': 15563, 'period_index': 7, 'periods': 12}, 0), ('normal control', {'ytd_wages': 29165, 'ytd_wh': 3348, 'wage': 5167, 'period_index': 8, 'periods': 52}, 0), ('normal control', {'ytd_wages': 32735, 'ytd_wh': 3167, 'wage': 155253, 'period_index': 2, 'periods': 12}, 0)], [('regression', {'ytd_wages': 8775450, 'ytd_wh': 1616919, 'wage': 334681, 'period_index': 24, 'periods': 26}, 15666), ('regression', {'ytd_wages': 6145936, 'ytd_wh': 219937, 'wage': 315568, 'period_index': 15, 'periods': 52}, 1157747), ('partial-repair probe', {'ytd_wages': 0, 'ytd_wh': 1, 'wage': 366567, 'period_index': 1, 'periods': 12}, 37975), ('partial-repair probe', {'ytd_wages': 4585857, 'ytd_wh': 265867, 'wage': 360821, 'period_index': 12, 'periods': 26}, 644413), ('normal control', {'ytd_wages': 507467, 'ytd_wh': 39498, 'wage': 384392, 'period_index': 10, 'periods': 12}, 0), ('normal control', {'ytd_wages': 2675147, 'ytd_wh': 522064, 'wage': 171429, 'period_index': 26, 'periods': 26}, 0), ('normal control', {'ytd_wages': 5196549, 'ytd_wh': 1001382, 'wage': 210690, 'period_index': 42, 'periods': 52}, 0), ('normal control', {'ytd_wages': 1078164, 'ytd_wh': 161049, 'wage': 458540, 'period_index': 6, 'periods': 12}, 0)], [('regression', {'ytd_wages': 6145936, 'ytd_wh': 219937, 'wage': 315568, 'period_index': 15, 'periods': 52}, 1157747), ('regression', {'ytd_wages': 4585857, 'ytd_wh': 265867, 'wage': 360821, 'period_index': 12, 'periods': 26}, 644413), ('partial-repair probe', {'ytd_wages': 2724662, 'ytd_wh': 86701, 'wage': 332622, 'period_index': 7, 'periods': 52}, 566278), ('partial-repair probe', {'ytd_wages': 1665992, 'ytd_wh': 58323, 'wage': 387492, 'period_index': 4, 'periods': 12}, 234513), ('normal control', {'ytd_wages': 978329, 'ytd_wh': 122337, 'wage': 298469, 'period_index': 9, 'periods': 26}, 0), ('normal control', {'ytd_wages': 3416481, 'ytd_wh': 668694, 'wage': 525477, 'period_index': 15, 'periods': 26}, 0), ('normal control', {'ytd_wages': 78474, 'ytd_wh': 12616, 'wage': 2681, 'period_index': 35, 'periods': 52}, 0), ('normal control', {'ytd_wages': 780083, 'ytd_wh': 115357, 'wage': 60520, 'period_index': 12, 'periods': 26}, 0)], [('regression', {'ytd_wages': 4585857, 'ytd_wh': 265867, 'wage': 360821, 'period_index': 12, 'periods': 26}, 644413), ('regression', {'ytd_wages': 2724662, 'ytd_wh': 86701, 'wage': 332622, 'period_index': 7, 'periods': 52}, 566278), ('partial-repair probe', {'ytd_wages': 3055036, 'ytd_wh': 132701, 'wage': 516493, 'period_index': 12, 'periods': 12}, 175882), ('partial-repair probe', {'ytd_wages': 17382079, 'ytd_wh': 703861, 'wage': 564605, 'period_index': 25, 'periods': 52}, 3314882), ('normal control', {'ytd_wages': 343578, 'ytd_wh': 51820, 'wage': 340882, 'period_index': 8, 'periods': 12}, 0), ('normal control', {'ytd_wages': 30504, 'ytd_wh': 1425, 'wage': 14017, 'period_index': 11, 'periods': 12}, 0), ('normal control', {'ytd_wages': 255421, 'ytd_wh': 47741, 'wage': 37513, 'period_index': 11, 'periods': 12}, 0), ('normal control', {'ytd_wages': 4101816, 'ytd_wh': 781382, 'wage': 93819, 'period_index': 46, 'periods': 52}, 0)]]
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 011108121110812Passed
regression 116848401684840Passed
partial-repair probe 21566615666Passed
partial-repair probe 311577471157747Passed
normal control 400Passed
normal control 500Passed
normal control 600Passed
normal control 700Passed

SHA-256 / b90fe5cc9125bc1992fc792f0dda608f0bbf3a46bcab25b3fd95ad5e65af1857

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:33.822294+00:00.

Case digest / 9e891c79467b8dc706d5bfcb380cd3db4d9ba420251458aae02ee8c79272eb99