D2=blocks/(days+days*3)
D2=D1/4
Maximum possible is handled here:
https://github.com/bitcoin/bitcoin/blob/1b046603b30ebfab6199a2f92015d507b248b590/src/pow.cpp#L58
if (nActualTimespan > params.nPowTargetTimespan*4)
nActualTimespan = params.nPowTargetTimespan*4;
Since target timesapan is 14 days, if actual timespan is greater than:
14 days * 4 = 56 days
Then actual timespan is adjusted and set equal to
14 days * 4 = 56 days
Difficulty retarget is then calculated here:
https://github.com/bitcoin/bitcoin/blob/1b046603b30ebfab6199a2f92015d507b248b590/src/pow.cpp#L65
bnNew.SetCompact(pindexLast->nBits);
bnNew *= nActualTimespan;
bnNew /= params.nPowTargetTimespan;
So...
Start with existing difficulty X
X
Multiply by actual timespan (maximum 56 days)
56 * X = 56X
divide by target timespan (14 days)
56X / 14 = 4X
result is 4X difficulty fall at 56 or more days.