if ((obj = m_pNNFilter) != null)
nA = ((NNFilter) (obj)).Decompress(nA);
// stage 1: multiple predictors (order 2 and offset 1)
int indexA = ((RollBufferFastInt) (obj = m_rbPredictionA)).index;
RollBufferFastInt predictB;
int indexB = (predictB = m_rbPredictionB).index;
int ai[];
int l;
(ai = ((RollBufferFastInt) (obj)).m_pData)[indexA] = l = m_nLastValueA;
int l1 = indexA - 1;
ai[l1] = l - ai[l1];
int ai3[] = predictB.m_pData;
ai3[indexB] = nB - ((scaledFilterBLV * 31) >> 5);
scaledFilterBLV = nB;
// ai3[indexB] = m_Stage1FilterB.Compress(nB);
int k2 = indexB - 1;
ai3[k2] = ai3[indexB] - ai3[k2];
int ai2[];
int ai4[];
int nPredictionA = (l * (ai2 = m_aryMA)[0]) + (ai[l1] * ai2[1]) + (ai[indexA - 2] * ai2[2]) + (ai[indexA - 3] * ai2[3]);
int nPredictionB = (ai3[indexB] * (ai4 = m_aryMB)[0]) + (ai3[k2] * ai4[1]) + (ai3[indexB - 2] * ai4[2]) + (ai3[indexB - 3] * ai4[3]) + (ai3[indexB - 4] * ai4[4]);
int nCurrentA = nA + ((nPredictionA + (nPredictionB >> 1)) >> 10);
RollBufferFastInt adaptA;
RollBufferFastInt adaptB;
int indexAA = (adaptA = m_rbAdaptA).index;
int indexAB = (adaptB = m_rbAdaptB).index;
int ai1[];
(ai1 = m_rbAdaptA.m_pData)[indexAA] = (l != 0) ? ((l >> 30) & 2) - 1 : 0;
ai1[indexAA - 1] = (ai[l1] != 0) ? ((ai[l1] >> 30) & 2) - 1 : 0;