/*
 * Copyright (c) 2016, Alliance for Open Media. All rights reserved
 *
 * This source code is subject to the terms of the BSD 2 Clause License and
 * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
 * was not distributed with this source code in the LICENSE file, you can
 * obtain it at www.aomedia.org/license/software. If the Alliance for Open
 * Media Patent License 1.0 was not distributed with this source code in the
 * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
 */

#include <assert.h>
#include <math.h>
#include <stdio.h>

#include "config/av1_rtcd.h"

#include "aom_dsp/aom_dsp_common.h"
#include "aom_mem/aom_mem.h"
#include "aom_ports/bitops.h"
#include "aom_ports/mem.h"
#include "aom_ports/system_state.h"

#include "av1/common/common.h"
#include "av1/common/entropy.h"
#include "av1/common/entropymode.h"
#include "av1/common/mvref_common.h"
#include "av1/common/pred_common.h"
#include "av1/common/quant_common.h"
#include "av1/common/reconinter.h"
#include "av1/common/reconintra.h"
#include "av1/common/seg_common.h"

#include "av1/encoder/av1_quantize.h"
#include "av1/encoder/cost.h"
#include "av1/encoder/encodemb.h"
#include "av1/encoder/encodemv.h"
#include "av1/encoder/encoder.h"
#include "av1/encoder/encodetxb.h"
#include "av1/encoder/mcomp.h"
#include "av1/encoder/ratectrl.h"
#include "av1/encoder/rd.h"
#include "av1/encoder/tokenize.h"

#define RD_THRESH_POW 1.25

// The baseline rd thresholds for breaking out of the rd loop for
// certain modes are assumed to be based on 8x8 blocks.
// This table is used to correct for block size.
// The factors here are << 2 (2 = x0.5, 32 = x8 etc).
static const uint8_t rd_thresh_block_size_factor[BLOCK_SIZES_ALL] = {
  2, 3, 3, 4, 6, 6, 8, 12, 12, 16, 24, 24, 32, 48, 48, 64, 4, 4, 8, 8, 16, 16
};

static const int use_intra_ext_tx_for_txsize[EXT_TX_SETS_INTRA][EXT_TX_SIZES] =
    {
      { 1, 1, 1, 1 },  // unused
      { 1, 1, 0, 0 },
      { 0, 0, 1, 0 },
    };

static const int use_inter_ext_tx_for_txsize[EXT_TX_SETS_INTER][EXT_TX_SIZES] =
    {
      { 1, 1, 1, 1 },  // unused
      { 1, 1, 0, 0 },
      { 0, 0, 1, 0 },
      { 0, 0, 0, 1 },
    };

static const int av1_ext_tx_set_idx_to_type[2][AOMMAX(EXT_TX_SETS_INTRA,
                                                      EXT_TX_SETS_INTER)] = {
  {
      // Intra
      EXT_TX_SET_DCTONLY,
      EXT_TX_SET_DTT4_IDTX_1DDCT,
      EXT_TX_SET_DTT4_IDTX,
  },
  {
      // Inter
      EXT_TX_SET_DCTONLY,
      EXT_TX_SET_ALL16,
      EXT_TX_SET_DTT9_IDTX_1DDCT,
      EXT_TX_SET_DCT_IDTX,
  },
};

void av1_fill_mode_rates(AV1_COMMON *const cm, MACROBLOCK *x,
                         FRAME_CONTEXT *fc) {
  int i, j;

  for (i = 0; i < PARTITION_CONTEXTS; ++i)
    av1_cost_tokens_from_cdf(x->partition_cost[i], fc->partition_cdf[i], NULL);

  if (cm->current_frame.skip_mode_info.skip_mode_flag) {
    for (i = 0; i < SKIP_CONTEXTS; ++i) {
      av1_cost_tokens_from_cdf(x->skip_mode_cost[i], fc->skip_mode_cdfs[i],
                               NULL);
    }
  }

  for (i = 0; i < SKIP_CONTEXTS; ++i) {
    av1_cost_tokens_from_cdf(x->skip_cost[i], fc->skip_cdfs[i], NULL);
  }

  for (i = 0; i < KF_MODE_CONTEXTS; ++i)
    for (j = 0; j < KF_MODE_CONTEXTS; ++j)
      av1_cost_tokens_from_cdf(x->y_mode_costs[i][j], fc->kf_y_cdf[i][j], NULL);

  for (i = 0; i < BLOCK_SIZE_GROUPS; ++i)
    av1_cost_tokens_from_cdf(x->mbmode_cost[i], fc->y_mode_cdf[i], NULL);
  for (i = 0; i < CFL_ALLOWED_TYPES; ++i)
    for (j = 0; j < INTRA_MODES; ++j)
      av1_cost_tokens_from_cdf(x->intra_uv_mode_cost[i][j],
                               fc->uv_mode_cdf[i][j], NULL);

  av1_cost_tokens_from_cdf(x->filter_intra_mode_cost, fc->filter_intra_mode_cdf,
                           NULL);
  for (i = 0; i < BLOCK_SIZES_ALL; ++i) {
    if (av1_filter_intra_allowed_bsize(cm, i))
      av1_cost_tokens_from_cdf(x->filter_intra_cost[i],
                               fc->filter_intra_cdfs[i], NULL);
  }

  for (i = 0; i < SWITCHABLE_FILTER_CONTEXTS; ++i)
    av1_cost_tokens_from_cdf(x->switchable_interp_costs[i],
                             fc->switchable_interp_cdf[i], NULL);

  for (i = 0; i < PALATTE_BSIZE_CTXS; ++i) {
    av1_cost_tokens_from_cdf(x->palette_y_size_cost[i],
                             fc->palette_y_size_cdf[i], NULL);
    av1_cost_tokens_from_cdf(x->palette_uv_size_cost[i],
                             fc->palette_uv_size_cdf[i], NULL);
    for (j = 0; j < PALETTE_Y_MODE_CONTEXTS; ++j) {
      av1_cost_tokens_from_cdf(x->palette_y_mode_cost[i][j],
                               fc->palette_y_mode_cdf[i][j], NULL);
    }
  }

  for (i = 0; i < PALETTE_UV_MODE_CONTEXTS; ++i) {
    av1_cost_tokens_from_cdf(x->palette_uv_mode_cost[i],
                             fc->palette_uv_mode_cdf[i], NULL);
  }

  for (i = 0; i < PALETTE_SIZES; ++i) {
    for (j = 0; j < PALETTE_COLOR_INDEX_CONTEXTS; ++j) {
      av1_cost_tokens_from_cdf(x->palette_y_color_cost[i][j],
                               fc->palette_y_color_index_cdf[i][j], NULL);
      av1_cost_tokens_from_cdf(x->palette_uv_color_cost[i][j],
                               fc->palette_uv_color_index_cdf[i][j], NULL);
    }
  }

  int sign_cost[CFL_JOINT_SIGNS];
  av1_cost_tokens_from_cdf(sign_cost, fc->cfl_sign_cdf, NULL);
  for (int joint_sign = 0; joint_sign < CFL_JOINT_SIGNS; joint_sign++) {
    int *cost_u = x->cfl_cost[joint_sign][CFL_PRED_U];
    int *cost_v = x->cfl_cost[joint_sign][CFL_PRED_V];
    if (CFL_SIGN_U(joint_sign) == CFL_SIGN_ZERO) {
      memset(cost_u, 0, CFL_ALPHABET_SIZE * sizeof(*cost_u));
    } else {
      const aom_cdf_prob *cdf_u = fc->cfl_alpha_cdf[CFL_CONTEXT_U(joint_sign)];
      av1_cost_tokens_from_cdf(cost_u, cdf_u, NULL);
    }
    if (CFL_SIGN_V(joint_sign) == CFL_SIGN_ZERO) {
      memset(cost_v, 0, CFL_ALPHABET_SIZE * sizeof(*cost_v));
    } else {
      const aom_cdf_prob *cdf_v = fc->cfl_alpha_cdf[CFL_CONTEXT_V(joint_sign)];
      av1_cost_tokens_from_cdf(cost_v, cdf_v, NULL);
    }
    for (int u = 0; u < CFL_ALPHABET_SIZE; u++)
      cost_u[u] += sign_cost[joint_sign];
  }

  for (i = 0; i < MAX_TX_CATS; ++i)
    for (j = 0; j < TX_SIZE_CONTEXTS; ++j)
      av1_cost_tokens_from_cdf(x->tx_size_cost[i][j], fc->tx_size_cdf[i][j],
                               NULL);

  for (i = 0; i < TXFM_PARTITION_CONTEXTS; ++i) {
    av1_cost_tokens_from_cdf(x->txfm_partition_cost[i],
                             fc->txfm_partition_cdf[i], NULL);
  }

  for (i = TX_4X4; i < EXT_TX_SIZES; ++i) {
    int s;
    for (s = 1; s < EXT_TX_SETS_INTER; ++s) {
      if (use_inter_ext_tx_for_txsize[s][i]) {
        av1_cost_tokens_from_cdf(
            x->inter_tx_type_costs[s][i], fc->inter_ext_tx_cdf[s][i],
            av1_ext_tx_inv[av1_ext_tx_set_idx_to_type[1][s]]);
      }
    }
    for (s = 1; s < EXT_TX_SETS_INTRA; ++s) {
      if (use_intra_ext_tx_for_txsize[s][i]) {
        for (j = 0; j < INTRA_MODES; ++j) {
          av1_cost_tokens_from_cdf(
              x->intra_tx_type_costs[s][i][j], fc->intra_ext_tx_cdf[s][i][j],
              av1_ext_tx_inv[av1_ext_tx_set_idx_to_type[0][s]]);
        }
      }
    }
  }
  for (i = 0; i < DIRECTIONAL_MODES; ++i) {
    av1_cost_tokens_from_cdf(x->angle_delta_cost[i], fc->angle_delta_cdf[i],
                             NULL);
  }
  av1_cost_tokens_from_cdf(x->switchable_restore_cost,
                           fc->switchable_restore_cdf, NULL);
  av1_cost_tokens_from_cdf(x->wiener_restore_cost, fc->wiener_restore_cdf,
                           NULL);
  av1_cost_tokens_from_cdf(x->sgrproj_restore_cost, fc->sgrproj_restore_cdf,
                           NULL);
  av1_cost_tokens_from_cdf(x->intrabc_cost, fc->intrabc_cdf, NULL);

  if (!frame_is_intra_only(cm)) {
    for (i = 0; i < COMP_INTER_CONTEXTS; ++i) {
      av1_cost_tokens_from_cdf(x->comp_inter_cost[i], fc->comp_inter_cdf[i],
                               NULL);
    }

    for (i = 0; i < REF_CONTEXTS; ++i) {
      for (j = 0; j < SINGLE_REFS - 1; ++j) {
        av1_cost_tokens_from_cdf(x->single_ref_cost[i][j],
                                 fc->single_ref_cdf[i][j], NULL);
      }
    }

    for (i = 0; i < COMP_REF_TYPE_CONTEXTS; ++i) {
      av1_cost_tokens_from_cdf(x->comp_ref_type_cost[i],
                               fc->comp_ref_type_cdf[i], NULL);
    }

    for (i = 0; i < UNI_COMP_REF_CONTEXTS; ++i) {
      for (j = 0; j < UNIDIR_COMP_REFS - 1; ++j) {
        av1_cost_tokens_from_cdf(x->uni_comp_ref_cost[i][j],
                                 fc->uni_comp_ref_cdf[i][j], NULL);
      }
    }

    for (i = 0; i < REF_CONTEXTS; ++i) {
      for (j = 0; j < FWD_REFS - 1; ++j) {
        av1_cost_tokens_from_cdf(x->comp_ref_cost[i][j], fc->comp_ref_cdf[i][j],
                                 NULL);
      }
    }

    for (i = 0; i < REF_CONTEXTS; ++i) {
      for (j = 0; j < BWD_REFS - 1; ++j) {
        av1_cost_tokens_from_cdf(x->comp_bwdref_cost[i][j],
                                 fc->comp_bwdref_cdf[i][j], NULL);
      }
    }

    for (i = 0; i < INTRA_INTER_CONTEXTS; ++i) {
      av1_cost_tokens_from_cdf(x->intra_inter_cost[i], fc->intra_inter_cdf[i],
                               NULL);
    }

    for (i = 0; i < NEWMV_MODE_CONTEXTS; ++i) {
      av1_cost_tokens_from_cdf(x->newmv_mode_cost[i], fc->newmv_cdf[i], NULL);
    }

    for (i = 0; i < GLOBALMV_MODE_CONTEXTS; ++i) {
      av1_cost_tokens_from_cdf(x->zeromv_mode_cost[i], fc->zeromv_cdf[i], NULL);
    }

    for (i = 0; i < REFMV_MODE_CONTEXTS; ++i) {
      av1_cost_tokens_from_cdf(x->refmv_mode_cost[i], fc->refmv_cdf[i], NULL);
    }

    for (i = 0; i < DRL_MODE_CONTEXTS; ++i) {
      av1_cost_tokens_from_cdf(x->drl_mode_cost0[i], fc->drl_cdf[i], NULL);
    }
    for (i = 0; i < INTER_MODE_CONTEXTS; ++i)
      av1_cost_tokens_from_cdf(x->inter_compound_mode_cost[i],
                               fc->inter_compound_mode_cdf[i], NULL);
    for (i = 0; i < BLOCK_SIZES_ALL; ++i)
      av1_cost_tokens_from_cdf(x->compound_type_cost[i],
                               fc->compound_type_cdf[i], NULL);
    for (i = 0; i < BLOCK_SIZES_ALL; ++i) {
      if (get_interinter_wedge_bits(i)) {
        av1_cost_tokens_from_cdf(x->wedge_idx_cost[i], fc->wedge_idx_cdf[i],
                                 NULL);
      }
    }
    for (i = 0; i < BLOCK_SIZE_GROUPS; ++i) {
      av1_cost_tokens_from_cdf(x->interintra_cost[i], fc->interintra_cdf[i],
                               NULL);
      av1_cost_tokens_from_cdf(x->interintra_mode_cost[i],
                               fc->interintra_mode_cdf[i], NULL);
    }
    for (i = 0; i < BLOCK_SIZES_ALL; ++i) {
      av1_cost_tokens_from_cdf(x->wedge_interintra_cost[i],
                               fc->wedge_interintra_cdf[i], NULL);
    }
    for (i = BLOCK_8X8; i < BLOCK_SIZES_ALL; i++) {
      av1_cost_tokens_from_cdf(x->motion_mode_cost[i], fc->motion_mode_cdf[i],
                               NULL);
    }
    for (i = BLOCK_8X8; i < BLOCK_SIZES_ALL; i++) {
      av1_cost_tokens_from_cdf(x->motion_mode_cost1[i], fc->obmc_cdf[i], NULL);
    }
    for (i = 0; i < COMP_INDEX_CONTEXTS; ++i) {
      av1_cost_tokens_from_cdf(x->comp_idx_cost[i], fc->compound_index_cdf[i],
                               NULL);
    }
    for (i = 0; i < COMP_GROUP_IDX_CONTEXTS; ++i) {
      av1_cost_tokens_from_cdf(x->comp_group_idx_cost[i],
                               fc->comp_group_idx_cdf[i], NULL);
    }
  }
}

// Values are now correlated to quantizer.
static int sad_per_bit16lut_8[QINDEX_RANGE];
static int sad_per_bit4lut_8[QINDEX_RANGE];
static int sad_per_bit16lut_10[QINDEX_RANGE];
static int sad_per_bit4lut_10[QINDEX_RANGE];
static int sad_per_bit16lut_12[QINDEX_RANGE];
static int sad_per_bit4lut_12[QINDEX_RANGE];

static void init_me_luts_bd(int *bit16lut, int *bit4lut, int range,
                            aom_bit_depth_t bit_depth) {
  int i;
  // Initialize the sad lut tables using a formulaic calculation for now.
  // This is to make it easier to resolve the impact of experimental changes
  // to the quantizer tables.
  for (i = 0; i < range; i++) {
    const double q = av1_convert_qindex_to_q(i, bit_depth);
    bit16lut[i] = (int)(0.0418 * q + 2.4107);
    bit4lut[i] = (int)(0.063 * q + 2.742);
  }
}

void av1_init_me_luts(void) {
  init_me_luts_bd(sad_per_bit16lut_8, sad_per_bit4lut_8, QINDEX_RANGE,
                  AOM_BITS_8);
  init_me_luts_bd(sad_per_bit16lut_10, sad_per_bit4lut_10, QINDEX_RANGE,
                  AOM_BITS_10);
  init_me_luts_bd(sad_per_bit16lut_12, sad_per_bit4lut_12, QINDEX_RANGE,
                  AOM_BITS_12);
}

static const int rd_boost_factor[16] = { 64, 32, 32, 32, 24, 16, 12, 12,
                                         8,  8,  4,  4,  2,  2,  1,  0 };
static const int rd_frame_type_factor[FRAME_UPDATE_TYPES] = {
  128, 144, 128, 128, 144,
  // TODO(zoeliu): To adjust further following factor values.
  128, 128, 128,
  // TODO(weitinglin): We should investigate if the values should be the same
  //                   as the value used by OVERLAY frame
  144,  // INTNL_OVERLAY_UPDATE
  128   // INTNL_ARF_UPDATE
};

int av1_compute_rd_mult_based_on_qindex(const AV1_COMP *cpi, int qindex) {
  const int q = av1_dc_quant_Q3(qindex, 0, cpi->common.seq_params.bit_depth);
  int rdmult = q * q;
  rdmult = rdmult * 3 + (rdmult * 2 / 3);
  switch (cpi->common.seq_params.bit_depth) {
    case AOM_BITS_8: break;
    case AOM_BITS_10: rdmult = ROUND_POWER_OF_TWO(rdmult, 4); break;
    case AOM_BITS_12: rdmult = ROUND_POWER_OF_TWO(rdmult, 8); break;
    default:
      assert(0 && "bit_depth should be AOM_BITS_8, AOM_BITS_10 or AOM_BITS_12");
      return -1;
  }
  return rdmult > 0 ? rdmult : 1;
}

int av1_compute_rd_mult(const AV1_COMP *cpi, int qindex) {
  int64_t rdmult = av1_compute_rd_mult_based_on_qindex(cpi, qindex);
  if (cpi->oxcf.pass == 2 &&
      (cpi->common.current_frame.frame_type != KEY_FRAME)) {
    const GF_GROUP *const gf_group = &cpi->twopass.gf_group;
    const FRAME_UPDATE_TYPE frame_type = gf_group->update_type[gf_group->index];
    const int boost_index = AOMMIN(15, (cpi->rc.gfu_boost / 100));

    rdmult = (rdmult * rd_frame_type_factor[frame_type]) >> 7;
    rdmult += ((rdmult * rd_boost_factor[boost_index]) >> 7);
  }
  return (int)rdmult;
}

int av1_get_adaptive_rdmult(const AV1_COMP *cpi, double beta) {
  const AV1_COMMON *cm = &cpi->common;
  int64_t q =
      av1_dc_quant_Q3(cm->base_qindex, 0, cpi->common.seq_params.bit_depth);
  int64_t rdmult = 0;

  switch (cpi->common.seq_params.bit_depth) {
    case AOM_BITS_8: rdmult = (int)((88 * q * q / beta) / 24); break;
    case AOM_BITS_10:
      rdmult = ROUND_POWER_OF_TWO((int)((88 * q * q / beta) / 24), 4);
      break;
    default:
      assert(cpi->common.seq_params.bit_depth == AOM_BITS_12);
      rdmult = ROUND_POWER_OF_TWO((int)((88 * q * q / beta) / 24), 8);
      break;
  }

  if (cpi->oxcf.pass == 2 &&
      (cpi->common.current_frame.frame_type != KEY_FRAME)) {
    const GF_GROUP *const gf_group = &cpi->twopass.gf_group;
    const FRAME_UPDATE_TYPE frame_type = gf_group->update_type[gf_group->index];
    const int boost_index = AOMMIN(15, (cpi->rc.gfu_boost / 100));

    rdmult = (rdmult * rd_frame_type_factor[frame_type]) >> 7;
    rdmult += ((rdmult * rd_boost_factor[boost_index]) >> 7);
  }
  if (rdmult < 1) rdmult = 1;
  return (int)rdmult;
}

static int compute_rd_thresh_factor(int qindex, aom_bit_depth_t bit_depth) {
  double q;
  switch (bit_depth) {
    case AOM_BITS_8: q = av1_dc_quant_Q3(qindex, 0, AOM_BITS_8) / 4.0; break;
    case AOM_BITS_10: q = av1_dc_quant_Q3(qindex, 0, AOM_BITS_10) / 16.0; break;
    case AOM_BITS_12: q = av1_dc_quant_Q3(qindex, 0, AOM_BITS_12) / 64.0; break;
    default:
      assert(0 && "bit_depth should be AOM_BITS_8, AOM_BITS_10 or AOM_BITS_12");
      return -1;
  }
  // TODO(debargha): Adjust the function below.
  return AOMMAX((int)(pow(q, RD_THRESH_POW) * 5.12), 8);
}

void av1_initialize_me_consts(const AV1_COMP *cpi, MACROBLOCK *x, int qindex) {
  switch (cpi->common.seq_params.bit_depth) {
    case AOM_BITS_8:
      x->sadperbit16 = sad_per_bit16lut_8[qindex];
      x->sadperbit4 = sad_per_bit4lut_8[qindex];
      break;
    case AOM_BITS_10:
      x->sadperbit16 = sad_per_bit16lut_10[qindex];
      x->sadperbit4 = sad_per_bit4lut_10[qindex];
      break;
    case AOM_BITS_12:
      x->sadperbit16 = sad_per_bit16lut_12[qindex];
      x->sadperbit4 = sad_per_bit4lut_12[qindex];
      break;
    default:
      assert(0 && "bit_depth should be AOM_BITS_8, AOM_BITS_10 or AOM_BITS_12");
  }
}

static void set_block_thresholds(const AV1_COMMON *cm, RD_OPT *rd) {
  int i, bsize, segment_id;

  for (segment_id = 0; segment_id < MAX_SEGMENTS; ++segment_id) {
    const int qindex =
        clamp(av1_get_qindex(&cm->seg, segment_id, cm->base_qindex) +
                  cm->y_dc_delta_q,
              0, MAXQ);
    const int q = compute_rd_thresh_factor(qindex, cm->seq_params.bit_depth);

    for (bsize = 0; bsize < BLOCK_SIZES_ALL; ++bsize) {
      // Threshold here seems unnecessarily harsh but fine given actual
      // range of values used for cpi->sf.thresh_mult[].
      const int t = q * rd_thresh_block_size_factor[bsize];
      const int thresh_max = INT_MAX / t;

      for (i = 0; i < MAX_MODES; ++i)
        rd->threshes[segment_id][bsize][i] = rd->thresh_mult[i] < thresh_max
                                                 ? rd->thresh_mult[i] * t / 4
                                                 : INT_MAX;
    }
  }
}

void av1_fill_coeff_costs(MACROBLOCK *x, FRAME_CONTEXT *fc,
                          const int num_planes) {
  const int nplanes = AOMMIN(num_planes, PLANE_TYPES);
  for (int eob_multi_size = 0; eob_multi_size < 7; ++eob_multi_size) {
    for (int plane = 0; plane < nplanes; ++plane) {
      LV_MAP_EOB_COST *pcost = &x->eob_costs[eob_multi_size][plane];

      for (int ctx = 0; ctx < 2; ++ctx) {
        aom_cdf_prob *pcdf;
        switch (eob_multi_size) {
          case 0: pcdf = fc->eob_flag_cdf16[plane][ctx]; break;
          case 1: pcdf = fc->eob_flag_cdf32[plane][ctx]; break;
          case 2: pcdf = fc->eob_flag_cdf64[plane][ctx]; break;
          case 3: pcdf = fc->eob_flag_cdf128[plane][ctx]; break;
          case 4: pcdf = fc->eob_flag_cdf256[plane][ctx]; break;
          case 5: pcdf = fc->eob_flag_cdf512[plane][ctx]; break;
          case 6:
          default: pcdf = fc->eob_flag_cdf1024[plane][ctx]; break;
        }
        av1_cost_tokens_from_cdf(pcost->eob_cost[ctx], pcdf, NULL);
      }
    }
  }
  for (int tx_size = 0; tx_size < TX_SIZES; ++tx_size) {
    for (int plane = 0; plane < nplanes; ++plane) {
      LV_MAP_COEFF_COST *pcost = &x->coeff_costs[tx_size][plane];

      for (int ctx = 0; ctx < TXB_SKIP_CONTEXTS; ++ctx)
        av1_cost_tokens_from_cdf(pcost->txb_skip_cost[ctx],
                                 fc->txb_skip_cdf[tx_size][ctx], NULL);

      for (int ctx = 0; ctx < SIG_COEF_CONTEXTS_EOB; ++ctx)
        av1_cost_tokens_from_cdf(pcost->base_eob_cost[ctx],
                                 fc->coeff_base_eob_cdf[tx_size][plane][ctx],
                                 NULL);
      for (int ctx = 0; ctx < SIG_COEF_CONTEXTS; ++ctx)
        av1_cost_tokens_from_cdf(pcost->base_cost[ctx],
                                 fc->coeff_base_cdf[tx_size][plane][ctx], NULL);

      for (int ctx = 0; ctx < SIG_COEF_CONTEXTS; ++ctx) {
        pcost->base_cost[ctx][4] = 0;
        pcost->base_cost[ctx][5] = pcost->base_cost[ctx][1] +
                                   av1_cost_literal(1) -
                                   pcost->base_cost[ctx][0];
        pcost->base_cost[ctx][6] =
            pcost->base_cost[ctx][2] - pcost->base_cost[ctx][1];
        pcost->base_cost[ctx][7] =
            pcost->base_cost[ctx][3] - pcost->base_cost[ctx][2];
      }

      for (int ctx = 0; ctx < EOB_COEF_CONTEXTS; ++ctx)
        av1_cost_tokens_from_cdf(pcost->eob_extra_cost[ctx],
                                 fc->eob_extra_cdf[tx_size][plane][ctx], NULL);

      for (int ctx = 0; ctx < DC_SIGN_CONTEXTS; ++ctx)
        av1_cost_tokens_from_cdf(pcost->dc_sign_cost[ctx],
                                 fc->dc_sign_cdf[plane][ctx], NULL);

      for (int ctx = 0; ctx < LEVEL_CONTEXTS; ++ctx) {
        int br_rate[BR_CDF_SIZE];
        int prev_cost = 0;
        int i, j;
        av1_cost_tokens_from_cdf(br_rate, fc->coeff_br_cdf[tx_size][plane][ctx],
                                 NULL);
        // printf("br_rate: ");
        // for(j = 0; j < BR_CDF_SIZE; j++)
        //  printf("%4d ", br_rate[j]);
        // printf("\n");
        for (i = 0; i < COEFF_BASE_RANGE; i += BR_CDF_SIZE - 1) {
          for (j = 0; j < BR_CDF_SIZE - 1; j++) {
            pcost->lps_cost[ctx][i + j] = prev_cost + br_rate[j];
          }
          prev_cost += br_rate[j];
        }
        pcost->lps_cost[ctx][i] = prev_cost;
        // printf("lps_cost: %d %d %2d : ", tx_size, plane, ctx);
        // for (i = 0; i <= COEFF_BASE_RANGE; i++)
        //  printf("%5d ", pcost->lps_cost[ctx][i]);
        // printf("\n");
      }
      for (int ctx = 0; ctx < LEVEL_CONTEXTS; ++ctx) {
        pcost->lps_cost[ctx][0 + COEFF_BASE_RANGE + 1] =
            pcost->lps_cost[ctx][0];
        for (int i = 1; i <= COEFF_BASE_RANGE; ++i) {
          pcost->lps_cost[ctx][i + COEFF_BASE_RANGE + 1] =
              pcost->lps_cost[ctx][i] - pcost->lps_cost[ctx][i - 1];
        }
      }
    }
  }
}

void av1_initialize_cost_tables(const AV1_COMMON *const cm, MACROBLOCK *x) {
  if (cm->cur_frame_force_integer_mv) {
    av1_build_nmv_cost_table(x->nmv_vec_cost, x->nmvcost, &cm->fc->nmvc,
                             MV_SUBPEL_NONE);
  } else {
    av1_build_nmv_cost_table(
        x->nmv_vec_cost,
        cm->allow_high_precision_mv ? x->nmvcost_hp : x->nmvcost, &cm->fc->nmvc,
        cm->allow_high_precision_mv);
  }
}

void av1_initialize_rd_consts(AV1_COMP *cpi) {
  AV1_COMMON *const cm = &cpi->common;
  MACROBLOCK *const x = &cpi->td.mb;
  RD_OPT *const rd = &cpi->rd;

  aom_clear_system_state();

  rd->RDMULT = av1_compute_rd_mult(cpi, cm->base_qindex + cm->y_dc_delta_q);

  set_error_per_bit(x, rd->RDMULT);

  set_block_thresholds(cm, rd);

  av1_initialize_cost_tables(cm, x);

  if (frame_is_intra_only(cm) && cm->allow_screen_content_tools &&
      cpi->oxcf.pass != 1) {
    int *dvcost[2] = { &cpi->dv_cost[0][MV_MAX], &cpi->dv_cost[1][MV_MAX] };
    av1_build_nmv_cost_table(cpi->dv_joint_cost, dvcost, &cm->fc->ndvc,
                             MV_SUBPEL_NONE);
  }

  if (cpi->oxcf.pass != 1) {
    for (int i = 0; i < TRANS_TYPES; ++i)
      // IDENTITY: 1 bit
      // TRANSLATION: 3 bits
      // ROTZOOM: 2 bits
      // AFFINE: 3 bits
      cpi->gmtype_cost[i] = (1 + (i > 0 ? (i == ROTZOOM ? 1 : 2) : 0))
                            << AV1_PROB_COST_SHIFT;
  }
}

static void model_rd_norm(int xsq_q10, int *r_q10, int *d_q10) {
  // NOTE: The tables below must be of the same size.

  // The functions described below are sampled at the four most significant
  // bits of x^2 + 8 / 256.

  // Normalized rate:
  // This table models the rate for a Laplacian source with given variance
  // when quantized with a uniform quantizer with given stepsize. The
  // closed form expression is:
  // Rn(x) = H(sqrt(r)) + sqrt(r)*[1 + H(r)/(1 - r)],
  // where r = exp(-sqrt(2) * x) and x = qpstep / sqrt(variance),
  // and H(x) is the binary entropy function.
  static const int rate_tab_q10[] = {
    65536, 6086, 5574, 5275, 5063, 4899, 4764, 4651, 4553, 4389, 4255, 4142,
    4044,  3958, 3881, 3811, 3748, 3635, 3538, 3453, 3376, 3307, 3244, 3186,
    3133,  3037, 2952, 2877, 2809, 2747, 2690, 2638, 2589, 2501, 2423, 2353,
    2290,  2232, 2179, 2130, 2084, 2001, 1928, 1862, 1802, 1748, 1698, 1651,
    1608,  1530, 1460, 1398, 1342, 1290, 1243, 1199, 1159, 1086, 1021, 963,
    911,   864,  821,  781,  745,  680,  623,  574,  530,  490,  455,  424,
    395,   345,  304,  269,  239,  213,  190,  171,  154,  126,  104,  87,
    73,    61,   52,   44,   38,   28,   21,   16,   12,   10,   8,    6,
    5,     3,    2,    1,    1,    1,    0,    0,
  };
  // Normalized distortion:
  // This table models the normalized distortion for a Laplacian source
  // with given variance when quantized with a uniform quantizer
  // with given stepsize. The closed form expression is:
  // Dn(x) = 1 - 1/sqrt(2) * x / sinh(x/sqrt(2))
  // where x = qpstep / sqrt(variance).
  // Note the actual distortion is Dn * variance.
  static const int dist_tab_q10[] = {
    0,    0,    1,    1,    1,    2,    2,    2,    3,    3,    4,    5,
    5,    6,    7,    7,    8,    9,    11,   12,   13,   15,   16,   17,
    18,   21,   24,   26,   29,   31,   34,   36,   39,   44,   49,   54,
    59,   64,   69,   73,   78,   88,   97,   106,  115,  124,  133,  142,
    151,  167,  184,  200,  215,  231,  245,  260,  274,  301,  327,  351,
    375,  397,  418,  439,  458,  495,  528,  559,  587,  613,  637,  659,
    680,  717,  749,  777,  801,  823,  842,  859,  874,  899,  919,  936,
    949,  960,  969,  977,  983,  994,  1001, 1006, 1010, 1013, 1015, 1017,
    1018, 1020, 1022, 1022, 1023, 1023, 1023, 1024,
  };
  static const int xsq_iq_q10[] = {
    0,      4,      8,      12,     16,     20,     24,     28,     32,
    40,     48,     56,     64,     72,     80,     88,     96,     112,
    128,    144,    160,    176,    192,    208,    224,    256,    288,
    320,    352,    384,    416,    448,    480,    544,    608,    672,
    736,    800,    864,    928,    992,    1120,   1248,   1376,   1504,
    1632,   1760,   1888,   2016,   2272,   2528,   2784,   3040,   3296,
    3552,   3808,   4064,   4576,   5088,   5600,   6112,   6624,   7136,
    7648,   8160,   9184,   10208,  11232,  12256,  13280,  14304,  15328,
    16352,  18400,  20448,  22496,  24544,  26592,  28640,  30688,  32736,
    36832,  40928,  45024,  49120,  53216,  57312,  61408,  65504,  73696,
    81888,  90080,  98272,  106464, 114656, 122848, 131040, 147424, 163808,
    180192, 196576, 212960, 229344, 245728,
  };
  const int tmp = (xsq_q10 >> 2) + 8;
  const int k = get_msb(tmp) - 3;
  const int xq = (k << 3) + ((tmp >> k) & 0x7);
  const int one_q10 = 1 << 10;
  const int a_q10 = ((xsq_q10 - xsq_iq_q10[xq]) << 10) >> (2 + k);
  const int b_q10 = one_q10 - a_q10;
  *r_q10 = (rate_tab_q10[xq] * b_q10 + rate_tab_q10[xq + 1] * a_q10) >> 10;
  *d_q10 = (dist_tab_q10[xq] * b_q10 + dist_tab_q10[xq + 1] * a_q10) >> 10;
}

void av1_model_rd_from_var_lapndz(int64_t var, unsigned int n_log2,
                                  unsigned int qstep, int *rate,
                                  int64_t *dist) {
  // This function models the rate and distortion for a Laplacian
  // source with given variance when quantized with a uniform quantizer
  // with given stepsize. The closed form expressions are in:
  // Hang and Chen, "Source Model for transform video coder and its
  // application - Part I: Fundamental Theory", IEEE Trans. Circ.
  // Sys. for Video Tech., April 1997.
  if (var == 0) {
    *rate = 0;
    *dist = 0;
  } else {
    int d_q10, r_q10;
    static const uint32_t MAX_XSQ_Q10 = 245727;
    const uint64_t xsq_q10_64 =
        (((uint64_t)qstep * qstep << (n_log2 + 10)) + (var >> 1)) / var;
    const int xsq_q10 = (int)AOMMIN(xsq_q10_64, MAX_XSQ_Q10);
    model_rd_norm(xsq_q10, &r_q10, &d_q10);
    *rate = ROUND_POWER_OF_TWO(r_q10 << n_log2, 10 - AV1_PROB_COST_SHIFT);
    *dist = (var * (int64_t)d_q10 + 512) >> 10;
  }
}

static double interp_cubic(const double *p, double x) {
  return p[1] + 0.5 * x *
                    (p[2] - p[0] +
                     x * (2.0 * p[0] - 5.0 * p[1] + 4.0 * p[2] - p[3] +
                          x * (3.0 * (p[1] - p[2]) + p[3] - p[0])));
}

static double interp_bicubic(const double *p, int p_stride, double x,
                             double y) {
  double q[4];
  q[0] = interp_cubic(p, x);
  q[1] = interp_cubic(p + p_stride, x);
  q[2] = interp_cubic(p + 2 * p_stride, x);
  q[3] = interp_cubic(p + 3 * p_stride, x);
  return interp_cubic(q, y);
}

static const uint8_t bsize_model_cat_lookup[BLOCK_SIZES_ALL] = {
  0, 0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 3, 0, 0, 1, 1, 2, 2
};

static int sse_norm_model_cat_lookup(double sse_norm) {
  return (sse_norm > 16.0);
}

static const double interp_rgrid_surf[4][33 * 18] = {
  {
      29.726102,   30.738006,   25.294088,   25.736759,   41.255961,
      41.937828,   41.937901,   42.110487,   46.038554,   46.593284,
      55.290144,   55.672257,   55.672289,   55.672284,   55.641633,
      54.251766,   38.404522,   36.186584,   30.977201,   32.031695,
      26.358675,   26.819956,   42.992269,   43.702888,   43.702966,
      43.882830,   47.992288,   48.920311,   57.633255,   58.015369,
      58.015396,   57.984745,   56.594876,   40.717227,   39.327227,
      37.709563,   30.977308,   32.041872,   26.587891,   26.801416,
      42.339251,   43.674340,   43.710377,   44.048333,   48.365747,
      57.251292,   57.999483,   58.015595,   57.984977,   56.595076,
      40.717426,   39.327559,   39.313319,   38.085580,   30.977328,
      32.271000,   31.802769,   26.377378,   27.473270,   43.021187,
      43.875643,   47.811034,   48.547182,   57.617338,   58.015563,
      58.001989,   56.982277,   40.734438,   39.327560,   39.313487,
      40.065111,   46.657660,   30.977329,   32.281067,   32.031899,
      26.358835,   26.820108,   42.992490,   43.882906,   47.992438,
      48.920477,   57.633450,   58.001989,   57.369478,   49.547092,
      39.714761,   39.313520,   40.065295,   48.834535,   51.525122,
      30.977329,   32.281072,   32.077511,   27.396520,   26.865699,
      42.992474,   43.882906,   48.358483,   57.251290,   57.985906,
      57.369511,   49.564105,   40.101962,   39.330532,   40.065297,
      48.835069,   57.817665,   145.394655,  30.977369,   32.281197,
      33.076074,   50.151877,   28.497451,   42.792931,   43.512994,
      48.377350,   57.604551,   57.386489,   49.951306,   40.118976,
      39.330567,   40.065298,   48.835069,   57.818203,   151.867755,
      153.625733,  31.447893,   32.750906,   32.266221,   32.302627,
      42.268290,   38.854272,   35.574619,   49.427510,   56.878041,
      50.330896,   48.931678,   39.717770,   40.065331,   48.835069,
      57.818191,   151.733328,  156.892368,  150.600520,  42.125514,
      43.448292,   33.901056,   49.284440,   47.710751,   52.761179,
      46.446220,   71.330907,   47.520016,   49.126258,   40.678046,
      40.107037,   48.835077,   57.818191,   151.733068,  153.820869,
      83.953859,   77.615621,   42.078145,   44.460837,   53.413056,
      53.860750,   51.935802,   60.688133,   54.022549,   59.058236,
      61.487243,   49.511225,   53.558701,   50.619860,   57.871196,
      151.733230,  153.821045,  83.819613,   77.759808,   76.318016,
      47.334708,   55.115021,   63.088351,   65.025437,   66.447005,
      66.685816,   72.840860,   70.204772,   75.247159,   75.769300,
      62.167236,   83.948064,   149.878947,  155.679346,  86.031186,
      83.012511,   86.265353,   124.454706,  64.496779,   78.702984,
      76.659370,   83.931191,   87.076287,   91.454837,   94.323380,
      104.708654,  109.932924,  118.596035,  126.154595,  114.409068,
      89.213630,   131.569970,  134.824613,  205.866155,  239.628810,
      233.070258,  72.308997,   94.104934,   101.404120,  121.159064,
      139.921349,  156.802796,  164.908506,  170.895200,  184.099064,
      198.250167,  207.100063,  207.922921,  207.455763,  210.915553,
      241.757520,  246.227265,  247.706317,  237.758893,  138.726610,
      135.459290,  198.494473,  240.094885,  275.356590,  295.461068,
      304.435273,  303.110796,  296.273053,  317.439936,  319.323966,
      331.200883,  330.246858,  256.379818,  247.994095,  247.767952,
      247.767210,  237.760453,  243.406633,  292.096487,  381.480937,
      421.494757,  458.357268,  483.808573,  487.800297,  481.212962,
      472.226349,  472.996935,  480.732289,  475.694812,  418.477476,
      412.710307,  268.338558,  261.989349,  261.987913,  251.406810,
      469.068582,  568.835648,  608.315967,  642.717253,  653.879813,
      681.008793,  688.659203,  677.706251,  668.348079,  652.995530,
      636.214467,  632.005555,  550.175654,  522.412011,  588.754096,
      591.721361,  591.719586,  567.821360,  667.228892,  787.133995,
      830.015474,  848.841400,  863.280871,  882.475988,  896.321308,
      889.205975,  878.059084,  871.467549,  860.073920,  814.054753,
      726.521001,  747.583633,  751.922326,  752.065525,  752.062970,
      721.688835,  795.516527,  916.651129,  1045.662316, 1064.160855,
      1070.930169, 1060.177543, 1080.056283, 1096.204211, 1095.337870,
      1098.401980, 1087.336698, 1022.507849, 916.586633,  938.424837,
      942.750167,  945.352203,  945.457385,  907.272493,  943.653980,
      1021.248655, 1129.544563, 1267.035138, 1281.163505, 1235.783117,
      1258.747831, 1285.425350, 1293.324247, 1314.802791, 1320.786990,
      1253.910457, 1138.645930, 1091.248129, 1161.397763, 1220.617170,
      1223.081462, 1173.684183, 1077.194216, 1216.741493, 1278.148407,
      1383.489545, 1497.622061, 1505.771495, 1422.262568, 1462.870558,
      1491.544736, 1494.922359, 1533.495237, 1509.573542, 1356.235452,
      1322.878872, 1324.869188, 1327.897500, 1337.708123, 1284.090364,
      1177.946473, 1335.104679, 1414.612819, 1508.772208, 1656.204257,
      1636.726625, 1693.515385, 1658.176544, 1626.718453, 1699.881842,
      1721.127481, 1715.540667, 1610.027798, 1528.475428, 1525.090509,
      1534.987574, 1760.238672, 1698.643936, 1285.821939, 1417.714456,
      1527.788112, 1660.663143, 1648.660011, 1838.036905, 1838.669356,
      1803.685279, 1895.404145, 1878.456820, 1907.761437, 1891.806178,
      1798.474576, 1772.695413, 1777.922135, 1782.961020, 1891.441373,
      1819.624352, 1363.652278, 1525.975687, 1664.733346, 1725.645678,
      1842.181220, 1845.935374, 1847.645643, 2084.649919, 2156.327082,
      2070.132265, 2093.920913, 2066.856209, 1935.233655, 1757.519179,
      1894.998543, 1904.433642, 1909.668939, 1832.757449, 1466.924321,
      1622.799826, 1723.952077, 1846.075992, 1857.802996, 1849.640165,
      2127.098845, 2370.422248, 2375.277013, 2471.317955, 2282.670767,
      2242.894713, 2110.737592, 1924.405669, 2022.847422, 2092.614827,
      2113.100659, 2028.502155, 1561.024406, 1719.325091, 1845.872940,
      1857.825889, 1850.155079, 2127.184115, 2372.221523, 2397.560183,
      2793.802030, 2525.955468, 2512.515727, 2465.117634, 2335.991284,
      2104.381407, 2124.161214, 2128.328755, 2129.221941, 2043.260174,
      1651.007418, 1782.604815, 1855.046326, 1850.154844, 2127.184127,
      2372.221529, 2397.560385, 2794.384764, 2544.781302, 2651.443272,
      2739.000803, 2702.474497, 2522.919941, 2276.563499, 2274.919319,
      2275.308573, 2275.300889, 2183.406597, 1713.105119, 1852.260885,
      1850.032717, 2127.168115, 2371.857312, 2397.544382, 2794.384763,
      2544.781370, 2651.673334, 2746.255820, 2763.494638, 2872.508140,
      2846.367495, 2305.137739, 2281.712444, 2281.725436, 2281.717621,
      2189.564169, 1780.286046, 1850.026376, 2127.168073, 2371.493095,
      2389.254845, 2794.020546, 2544.781339, 2651.673334, 2746.255845,
      2763.564597, 2874.688737, 2884.399707, 2860.263639, 2306.077266,
      2281.728045, 2281.725981, 2281.718165, 2189.564691, 1775.067091,
      2127.161715, 2371.493094, 2389.238842, 2793.656329, 2544.765337,
      2651.673332, 2746.255845, 2763.564597, 2874.688743, 2884.401957,
      2884.614099, 2860.264919, 2306.079244, 2281.728130, 2281.725981,
      2281.718165, 2189.564691, 2052.948444, 2371.486799, 2389.238842,
      2793.656328, 2544.765306, 2651.673331, 2746.255845, 2763.564597,
      2874.688743, 2884.401957, 2884.616164, 2884.614218, 2861.248329,
      2328.461556, 2282.711540, 2281.726065, 2281.718165, 2189.564691,
      2285.514142, 2389.231550, 2793.656328, 2544.765306, 2651.673331,
      2746.255845, 2763.564597, 2874.688743, 2884.401957, 2884.616164,
      2884.616200, 2884.616117, 2883.630641, 2837.880625, 2305.093852,
      2281.727963, 2281.718165, 2189.564691, 2293.011609, 2793.639080,
      2544.755886, 2651.663879, 2746.245982, 2763.554715, 2874.678861,
      2884.392075, 2884.606282, 2884.606318, 2884.606318, 2884.606318,
      2884.604170, 2860.253139, 2306.069362, 2281.720230, 2281.710349,
      2189.557190, 2600.476153, 2437.607663, 2540.606072, 2634.813199,
      2647.265343, 2758.176106, 2767.889302, 2768.103509, 2768.103545,
      2768.103545, 2768.103545, 2768.103545, 2768.101564, 2744.735758,
      2212.932478, 2189.566673, 2189.557190, 2101.125891,
  },
  {
      8.370360,    8.509764,    8.942497,    8.962541,    8.993650,
      9.401615,    9.414854,    9.308823,    9.304164,    9.304163,
      9.304164,    9.304609,    9.324803,    9.555049,    9.565277,
      9.571194,    9.647370,    9.451428,    8.722648,    8.867100,
      9.300225,    9.352116,    9.672213,    9.809754,    9.794381,
      9.699874,    9.695753,    9.695753,    9.696199,    9.716392,
      9.947083,    9.967407,    9.973767,    10.050124,   10.454503,
      14.384681,   8.722677,    8.848489,    8.875968,    9.334087,
      9.685450,    9.793645,    9.413799,    9.683184,    9.695785,
      9.696231,    9.716425,    9.947116,    9.967440,    9.973802,
      10.050158,   10.454591,   15.023561,   15.153937,   8.723107,
      8.857467,    8.857756,    9.333268,    9.685451,    9.792911,
      9.397076,    9.682449,    9.695786,    9.706329,    9.946672,
      9.967440,    9.973802,    10.050158,   10.454591,   15.023647,
      16.163497,   23.616388,   8.732904,    9.080445,    8.867552,
      9.333269,    9.685451,    9.792910,    9.397075,    9.682449,
      9.696231,    9.716869,    9.957343,    9.973801,    10.050158,
      10.454591,   15.023647,   16.163589,   24.700350,   25.680478,
      8.733342,    9.090251,    8.868006,    9.333704,    9.685477,
      9.792913,    9.397086,    9.682895,    9.716424,    9.947246,
      9.973357,    10.050158,   10.454591,   15.023647,   16.163589,
      24.700554,   28.087109,   55.858717,   8.827122,    9.186580,
      8.932093,    9.387586,    9.780396,    9.827339,    9.522726,
      9.715771,    9.936594,    9.972878,    10.050158,   10.454591,
      15.023647,   16.163589,   24.700554,   28.087318,   58.323463,
      58.504090,   11.020305,   11.418729,   10.432068,   10.462985,
      11.980204,   10.705178,   12.392570,   10.364495,   9.829351,
      10.102947,   10.457228,   15.023647,   16.163589,   24.700554,
      28.087319,   58.323704,   60.984846,   58.926665,   12.554530,
      12.511580,   11.828923,   12.308025,   13.298760,   13.044522,
      12.945689,   13.556029,   12.673484,   12.067338,   15.194674,
      16.168241,   24.700556,   28.087321,   58.339708,   61.349323,
      61.787659,   67.232638,   15.008518,   15.485683,   15.872869,
      16.107583,   15.835820,   16.877645,   17.678106,   18.822352,
      20.208378,   19.665073,   19.090588,   25.203257,   28.104179,
      58.339741,   61.713565,   70.078019,   70.458033,   67.961299,
      17.761908,   35.462897,   20.615440,   19.929266,   20.679593,
      22.692816,   25.941528,   29.215386,   34.956494,   38.908872,
      35.866805,   37.824252,   59.112479,   61.729892,   70.173287,
      72.702736,   72.797652,   69.857555,   20.506234,   39.710259,
      24.054829,   25.703729,   31.621917,   38.509103,   44.229053,
      56.544042,   67.468427,   79.581678,   80.144809,   78.556111,
      74.399792,   73.852202,   76.027762,   117.654284,  119.482115,
      114.656650,  25.548773,   48.434418,   42.617322,   59.026359,
      82.885084,   103.416136,  110.596012,  118.893312,  139.741780,
      150.511338,  161.901080,  167.647532,  162.429576,  152.184833,
      152.445359,  168.398896,  169.099625,  162.269514,  82.673806,
      70.110218,   132.312464,  183.332020,  215.910819,  237.790158,
      239.207817,  229.469490,  230.174506,  250.717349,  253.902836,
      250.549622,  207.721430,  175.337781,  174.022082,  174.844559,
      179.095719,  164.620978,  109.303621,  158.273825,  282.689646,
      346.940666,  386.914531,  410.989383,  397.460378,  370.331321,
      364.107004,  366.410030,  380.333542,  363.501310,  294.254304,
      262.048447,  260.790777,  265.975674,  362.177173,  183.336338,
      404.520239,  473.542827,  507.606249,  529.861510,  559.718099,
      588.632991,  577.691379,  533.799138,  522.780262,  528.340923,
      525.905829,  507.879853,  415.994095,  425.708669,  426.932731,
      441.248848,  446.721366,  435.160437,  604.741350,  709.039378,
      780.416591,  732.829427,  733.032326,  766.737728,  758.413295,
      720.856125,  705.746779,  717.211527,  703.753940,  661.340782,
      552.231698,  523.727433,  522.707356,  523.327476,  523.380946,
      502.845082,  745.431184,  827.490462,  962.723712,  998.756854,
      911.671845,  907.248783,  925.966430,  901.879365,  900.337680,
      919.439892,  914.334537,  842.878262,  704.639674,  702.883177,
      703.067185,  703.067254,  703.064850,  674.669690,  894.169844,
      1025.903412, 1134.439771, 1219.193918, 1158.526825, 1079.781195,
      1077.325043, 1076.106019, 1075.934290, 1117.511500, 1135.469693,
      1063.699731, 901.900714,  920.553711,  921.681648,  921.681860,
      921.679125,  884.454592,  994.327035,  1175.512444, 1231.834682,
      1307.830164, 1407.421778, 1326.963114, 1253.371428, 1250.787362,
      1269.653825, 1282.857814, 1343.429863, 1307.501250, 1114.048857,
      983.551449,  978.228429,  979.601009,  984.578211,  945.021162,
      1135.950879, 1278.106415, 1310.418579, 1419.457570, 1488.462247,
      1521.009066, 1542.754625, 1434.182316, 1454.788272, 1471.133321,
      1506.092266, 1521.256433, 1327.843116, 1309.574134, 1310.302024,
      1341.725430, 1459.021892, 1404.992306, 1232.172010, 1349.471091,
      1428.291402, 1487.206606, 1535.398237, 1746.731849, 1716.656287,
      1635.940921, 1639.303784, 1673.047286, 1693.682270, 1671.177816,
      1517.793233, 1479.700025, 1478.369392, 1483.694229, 1578.610159,
      1518.853600, 1297.751330, 1428.849626, 1485.708645, 1493.412575,
      1741.940596, 1728.475751, 1735.779511, 1858.578642, 1918.863689,
      1863.724239, 1891.004802, 1842.815568, 1675.715043, 1588.071911,
      1589.814363, 1592.306606, 1596.345158, 1532.039001, 1373.297412,
      1461.343441, 1492.261194, 1736.797392, 1653.192795, 1733.476694,
      1888.263820, 2082.789610, 1991.468137, 1883.805569, 2116.637406,
      2071.956368, 1871.698996, 1644.776129, 1756.448731, 1809.269770,
      1811.354640, 1738.198277, 1403.551810, 1491.185946, 1736.750346,
      1653.047461, 1730.172539, 1888.230584, 2085.624280, 1993.438043,
      1786.471183, 2337.838134, 2448.464613, 2336.935884, 2097.581279,
      1808.183187, 1828.142934, 1821.170551, 1820.795051, 1747.257197,
      1427.896429, 1736.558511, 1653.047441, 1730.172527, 1888.230448,
      2087.322730, 2032.094869, 1787.954651, 2341.066895, 2641.531977,
      2539.340235, 2507.302262, 2309.116599, 2030.685235, 2078.550644,
      1842.720183, 1832.216691, 1758.216718, 1580.198506, 1648.792285,
      1730.172167, 1888.230448, 2087.322736, 2032.169494, 1789.653110,
      2341.141530, 2641.873005, 2555.239313, 2709.221434, 2715.218691,
      2682.937371, 2124.893499, 2102.967545, 2092.601766, 2092.133383,
      2007.636776, 1578.033231, 1729.979789, 1888.230432, 2087.322736,
      2032.169494, 1789.653117, 2341.141675, 2641.873012, 2555.239371,
      2709.566764, 2723.749115, 2724.064349, 2699.003101, 2128.626010,
      2103.563660, 2103.560569, 2103.553324, 2018.595528, 1663.710423,
      1888.224796, 2087.322736, 2032.169494, 1789.653117, 2341.141675,
      2641.873012, 2555.239371, 2709.566764, 2723.749145, 2724.067198,
      2724.065212, 2700.016608, 2151.662616, 2104.575854, 2103.561585,
      2103.554293, 2018.596458, 1818.473656, 2087.316820, 2032.169494,
      1789.653117, 2341.141675, 2641.873012, 2555.239371, 2709.566764,
      2723.749145, 2724.067198, 2724.067252, 2724.067166, 2723.052897,
      2675.966135, 2127.612143, 2103.563538, 2103.554293, 2018.596458,
      2011.142209, 2032.163033, 1789.653117, 2341.141675, 2641.873012,
      2555.239371, 2709.566764, 2723.749145, 2724.067198, 2724.067252,
      2724.067252, 2724.067252, 2724.065041, 2699.002510, 2128.626241,
      2103.563710, 2103.554293, 2018.596458, 1947.414707, 1789.636821,
      2341.132961, 2641.863707, 2555.230039, 2709.557432, 2723.739813,
      2724.057867, 2724.057920, 2724.057920, 2724.057920, 2724.057920,
      2724.055881, 2700.007276, 2151.653370, 2104.568562, 2103.547173,
      2018.589543, 1614.950117, 2233.740132, 2539.133260, 2445.528333,
      2599.538876, 2613.721229, 2614.039283, 2614.039337, 2614.039337,
      2614.039337, 2614.039337, 2614.039337, 2614.039251, 2613.025067,
      2566.950536, 2041.634786, 2018.591496, 1937.063243,
  },
  {
      2.147514,    2.237898,    2.237803,    2.237151,    2.275320,
      2.279324,    2.332179,    2.334501,    2.322470,    2.048664,
      2.036634,    2.036633,    2.043731,    2.205267,    2.213955,
      2.286115,    3.114672,    3.150236,    2.237900,    2.332085,
      2.329658,    2.278309,    2.368754,    2.375255,    2.430335,
      2.432248,    2.408693,    2.134381,    2.122351,    2.122650,
      2.136546,    2.299971,    2.379228,    3.209393,    3.546162,
      6.294600,    2.271800,    2.333582,    2.329564,    2.275984,
      2.368873,    2.380129,    2.430556,    2.420732,    2.146419,
      2.122864,    2.122657,    2.136254,    2.293180,    2.378937,
      3.209400,    3.546195,    6.591552,    7.028860,    3.043184,
      2.367477,    2.329567,    2.275984,    2.373739,    2.490860,
      2.435421,    2.420225,    2.134895,    2.122658,    2.136254,
      2.293180,    2.378936,    3.209400,    3.546195,    6.591617,
      7.795421,    17.743823,   3.078566,    2.402859,    2.331056,
      2.275985,    2.373953,    2.495725,    2.435129,    2.408702,
      2.134688,    2.136255,    2.293180,    2.378936,    3.209400,
      3.546195,    6.591617,    7.795492,    18.578087,   19.754344,
      3.112459,    3.174471,    2.370323,    2.279235,    2.375398,
      2.494530,    2.423939,    2.146738,    2.136763,    2.293180,
      2.378939,    3.209400,    3.546195,    6.591617,    7.795492,
      18.578249,   21.659892,   44.204400,   3.089303,    3.189642,
      2.509317,    2.372448,    2.432176,    2.489915,    2.461894,
      2.170933,    2.301935,    2.380378,    3.234280,    3.547288,
      6.591617,    7.795492,    18.578249,   21.660057,   46.157016,
      46.346972,   2.545327,    2.662725,    2.893299,    2.840660,
      3.006570,    3.048065,    3.224317,    2.907751,    2.627415,
      3.268959,    4.113541,    6.616496,    7.795494,    18.578249,
      21.660057,   46.157182,   48.299592,   46.394222,   2.942757,
      3.155386,    3.688593,    3.481851,    3.715109,    4.145502,
      4.681446,    5.080585,    4.600294,    4.278096,    6.726591,
      7.800142,    18.578250,   21.660057,   46.157182,   48.299758,
      48.346843,   46.394230,   3.793838,    5.473983,    4.608110,
      4.665834,    4.593326,    5.621563,    7.102711,    9.025169,
      10.122234,   10.159723,   10.023976,   18.857332,   21.668316,
      46.157261,   48.299839,   48.347091,   48.346956,   46.394491,
      4.271176,    6.466779,    5.484235,    6.027476,    7.301091,
      9.352794,    12.715546,   16.192475,   22.560070,   27.958500,
      27.052873,   26.766614,   46.406220,   49.221059,   49.307058,
      49.315280,   49.587875,   49.469333,   4.312908,    7.475387,
      7.833860,    10.223714,   16.775457,   24.234924,   32.175390,
      45.584094,   54.342692,   64.941124,   66.654416,   62.626466,
      52.266425,   72.572219,   73.485826,   73.672773,   79.880600,
      119.538616,  9.063034,    10.103318,   19.539238,   36.472083,
      62.703355,   82.709235,   91.988082,   100.285999,  115.687111,
      124.329614,  125.634719,  122.315209,  112.379054,  130.322056,
      131.130875,  131.139174,  131.411947,  127.988734,  19.796341,
      25.882925,   93.253237,   153.548489,  189.401787,  213.347763,
      206.988813,  189.758327,  189.286642,  204.628607,  202.531100,
      201.472079,  186.352604,  214.273591,  215.531911,  215.769339,
      221.170008,  212.465343,  169.309448,  175.824536,  224.720662,
      303.438505,  343.063029,  370.535703,  343.624360,  300.549614,
      289.296503,  298.082336,  310.854450,  294.466802,  270.163254,
      249.832086,  248.983097,  254.384429,  377.318513,  367.262701,
      353.359003,  463.883442,  447.419222,  453.002989,  489.006379,
      528.921013,  500.655371,  439.860852,  423.703334,  423.144668,
      431.190760,  422.628418,  346.619232,  383.306337,  385.067653,
      385.305123,  390.705188,  375.153218,  539.087109,  664.575466,
      708.656277,  662.482491,  618.723324,  674.195070,  656.531281,
      596.084694,  576.463478,  584.628279,  577.147684,  562.515800,
      453.416064,  428.149599,  427.247359,  427.247313,  427.246307,
      409.990807,  687.292802,  777.058828,  905.030245,  912.381642,
      788.119446,  769.561998,  795.174180,  761.722895,  738.637994,
      753.718308,  761.364923,  712.753474,  603.465105,  591.662313,
      594.079856,  594.200005,  594.197958,  570.199152,  779.060173,
      951.796204,  1069.175314, 1170.755086, 1067.610429, 949.009502,
      934.793193,  914.719926,  899.055222,  929.548018,  948.443491,
      883.741844,  754.604267,  719.256051,  780.076337,  782.811403,
      782.547500,  745.230787,  922.165691,  1108.252645, 1185.274121,
      1237.276156, 1266.012843, 1226.812751, 1102.465568, 1085.286013,
      1075.433883, 1091.747391, 1130.914031, 1079.716598, 927.463157,
      942.209973,  945.879069,  946.263934,  946.332394,  778.375752,
      1069.516638, 1181.232895, 1244.763295, 1280.392765, 1419.980489,
      1443.722749, 1374.005679, 1247.118477, 1252.786860, 1265.078694,
      1280.267151, 1273.804486, 1085.050290, 1037.883124, 1036.171983,
      1042.457032, 1185.241611, 1137.692305, 1136.326843, 1246.301355,
      1321.499026, 1422.581245, 1459.231744, 1574.624247, 1593.556714,
      1554.290382, 1474.539686, 1480.100956, 1464.679108, 1412.507057,
      1251.278472, 1197.245685, 1195.175062, 1201.168704, 1337.571298,
      1289.300549, 1198.629451, 1322.569335, 1424.892277, 1470.063106,
      1576.317080, 1629.881049, 1759.007438, 1685.455960, 1823.183401,
      1696.763728, 1720.897219, 1582.701816, 1409.816846, 1352.692221,
      1350.761108, 1356.950874, 1362.935844, 1308.131482, 1273.245632,
      1447.544983, 1471.079493, 1576.789596, 1629.891022, 1759.113129,
      1704.167080, 2077.760859, 1944.393655, 2008.282739, 1951.682502,
      1905.896173, 1653.621076, 1524.210363, 1526.775296, 1662.009621,
      1667.942643, 1600.578688, 1394.223453, 1472.070445, 1576.833336,
      1629.890970, 1757.978972, 1678.353822, 2077.085726, 1963.548056,
      2214.617152, 2129.636312, 2170.262437, 2204.652056, 1892.295487,
      1652.520236, 1673.779173, 1681.078895, 1681.334159, 1613.428869,
      1413.634564, 1576.837954, 1629.890974, 1757.978960, 1678.303800,
      2075.951574, 1963.498706, 2214.984962, 2140.104142, 2224.748512,
      2358.489855, 2338.333779, 2147.326062, 1959.161343, 1704.142189,
      1693.264072, 1693.257371, 1624.870507, 1522.455341, 1630.102341,
      1757.978970, 1678.205343, 2073.710713, 1963.613482, 2219.840292,
      2140.317509, 2224.830630, 2367.413225, 2514.706448, 2519.715697,
      2490.578281, 1997.672226, 1965.092163, 1964.608831, 1964.602061,
      1885.256194, 1566.312385, 1757.983049, 1678.205154, 2071.469838,
      1912.611809, 2222.454760, 2250.824415, 2229.685973, 2367.413669,
      2515.007972, 2527.205354, 2527.466626, 2505.215096, 1998.786468,
      1976.532889, 1976.530885, 1976.524114, 1896.696743, 1692.302152,
      1678.199584, 2071.469829, 1912.513351, 2220.213903, 2250.939287,
      2234.541308, 2367.626998, 2515.007990, 2527.205379, 2527.469148,
      2527.467382, 2506.115004, 2019.240121, 1977.432526, 1976.531972,
      1976.525125, 1896.697713, 1606.783592, 2071.463772, 1912.513351,
      2220.213894, 2250.939097, 2234.541317, 2367.627410, 2515.008008,
      2527.205379, 2527.469148, 2527.469193, 2527.469116, 2526.568562,
      2484.760968, 1997.886085, 1976.533707, 1976.525125, 1896.697713,
      2004.589287, 1912.507679, 2220.213894, 2250.939097, 2234.541317,
      2367.627410, 2515.008008, 2527.205379, 2527.469148, 2527.469193,
      2527.469193, 2527.469193, 2527.467229, 2505.214602, 1998.786486,
      1976.533860, 1976.525125, 1896.697713, 1827.779426, 2220.199076,
      2250.930988, 2234.532682, 2367.618752, 2514.999350, 2527.196721,
      2527.460490, 2527.460534, 2527.460534, 2527.460534, 2527.460534,
      2527.458723, 2506.106346, 2019.231539, 1977.425679, 1976.518431,
      1896.691216, 2056.541124, 2160.944440, 2138.934044, 2265.803052,
      2412.920916, 2425.118264, 2425.382033, 2425.382078, 2425.382078,
      2425.382078, 2425.382078, 2425.382078, 2425.382002, 2424.481524,
      2383.572672, 1917.153083, 1896.692951, 1820.088116,
  },
  {
      0.254129,    0.265575,    0.267769,    0.316933,    0.320396,
      0.350337,    0.358368,    0.358663,    0.358663,    0.358675,
      0.359199,    0.365181,    0.366036,    0.392895,    0.701286,
      0.812014,    1.926722,    2.011743,    0.247749,    0.276002,
      0.279039,    0.330191,    0.332015,    0.365000,    0.373450,
      0.373758,    0.373759,    0.374032,    0.380276,    0.381405,
      0.408276,    0.717257,    0.841415,    1.958868,    2.298681,
      4.856667,    0.246998,    0.275970,    0.279040,    0.328326,
      0.289563,    0.363136,    0.373451,    0.373760,    0.373771,
      0.374308,    0.381144,    0.408277,    0.717258,    0.841416,
      1.958870,    2.298703,    5.088461,    5.484975,    0.246965,
      0.275218,    0.279007,    0.328244,    0.287698,    0.363054,
      0.373451,    0.373771,    0.374296,    0.380881,    0.408266,
      0.717258,    0.841416,    1.958870,    2.298703,    5.088514,
      6.102534,    14.287379,   0.246213,    0.258111,    0.278255,
      0.328244,    0.287698,    0.363054,    0.373452,    0.374034,
      0.380870,    0.408644,    0.725849,    0.841794,    1.958870,
      2.298703,    5.088514,    6.102591,    14.959455,   15.913957,
      0.246180,    0.257402,    0.279186,    0.328526,    0.290138,
      0.364877,    0.376133,    0.375014,    0.408382,    0.734439,
      1.037308,    1.967461,    2.298704,    5.088514,    6.102591,
      14.959584,   17.441072,   35.429097,   0.250019,    0.262303,
      0.303891,    0.340011,    0.350106,    0.413735,    0.446832,
      0.410301,    0.734390,    1.038841,    2.002354,    2.300237,
      5.088514,    6.102591,    14.959584,   17.441204,   36.992539,
      37.110962,   0.339750,    0.354696,    0.373261,    0.461008,
      0.462495,    0.598987,    0.695421,    0.760530,    1.068705,
      2.029958,    2.898902,    5.114817,    6.102593,    14.959584,
      17.441205,   36.992675,   38.648954,   36.568097,   0.400795,
      0.421342,    0.508307,    0.588014,    0.677109,    0.972744,
      1.364551,    2.005727,    2.968255,    3.091537,    5.221096,
      6.106993,    14.959585,   17.441202,   36.995441,   38.712050,
      38.170575,   37.947398,   0.489106,    0.499732,    0.682198,
      0.797985,    0.928841,    1.529889,    3.407135,    6.047262,
      9.020716,    9.566838,    8.225222,    15.250390,   17.449015,
      36.967227,   38.773771,   39.603706,   39.612863,   38.072105,
      0.782539,    0.400752,    1.185871,    1.379942,    2.131362,
      4.169824,    9.556239,    12.949414,   21.418888,   24.451152,
      23.409241,   22.939144,   37.166430,   38.131684,   39.591435,
      39.985395,   39.999803,   38.384307,   1.616514,    0.576268,
      3.109295,    3.930083,    8.248113,    15.543679,   28.108995,
      37.139521,   46.111565,   52.306471,   54.245700,   51.814241,
      40.882242,   41.810659,   42.231519,   48.976557,   49.261637,
      47.271630,   5.094715,    1.500966,    10.566421,   19.002838,
      38.783971,   59.976285,   70.642488,   79.940911,   88.863960,
      91.805239,   95.624856,   92.381504,   94.587340,   93.842585,
      93.403266,   93.670318,   93.432487,   89.648397,   0.664794,
      7.849196,    61.154449,   96.443290,   137.609372,  162.556446,
      148.037064,  138.292519,  136.715840,  145.772994,  149.246615,
      151.612049,  131.470885,  109.201663,  101.316335,  101.904288,
      101.932270,  97.814994,   6.925953,    50.062367,   155.094765,
      216.414869,  252.438993,  271.718839,  232.337598,  204.289605,
      199.194140,  205.331210,  215.677297,  214.590331,  188.109722,
      172.081271,  228.048207,  250.892300,  251.787562,  241.618501,
      134.674271,  296.106246,  298.718911,  312.356451,  323.413855,
      342.631007,  307.749299,  283.067516,  265.987870,  265.460375,
      276.156298,  267.602576,  244.127989,  255.341106,  257.373708,
      258.333723,  258.372207,  247.937137,  342.349647,  510.603738,
      581.005531,  478.386434,  373.143790,  378.600404,  377.561939,
      356.141074,  338.631477,  331.842551,  340.566852,  327.567230,
      297.260507,  287.191935,  263.781497,  262.767950,  262.766967,
      252.154399,  475.742336,  629.567678,  578.444958,  564.378757,
      438.113186,  396.420987,  414.959234,  431.302969,  421.606208,
      403.786618,  405.430259,  389.856615,  363.613524,  366.303795,
      365.460005,  365.415394,  365.414130,  350.655776,  624.537781,
      642.232055,  604.750655,  630.663539,  588.111844,  475.625654,
      468.814426,  477.664040,  494.124835,  483.676981,  477.873259,
      452.815795,  423.548326,  431.959314,  432.336669,  431.259561,
      431.158392,  412.599201,  599.136090,  596.383540,  649.766837,
      714.641904,  647.024168,  546.886099,  544.047374,  542.897551,
      558.506982,  555.978025,  571.819113,  532.351774,  510.677525,
      495.125872,  493.402635,  468.981876,  468.871284,  423.950331,
      572.225475,  705.639818,  1024.735591, 667.143308,  595.280675,
      762.720257,  552.209148,  613.853858,  630.029121,  653.039002,
      643.569732,  623.030443,  573.888949,  571.441956,  571.380435,
      572.467453,  621.621663,  597.446835,  681.815611,  1037.097688,
      905.438670,  599.972561,  762.219180,  517.929098,  688.053947,
      744.181205,  679.524546,  682.569374,  713.780286,  707.985178,
      646.983619,  636.062414,  635.699032,  635.794133,  637.956277,
      612.281811,  1009.018046, 905.871087,  604.028246,  629.564692,
      511.991374,  689.885845,  836.027416,  766.534552,  881.860194,
      735.849782,  783.725360,  809.653496,  750.636979,  811.765460,
      814.639525,  816.244480,  818.253804,  785.288396,  867.862571,
      604.231326,  629.308626,  506.143862,  689.628928,  836.193031,
      774.742632,  1007.244245, 1293.627165, 897.984304,  931.611215,
      973.236387,  945.068518,  947.276414,  950.892263,  987.500595,
      1033.288662, 993.423200,  674.214249,  634.009759,  506.144239,
      689.628432,  836.193010,  774.742663,  1007.434892, 1306.991055,
      1109.422389, 1067.304686, 1126.861498, 1124.180515, 989.502672,
      997.732672,  1042.608506, 1046.158446, 1048.166963, 1005.915872,
      633.151925,  507.355996,  689.628570,  836.193810,  774.742698,
      1007.434892, 1306.991101, 1109.775470, 1079.300073, 1239.065289,
      1628.963638, 1322.149598, 1152.072478, 1133.642807, 1135.074392,
      1135.159950, 1135.156239, 1089.309834, 1002.301724, 712.557708,
      836.610527,  784.181750,  1007.849615, 1306.991136, 1109.775470,
      1079.300117, 1239.231971, 1644.540785, 1609.385289, 1575.587962,
      1175.113940, 1139.762609, 1138.978460, 1138.978401, 1138.974499,
      1092.973876, 693.249751,  850.650934,  794.193638,  1222.681498,
      1316.430188, 1109.776271, 1079.300117, 1239.231971, 1644.540839,
      1609.866572, 1604.515037, 1603.618487, 1568.302641, 1157.017568,
      1138.980254, 1138.978724, 1138.974823, 1092.974187, 834.755585,
      1090.883669, 1236.131974, 1325.870346, 1110.190994, 1079.300152,
      1239.231971, 1644.540839, 1609.866572, 1604.515142, 1604.380213,
      1604.378532, 1585.580675, 1157.776710, 1138.980319, 1138.978724,
      1138.974823, 1092.974187, 1056.722338, 1249.164781, 1326.443132,
      1110.191843, 1079.300187, 1239.231971, 1644.540839, 1609.866572,
      1604.515142, 1604.380213, 1604.380190, 1604.378596, 1585.582205,
      1157.778240, 1138.980383, 1138.978724, 1138.974823, 1092.974187,
      1204.957557, 1326.440488, 1110.191892, 1079.300187, 1239.231971,
      1644.540839, 1609.866572, 1604.515142, 1604.380213, 1604.380190,
      1604.380190, 1604.378661, 1586.341349, 1175.056279, 1139.739527,
      1138.978789, 1138.974823, 1092.974187, 1275.872102, 1110.183396,
      1079.294485, 1239.226464, 1644.535343, 1609.861076, 1604.509646,
      1604.374717, 1604.374695, 1604.374695, 1604.374695, 1604.374630,
      1603.613892, 1568.297204, 1157.013600, 1138.976353, 1138.970921,
      1092.970443, 1014.576161, 1029.697894, 1172.002606, 1579.603765,
      1545.063972, 1539.712554, 1539.577625, 1539.577603, 1539.577603,
      1539.577603, 1539.577603, 1539.577603, 1539.576008, 1521.537360,
      1111.012900, 1092.975717, 1092.970443, 1048.827820,
  },
};

static const double interp_dgrid_surf[33 * 18] = {
  15.491252, 15.496413, 15.496379, 15.394447, 15.394431, 15.446941, 15.480480,
  15.480491, 15.480491, 15.480491, 15.480573, 15.603112, 15.603153, 15.602880,
  15.196621, 15.195983, 14.447585, 14.442076, 15.599420, 15.501644, 15.501575,
  15.399610, 15.399669, 15.452121, 15.485671, 15.485682, 15.485682, 15.485724,
  15.608303, 15.608385, 15.608113, 15.201854, 15.201079, 14.452681, 14.451350,
  13.210484, 15.599455, 15.501644, 15.501575, 15.399686, 15.626744, 15.452197,
  15.485671, 15.485682, 15.485682, 15.485765, 15.608344, 15.608113, 15.201854,
  15.201079, 14.452681, 14.451350, 13.214913, 13.208705, 15.599455, 15.501679,
  15.501575, 15.399686, 15.626820, 15.452197, 15.485671, 15.485682, 15.485765,
  15.608303, 15.608113, 15.201854, 15.201079, 14.452681, 14.451350, 13.214913,
  13.212184, 10.377543, 15.599489, 15.604652, 15.501610, 15.399686, 15.626820,
  15.452197, 15.485671, 15.485724, 15.608303, 15.608113, 15.201794, 15.201079,
  14.452681, 14.451350, 13.214913, 13.212184, 10.381022, 10.373758, 15.599489,
  15.604686, 15.501645, 15.399727, 15.626807, 15.452213, 15.485673, 15.485765,
  15.608072, 15.201734, 15.022022, 14.452621, 14.451350, 13.214913, 13.212184,
  10.381022, 10.375351, 4.752366,  15.599553, 15.604785, 15.606745, 15.523109,
  15.588440, 15.498592, 15.490939, 15.608113, 15.201734, 15.022022, 14.452398,
  14.451350, 13.214913, 13.212184, 10.381022, 10.375351, 4.753958,  4.748594,
  15.788491, 15.793763, 15.727178, 15.593404, 15.576185, 15.541155, 15.528638,
  15.443234, 15.022046, 14.452234, 13.963908, 13.214750, 13.212184, 10.381022,
  10.375351, 4.753958,  4.750187,  4.748513,  15.783667, 15.788604, 15.715040,
  15.574608, 15.604897, 15.345511, 15.322323, 15.003579, 14.280362, 13.963611,
  13.214382, 13.212184, 10.381022, 10.375351, 4.753958,  4.750106,  4.750025,
  4.508804,  15.747709, 14.765834, 15.706678, 15.619092, 15.637946, 15.437393,
  14.705235, 13.886464, 13.092309, 12.499506, 12.601594, 10.380302, 10.375350,
  4.753958,  4.750026,  4.510253,  4.510173,  4.508580,  15.641901, 14.968111,
  15.663074, 15.583828, 15.420627, 14.983936, 13.912901, 13.425841, 11.601603,
  10.600757, 10.110971, 8.839811,  4.753363,  4.749963,  4.510190,  4.322919,
  4.322857,  4.321407,  15.545263, 14.859883, 15.429167, 15.185696, 14.527376,
  13.650042, 12.244185, 10.755706, 9.356137,  8.229212,  8.166627,  7.324414,
  4.511146,  4.322709,  4.322566,  4.322503,  4.322503,  4.321054,  15.151031,
  14.579126, 14.592456, 13.733213, 11.980508, 10.685709, 9.143695,  7.466555,
  6.434770,  5.659204,  5.592407,  5.356211,  4.597869,  3.456439,  3.456056,
  3.456176,  3.456176,  3.455018,  13.478598, 13.969965, 10.921203, 9.274388,
  7.530261,  6.614303,  5.617812,  4.558886,  4.008929,  3.739688,  3.597707,
  3.510418,  3.041638,  3.096611,  3.096750,  3.455008,  3.455038,  3.453880,
  11.982351, 11.102072, 6.384662,  5.366178,  4.365376,  3.782955,  3.285890,
  2.758904,  2.439067,  2.338593,  2.257332,  2.190385,  2.088145,  1.867744,
  1.867445,  1.196878,  0.929332,  0.928931,  6.882587,  5.102224,  3.928701,
  3.021205,  2.614349,  2.162491,  1.870802,  1.628127,  1.448370,  1.352404,
  1.349332,  1.277236,  1.128399,  0.928668,  0.928601,  0.928485,  0.928395,
  0.928084,  4.066496,  3.233175,  2.413117,  1.830193,  1.473572,  1.273461,
  1.065156,  0.929824,  0.844729,  0.777037,  0.754300,  0.759737,  0.658871,
  0.603118,  0.603209,  0.928096,  0.928205,  0.927893,  2.747433,  2.039019,
  1.400016,  1.123698,  0.918772,  0.744824,  0.627536,  0.528263,  0.480634,
  0.446093,  0.423444,  0.401394,  0.394353,  0.360914,  0.360903,  0.361012,
  0.361012,  0.360891,  1.709038,  1.258373,  0.985529,  0.673582,  0.559577,
  0.456411,  0.372560,  0.312622,  0.268425,  0.251698,  0.238132,  0.222477,
  0.209643,  0.165264,  0.165254,  0.165254,  0.165254,  0.165199,  1.088160,
  0.806677,  0.673453,  0.490758,  0.350173,  0.277724,  0.229342,  0.190245,
  0.158717,  0.138414,  0.132405,  0.123800,  0.120550,  0.128355,  0.142808,
  0.142812,  0.142800,  0.142752,  0.806227,  0.588621,  0.490714,  0.350136,
  0.236497,  0.188583,  0.143991,  0.115039,  0.097317,  0.081406,  0.071159,
  0.067980,  0.062769,  0.066575,  0.066581,  0.066569,  0.030318,  0.030291,
  0.588339,  0.456572,  0.302189,  0.236473,  0.188564,  0.126491,  0.101248,
  0.075242,  0.059591,  0.051942,  0.042824,  0.037390,  0.034523,  0.030277,
  0.030275,  0.030275,  0.030258,  0.014677,  0.456374,  0.302172,  0.236448,
  0.164278,  0.126481,  0.094667,  0.068489,  0.053835,  0.038513,  0.031335,
  0.028947,  0.022753,  0.019347,  0.014676,  0.014675,  0.014674,  0.014674,
  0.014664,  0.302014,  0.221625,  0.164273,  0.126473,  0.094667,  0.068483,
  0.053831,  0.034298,  0.027445,  0.022220,  0.016315,  0.015692,  0.012949,
  0.009448,  0.009442,  0.007914,  0.007913,  0.007910,  0.221524,  0.164268,
  0.126473,  0.094667,  0.068480,  0.044800,  0.034295,  0.027442,  0.019666,
  0.014389,  0.011041,  0.011550,  0.009117,  0.021326,  0.007915,  0.007911,
  0.007911,  0.007908,  0.164193,  0.126473,  0.094667,  0.068480,  0.044800,
  0.034291,  0.027442,  0.019665,  0.014388,  0.008515,  0.008320,  0.009117,
  0.007357,  0.004348,  0.004343,  0.007908,  0.007910,  0.007907,  0.125623,
  0.094667,  0.068480,  0.044800,  0.034289,  0.023364,  0.019663,  0.011887,
  0.008514,  0.008318,  0.007208,  0.007208,  0.007206,  0.004342,  0.004341,
  0.004342,  0.004342,  0.004341,  0.094624,  0.068480,  0.044800,  0.034289,
  0.023364,  0.019662,  0.011887,  0.008514,  0.008318,  0.007208,  0.007207,
  0.007207,  0.007206,  0.004342,  0.004341,  0.004341,  0.004341,  0.004340,
  0.068449,  0.044800,  0.034289,  0.023364,  0.019662,  0.011887,  0.008514,
  0.008318,  0.007208,  0.007207,  0.007207,  0.007207,  0.007206,  0.004343,
  0.004341,  0.004341,  0.004341,  0.004340,  0.044777,  0.034289,  0.023364,
  0.019662,  0.011887,  0.008514,  0.008318,  0.007208,  0.007207,  0.007207,
  0.007207,  0.007207,  0.007207,  0.007205,  0.004342,  0.004341,  0.004341,
  0.004340,  0.034274,  0.023364,  0.019662,  0.011887,  0.008514,  0.008318,
  0.007208,  0.007207,  0.007207,  0.007207,  0.007207,  0.007207,  0.007207,
  0.007206,  0.004342,  0.004341,  0.004341,  0.004340,  0.023353,  0.019662,
  0.011887,  0.008514,  0.008318,  0.007208,  0.007207,  0.007207,  0.007207,
  0.007207,  0.007207,  0.007207,  0.007207,  0.007206,  0.004343,  0.004341,
  0.004341,  0.004340,  0.019650,  0.011884,  0.008511,  0.008316,  0.007205,
  0.007205,  0.007205,  0.007205,  0.007205,  0.007205,  0.007205,  0.007205,
  0.007205,  0.007205,  0.007203,  0.004341,  0.004340,  0.004338,
};

void av1_model_rd_surffit(BLOCK_SIZE bsize, double sse_norm, double xm,
                          double yl, double *rate_f, double *dist_f) {
  (void)sse_norm;
  const double x_start = -0.5;
  const double x_end = 16.5;
  const double x_step = 1.0;
  const double y_start = -15.5;
  const double y_end = 16.5;
  const double y_step = 1.0;
  const double epsilon = 1e-6;
  const int stride = (int)rint((x_end - x_start) / x_step) + 1;
  const int rcat = bsize_model_cat_lookup[bsize];
  (void)y_end;

  xm = AOMMAX(xm, x_start + x_step + epsilon);
  xm = AOMMIN(xm, x_end - x_step - epsilon);
  yl = AOMMAX(yl, y_start + y_step + epsilon);
  yl = AOMMIN(yl, y_end - y_step - epsilon);

  const double y = (yl - y_start) / y_step;
  const double x = (xm - x_start) / x_step;

  const int yi = (int)floor(y);
  const int xi = (int)floor(x);
  assert(xi > 0);
  assert(yi > 0);

  const double yo = y - yi;
  const double xo = x - xi;
  const double *prate = &interp_rgrid_surf[rcat][(yi - 1) * stride + (xi - 1)];
  const double *pdist = &interp_dgrid_surf[(yi - 1) * stride + (xi - 1)];
  *rate_f = interp_bicubic(prate, stride, xo, yo);
  *dist_f = interp_bicubic(pdist, stride, xo, yo);
}

static const double interp_rgrid_curv[4][65] = {
  {
      0.000000,    0.000000,    0.000000,    0.000000,    0.000000,
      0.000000,    0.000000,    0.000000,    0.000000,    0.000000,
      0.000000,    23.801499,   28.387688,   33.388795,   42.298282,
      41.525408,   51.597692,   49.566271,   54.632979,   60.321507,
      67.730678,   75.766165,   85.324032,   96.600012,   120.839562,
      173.917577,  255.974908,  354.107573,  458.063476,  562.345966,
      668.568424,  772.072881,  878.598490,  982.202274,  1082.708946,
      1188.037853, 1287.702240, 1395.588773, 1490.825830, 1584.231230,
      1691.386090, 1766.822555, 1869.630904, 1926.743565, 2002.949495,
      2047.431137, 2138.486068, 2154.743767, 2209.242472, 2277.593051,
      2290.996432, 2307.452938, 2343.567091, 2397.654644, 2469.425868,
      2558.591037, 2664.860422, 2787.944296, 2927.552932, 3083.396602,
      3255.185579, 3442.630134, 3645.440541, 3863.327072, 4096.000000,
  },
  {
      0.000000,    0.000000,    0.000000,    0.000000,    0.000000,
      0.000000,    0.000000,    0.000000,    0.000000,    0.000000,
      0.000000,    8.998436,    9.439592,    9.731837,    10.865931,
      11.561347,   12.578139,   14.205101,   16.770584,   19.094853,
      21.330863,   23.298907,   26.901921,   34.501017,   57.891733,
      112.234763,  194.853189,  288.302032,  380.499422,  472.625309,
      560.226809,  647.928463,  734.155122,  817.489721,  906.265783,
      999.260562,  1094.489206, 1197.062998, 1293.296825, 1378.926484,
      1472.760990, 1552.663779, 1635.196884, 1692.451951, 1759.741063,
      1822.162720, 1916.515921, 1966.686071, 2031.647506, 2033.700134,
      2087.847688, 2161.688858, 2242.536028, 2334.023491, 2436.337802,
      2549.665519, 2674.193198, 2810.107395, 2957.594666, 3116.841567,
      3288.034655, 3471.360486, 3667.005616, 3875.156602, 4096.000000,
  },
  {
      0.000000,    0.000000,    0.000000,    0.000000,    0.000000,
      0.000000,    0.000000,    0.000000,    0.000000,    0.000000,
      0.000000,    2.377584,    2.557185,    2.732445,    2.851114,
      3.281800,    3.765589,    4.342578,    5.145582,    5.611038,
      6.642238,    7.945977,    11.800522,   17.346624,   37.501413,
      87.216800,   165.860942,  253.865564,  332.039345,  408.518863,
      478.120452,  547.268590,  616.067676,  680.022540,  753.863541,
      834.529973,  919.489191,  1008.264989, 1092.230318, 1173.971886,
      1249.514122, 1330.510941, 1399.523249, 1466.923387, 1530.533471,
      1586.515722, 1695.197774, 1746.648696, 1837.136959, 1909.075485,
      1975.074651, 2060.159200, 2155.335095, 2259.762505, 2373.710437,
      2497.447898, 2631.243895, 2775.367434, 2930.087523, 3095.673170,
      3272.393380, 3460.517161, 3660.313520, 3872.051464, 4096.000000,
  },
  {
      0.000000,    0.000000,    0.000000,    0.000000,    0.000000,
      0.000000,    0.000000,    0.000000,    0.000000,    0.000000,
      0.000000,    0.296997,    0.342545,    0.403097,    0.472889,
      0.614483,    0.842937,    1.050824,    1.326663,    1.717750,
      2.530591,    3.582302,    6.995373,    9.973335,    24.042464,
      56.598240,   113.680735,  180.018689,  231.050567,  266.101082,
      294.957934,  323.326511,  349.434429,  380.443211,  408.171987,
      441.214916,  475.716772,  512.900000,  551.186939,  592.364455,
      624.527378,  661.940693,  679.185473,  724.800679,  764.781792,
      873.050019,  950.299001,  939.292954,  1052.406153, 1033.893184,
      1112.182406, 1219.174326, 1337.296681, 1471.648357, 1622.492809,
      1790.093491, 1974.713858, 2176.617364, 2396.067465, 2633.327614,
      2888.661266, 3162.331876, 3454.602899, 3765.737789, 4096.000000,
  },
};

static const double interp_dgrid_curv[2][65] = {
  {
      16.000000, 15.962891, 15.925174, 15.886888, 15.848074, 15.808770,
      15.769015, 15.728850, 15.688313, 15.647445, 15.606284, 15.564870,
      15.525918, 15.483820, 15.373330, 15.126844, 14.637442, 14.184387,
      13.560070, 12.880717, 12.165995, 11.378144, 10.438769, 9.130790,
      7.487633,  5.688649,  4.267515,  3.196300,  2.434201,  1.834064,
      1.369920,  1.035921,  0.775279,  0.574895,  0.427232,  0.314123,
      0.233236,  0.171440,  0.128188,  0.092762,  0.067569,  0.049324,
      0.036330,  0.027008,  0.019853,  0.015539,  0.011093,  0.008733,
      0.007624,  0.008105,  0.005427,  0.004065,  0.003427,  0.002848,
      0.002328,  0.001865,  0.001457,  0.001103,  0.000801,  0.000550,
      0.000348,  0.000193,  0.000085,  0.000021,  0.000000,
  },
  {
      16.000000, 15.996116, 15.984769, 15.966413, 15.941505, 15.910501,
      15.873856, 15.832026, 15.785466, 15.734633, 15.679981, 15.621967,
      15.560961, 15.460157, 15.288367, 15.052462, 14.466922, 13.921212,
      13.073692, 12.222005, 11.237799, 9.985848,  8.898823,  7.423519,
      5.995325,  4.773152,  3.744032,  2.938217,  2.294526,  1.762412,
      1.327145,  1.020728,  0.765535,  0.570548,  0.425833,  0.313825,
      0.232959,  0.171324,  0.128174,  0.092750,  0.067558,  0.049319,
      0.036330,  0.027008,  0.019853,  0.015539,  0.011093,  0.008733,
      0.007624,  0.008105,  0.005427,  0.004065,  0.003427,  0.002848,
      0.002328,  0.001865,  0.001457,  0.001103,  0.000801,  0.000550,
      0.000348,  0.000193,  0.000085,  0.000021,  -0.000000,
  },
};

void av1_model_rd_curvfit(BLOCK_SIZE bsize, double sse_norm, double xqr,
                          double *rate_f, double *distbysse_f) {
  const double x_start = -15.5;
  const double x_end = 16.5;
  const double x_step = 0.5;
  const double epsilon = 1e-6;
  const int rcat = bsize_model_cat_lookup[bsize];
  const int dcat = sse_norm_model_cat_lookup(sse_norm);
  (void)x_end;

  xqr = AOMMAX(xqr, x_start + x_step + epsilon);
  xqr = AOMMIN(xqr, x_end - x_step - epsilon);
  const double x = (xqr - x_start) / x_step;
  const int xi = (int)floor(x);
  const double xo = x - xi;

  assert(xi > 0);

  const double *prate = &interp_rgrid_curv[rcat][(xi - 1)];
  *rate_f = interp_cubic(prate, xo);
  const double *pdist = &interp_dgrid_curv[dcat][(xi - 1)];
  *distbysse_f = interp_cubic(pdist, xo);
}

static void get_entropy_contexts_plane(BLOCK_SIZE plane_bsize,
                                       const struct macroblockd_plane *pd,
                                       ENTROPY_CONTEXT t_above[MAX_MIB_SIZE],
                                       ENTROPY_CONTEXT t_left[MAX_MIB_SIZE]) {
  const int num_4x4_w = block_size_wide[plane_bsize] >> tx_size_wide_log2[0];
  const int num_4x4_h = block_size_high[plane_bsize] >> tx_size_high_log2[0];
  const ENTROPY_CONTEXT *const above = pd->above_context;
  const ENTROPY_CONTEXT *const left = pd->left_context;

  memcpy(t_above, above, sizeof(ENTROPY_CONTEXT) * num_4x4_w);
  memcpy(t_left, left, sizeof(ENTROPY_CONTEXT) * num_4x4_h);
}

void av1_get_entropy_contexts(BLOCK_SIZE bsize,
                              const struct macroblockd_plane *pd,
                              ENTROPY_CONTEXT t_above[MAX_MIB_SIZE],
                              ENTROPY_CONTEXT t_left[MAX_MIB_SIZE]) {
  const BLOCK_SIZE plane_bsize =
      get_plane_block_size(bsize, pd->subsampling_x, pd->subsampling_y);
  get_entropy_contexts_plane(plane_bsize, pd, t_above, t_left);
}

void av1_mv_pred(const AV1_COMP *cpi, MACROBLOCK *x, uint8_t *ref_y_buffer,
                 int ref_y_stride, int ref_frame, BLOCK_SIZE block_size) {
  int i;
  int zero_seen = 0;
  int best_sad = INT_MAX;
  int this_sad = INT_MAX;
  int max_mv = 0;
  uint8_t *src_y_ptr = x->plane[0].src.buf;
  uint8_t *ref_y_ptr;
  MV pred_mv[MAX_MV_REF_CANDIDATES + 1];
  int num_mv_refs = 0;
  const MV_REFERENCE_FRAME ref_frames[2] = { ref_frame, NONE_FRAME };
  const int_mv ref_mv =
      av1_get_ref_mv_from_stack(0, ref_frames, 0, x->mbmi_ext);
  const int_mv ref_mv1 =
      av1_get_ref_mv_from_stack(0, ref_frames, 1, x->mbmi_ext);

  pred_mv[num_mv_refs++] = ref_mv.as_mv;
  if (ref_mv.as_int != ref_mv1.as_int) {
    pred_mv[num_mv_refs++] = ref_mv1.as_mv;
  }
  if (cpi->sf.adaptive_motion_search && block_size < x->max_partition_size)
    pred_mv[num_mv_refs++] = x->pred_mv[ref_frame];

  assert(num_mv_refs <= (int)(sizeof(pred_mv) / sizeof(pred_mv[0])));

  // Get the sad for each candidate reference mv.
  for (i = 0; i < num_mv_refs; ++i) {
    const MV *this_mv = &pred_mv[i];
    int fp_row, fp_col;
    fp_row = (this_mv->row + 3 + (this_mv->row >= 0)) >> 3;
    fp_col = (this_mv->col + 3 + (this_mv->col >= 0)) >> 3;
    max_mv = AOMMAX(max_mv, AOMMAX(abs(this_mv->row), abs(this_mv->col)) >> 3);

    if (fp_row == 0 && fp_col == 0 && zero_seen) continue;
    zero_seen |= (fp_row == 0 && fp_col == 0);

    ref_y_ptr = &ref_y_buffer[ref_y_stride * fp_row + fp_col];
    // Find sad for current vector.
    this_sad = cpi->fn_ptr[block_size].sdf(src_y_ptr, x->plane[0].src.stride,
                                           ref_y_ptr, ref_y_stride);
    // Note if it is the best so far.
    if (this_sad < best_sad) {
      best_sad = this_sad;
    }
  }

  // Note the index of the mv that worked best in the reference list.
  x->max_mv_context[ref_frame] = max_mv;
  x->pred_mv_sad[ref_frame] = best_sad;
}

void av1_setup_pred_block(const MACROBLOCKD *xd,
                          struct buf_2d dst[MAX_MB_PLANE],
                          const YV12_BUFFER_CONFIG *src, int mi_row, int mi_col,
                          const struct scale_factors *scale,
                          const struct scale_factors *scale_uv,
                          const int num_planes) {
  int i;

  dst[0].buf = src->y_buffer;
  dst[0].stride = src->y_stride;
  dst[1].buf = src->u_buffer;
  dst[2].buf = src->v_buffer;
  dst[1].stride = dst[2].stride = src->uv_stride;

  for (i = 0; i < num_planes; ++i) {
    setup_pred_plane(dst + i, xd->mi[0]->sb_type, dst[i].buf,
                     i ? src->uv_crop_width : src->y_crop_width,
                     i ? src->uv_crop_height : src->y_crop_height,
                     dst[i].stride, mi_row, mi_col, i ? scale_uv : scale,
                     xd->plane[i].subsampling_x, xd->plane[i].subsampling_y);
  }
}

int av1_raster_block_offset(BLOCK_SIZE plane_bsize, int raster_block,
                            int stride) {
  const int bw = mi_size_wide_log2[plane_bsize];
  const int y = 4 * (raster_block >> bw);
  const int x = 4 * (raster_block & ((1 << bw) - 1));
  return y * stride + x;
}

int16_t *av1_raster_block_offset_int16(BLOCK_SIZE plane_bsize, int raster_block,
                                       int16_t *base) {
  const int stride = block_size_wide[plane_bsize];
  return base + av1_raster_block_offset(plane_bsize, raster_block, stride);
}

YV12_BUFFER_CONFIG *av1_get_scaled_ref_frame(const AV1_COMP *cpi,
                                             int ref_frame) {
  assert(ref_frame >= LAST_FRAME && ref_frame <= ALTREF_FRAME);
  RefCntBuffer *const scaled_buf = cpi->scaled_ref_buf[ref_frame - 1];
  const RefCntBuffer *const ref_buf =
      get_ref_frame_buf(&cpi->common, ref_frame);
  return (scaled_buf != ref_buf && scaled_buf != NULL) ? &scaled_buf->buf
                                                       : NULL;
}

int av1_get_switchable_rate(const AV1_COMMON *const cm, MACROBLOCK *x,
                            const MACROBLOCKD *xd) {
  if (cm->interp_filter == SWITCHABLE) {
    const MB_MODE_INFO *const mbmi = xd->mi[0];
    int inter_filter_cost = 0;
    int dir;

    for (dir = 0; dir < 2; ++dir) {
      const int ctx = av1_get_pred_context_switchable_interp(xd, dir);
      const InterpFilter filter =
          av1_extract_interp_filter(mbmi->interp_filters, dir);
      inter_filter_cost += x->switchable_interp_costs[ctx][filter];
    }
    return SWITCHABLE_INTERP_RATE_FACTOR * inter_filter_cost;
  } else {
    return 0;
  }
}

void av1_set_rd_speed_thresholds(AV1_COMP *cpi) {
  int i;
  RD_OPT *const rd = &cpi->rd;
  SPEED_FEATURES *const sf = &cpi->sf;

  // Set baseline threshold values.
  for (i = 0; i < MAX_MODES; ++i) rd->thresh_mult[i] = cpi->oxcf.mode == 0;

  if (sf->adaptive_rd_thresh) {
    rd->thresh_mult[THR_NEARESTMV] = 300;
    rd->thresh_mult[THR_NEARESTL2] = 300;
    rd->thresh_mult[THR_NEARESTL3] = 300;
    rd->thresh_mult[THR_NEARESTB] = 300;
    rd->thresh_mult[THR_NEARESTA2] = 300;
    rd->thresh_mult[THR_NEARESTA] = 300;
    rd->thresh_mult[THR_NEARESTG] = 300;
  } else {
    rd->thresh_mult[THR_NEARESTMV] = 0;
    rd->thresh_mult[THR_NEARESTL2] = 0;
    rd->thresh_mult[THR_NEARESTL3] = 0;
    rd->thresh_mult[THR_NEARESTB] = 0;
    rd->thresh_mult[THR_NEARESTA2] = 0;
    rd->thresh_mult[THR_NEARESTA] = 0;
    rd->thresh_mult[THR_NEARESTG] = 0;
  }

  rd->thresh_mult[THR_NEWMV] += 1000;
  rd->thresh_mult[THR_NEWL2] += 1000;
  rd->thresh_mult[THR_NEWL3] += 1000;
  rd->thresh_mult[THR_NEWB] += 1000;
  rd->thresh_mult[THR_NEWA2] = 1000;
  rd->thresh_mult[THR_NEWA] += 1000;
  rd->thresh_mult[THR_NEWG] += 1000;

  rd->thresh_mult[THR_NEARMV] += 1000;
  rd->thresh_mult[THR_NEARL2] += 1000;
  rd->thresh_mult[THR_NEARL3] += 1000;
  rd->thresh_mult[THR_NEARB] += 1000;
  rd->thresh_mult[THR_NEARA2] = 1000;
  rd->thresh_mult[THR_NEARA] += 1000;
  rd->thresh_mult[THR_NEARG] += 1000;

  rd->thresh_mult[THR_GLOBALMV] += 2000;
  rd->thresh_mult[THR_GLOBALL2] += 2000;
  rd->thresh_mult[THR_GLOBALL3] += 2000;
  rd->thresh_mult[THR_GLOBALB] += 2000;
  rd->thresh_mult[THR_GLOBALA2] = 2000;
  rd->thresh_mult[THR_GLOBALG] += 2000;
  rd->thresh_mult[THR_GLOBALA] += 2000;

  rd->thresh_mult[THR_COMP_NEAREST_NEARESTLA] += 1000;
  rd->thresh_mult[THR_COMP_NEAREST_NEARESTL2A] += 1000;
  rd->thresh_mult[THR_COMP_NEAREST_NEARESTL3A] += 1000;
  rd->thresh_mult[THR_COMP_NEAREST_NEARESTGA] += 1000;
  rd->thresh_mult[THR_COMP_NEAREST_NEARESTLB] += 1000;
  rd->thresh_mult[THR_COMP_NEAREST_NEARESTL2B] += 1000;
  rd->thresh_mult[THR_COMP_NEAREST_NEARESTL3B] += 1000;
  rd->thresh_mult[THR_COMP_NEAREST_NEARESTGB] += 1000;
  rd->thresh_mult[THR_COMP_NEAREST_NEARESTLA2] += 1000;
  rd->thresh_mult[THR_COMP_NEAREST_NEARESTL2A2] += 1000;
  rd->thresh_mult[THR_COMP_NEAREST_NEARESTL3A2] += 1000;
  rd->thresh_mult[THR_COMP_NEAREST_NEARESTGA2] += 1000;

  rd->thresh_mult[THR_COMP_NEAREST_NEARESTLL2] += 2000;
  rd->thresh_mult[THR_COMP_NEAREST_NEARESTLL3] += 2000;
  rd->thresh_mult[THR_COMP_NEAREST_NEARESTLG] += 2000;
  rd->thresh_mult[THR_COMP_NEAREST_NEARESTBA] += 2000;

  rd->thresh_mult[THR_COMP_NEAR_NEARLA] += 1200;
  rd->thresh_mult[THR_COMP_NEAREST_NEWLA] += 1500;
  rd->thresh_mult[THR_COMP_NEW_NEARESTLA] += 1500;
  rd->thresh_mult[THR_COMP_NEAR_NEWLA] += 1700;
  rd->thresh_mult[THR_COMP_NEW_NEARLA] += 1700;
  rd->thresh_mult[THR_COMP_NEW_NEWLA] += 2000;
  rd->thresh_mult[THR_COMP_GLOBAL_GLOBALLA] += 2500;

  rd->thresh_mult[THR_COMP_NEAR_NEARL2A] += 1200;
  rd->thresh_mult[THR_COMP_NEAREST_NEWL2A] += 1500;
  rd->thresh_mult[THR_COMP_NEW_NEARESTL2A] += 1500;
  rd->thresh_mult[THR_COMP_NEAR_NEWL2A] += 1700;
  rd->thresh_mult[THR_COMP_NEW_NEARL2A] += 1700;
  rd->thresh_mult[THR_COMP_NEW_NEWL2A] += 2000;
  rd->thresh_mult[THR_COMP_GLOBAL_GLOBALL2A] += 2500;

  rd->thresh_mult[THR_COMP_NEAR_NEARL3A] += 1200;
  rd->thresh_mult[THR_COMP_NEAREST_NEWL3A] += 1500;
  rd->thresh_mult[THR_COMP_NEW_NEARESTL3A] += 1500;
  rd->thresh_mult[THR_COMP_NEAR_NEWL3A] += 1700;
  rd->thresh_mult[THR_COMP_NEW_NEARL3A] += 1700;
  rd->thresh_mult[THR_COMP_NEW_NEWL3A] += 2000;
  rd->thresh_mult[THR_COMP_GLOBAL_GLOBALL3A] += 2500;

  rd->thresh_mult[THR_COMP_NEAR_NEARGA] += 1200;
  rd->thresh_mult[THR_COMP_NEAREST_NEWGA] += 1500;
  rd->thresh_mult[THR_COMP_NEW_NEARESTGA] += 1500;
  rd->thresh_mult[THR_COMP_NEAR_NEWGA] += 1700;
  rd->thresh_mult[THR_COMP_NEW_NEARGA] += 1700;
  rd->thresh_mult[THR_COMP_NEW_NEWGA] += 2000;
  rd->thresh_mult[THR_COMP_GLOBAL_GLOBALGA] += 2500;

  rd->thresh_mult[THR_COMP_NEAR_NEARLB] += 1200;
  rd->thresh_mult[THR_COMP_NEAREST_NEWLB] += 1500;
  rd->thresh_mult[THR_COMP_NEW_NEARESTLB] += 1500;
  rd->thresh_mult[THR_COMP_NEAR_NEWLB] += 1700;
  rd->thresh_mult[THR_COMP_NEW_NEARLB] += 1700;
  rd->thresh_mult[THR_COMP_NEW_NEWLB] += 2000;
  rd->thresh_mult[THR_COMP_GLOBAL_GLOBALLB] += 2500;

  rd->thresh_mult[THR_COMP_NEAR_NEARL2B] += 1200;
  rd->thresh_mult[THR_COMP_NEAREST_NEWL2B] += 1500;
  rd->thresh_mult[THR_COMP_NEW_NEARESTL2B] += 1500;
  rd->thresh_mult[THR_COMP_NEAR_NEWL2B] += 1700;
  rd->thresh_mult[THR_COMP_NEW_NEARL2B] += 1700;
  rd->thresh_mult[THR_COMP_NEW_NEWL2B] += 2000;
  rd->thresh_mult[THR_COMP_GLOBAL_GLOBALL2B] += 2500;

  rd->thresh_mult[THR_COMP_NEAR_NEARL3B] += 1200;
  rd->thresh_mult[THR_COMP_NEAREST_NEWL3B] += 1500;
  rd->thresh_mult[THR_COMP_NEW_NEARESTL3B] += 1500;
  rd->thresh_mult[THR_COMP_NEAR_NEWL3B] += 1700;
  rd->thresh_mult[THR_COMP_NEW_NEARL3B] += 1700;
  rd->thresh_mult[THR_COMP_NEW_NEWL3B] += 2000;
  rd->thresh_mult[THR_COMP_GLOBAL_GLOBALL3B] += 2500;

  rd->thresh_mult[THR_COMP_NEAR_NEARGB] += 1200;
  rd->thresh_mult[THR_COMP_NEAREST_NEWGB] += 1500;
  rd->thresh_mult[THR_COMP_NEW_NEARESTGB] += 1500;
  rd->thresh_mult[THR_COMP_NEAR_NEWGB] += 1700;
  rd->thresh_mult[THR_COMP_NEW_NEARGB] += 1700;
  rd->thresh_mult[THR_COMP_NEW_NEWGB] += 2000;
  rd->thresh_mult[THR_COMP_GLOBAL_GLOBALGB] += 2500;

  rd->thresh_mult[THR_COMP_NEAR_NEARLA2] += 1200;
  rd->thresh_mult[THR_COMP_NEAREST_NEWLA2] += 1500;
  rd->thresh_mult[THR_COMP_NEW_NEARESTLA2] += 1500;
  rd->thresh_mult[THR_COMP_NEAR_NEWLA2] += 1700;
  rd->thresh_mult[THR_COMP_NEW_NEARLA2] += 1700;
  rd->thresh_mult[THR_COMP_NEW_NEWLA2] += 2000;
  rd->thresh_mult[THR_COMP_GLOBAL_GLOBALLA2] += 2500;

  rd->thresh_mult[THR_COMP_NEAR_NEARL2A2] += 1200;
  rd->thresh_mult[THR_COMP_NEAREST_NEWL2A2] += 1500;
  rd->thresh_mult[THR_COMP_NEW_NEARESTL2A2] += 1500;
  rd->thresh_mult[THR_COMP_NEAR_NEWL2A2] += 1700;
  rd->thresh_mult[THR_COMP_NEW_NEARL2A2] += 1700;
  rd->thresh_mult[THR_COMP_NEW_NEWL2A2] += 2000;
  rd->thresh_mult[THR_COMP_GLOBAL_GLOBALL2A2] += 2500;

  rd->thresh_mult[THR_COMP_NEAR_NEARL3A2] += 1200;
  rd->thresh_mult[THR_COMP_NEAREST_NEWL3A2] += 1500;
  rd->thresh_mult[THR_COMP_NEW_NEARESTL3A2] += 1500;
  rd->thresh_mult[THR_COMP_NEAR_NEWL3A2] += 1700;
  rd->thresh_mult[THR_COMP_NEW_NEARL3A2] += 1700;
  rd->thresh_mult[THR_COMP_NEW_NEWL3A2] += 2000;
  rd->thresh_mult[THR_COMP_GLOBAL_GLOBALL3A2] += 2500;

  rd->thresh_mult[THR_COMP_NEAR_NEARGA2] += 1200;
  rd->thresh_mult[THR_COMP_NEAREST_NEWGA2] += 1500;
  rd->thresh_mult[THR_COMP_NEW_NEARESTGA2] += 1500;
  rd->thresh_mult[THR_COMP_NEAR_NEWGA2] += 1700;
  rd->thresh_mult[THR_COMP_NEW_NEARGA2] += 1700;
  rd->thresh_mult[THR_COMP_NEW_NEWGA2] += 2000;
  rd->thresh_mult[THR_COMP_GLOBAL_GLOBALGA2] += 2500;

  rd->thresh_mult[THR_COMP_NEAR_NEARLL2] += 1600;
  rd->thresh_mult[THR_COMP_NEAREST_NEWLL2] += 2000;
  rd->thresh_mult[THR_COMP_NEW_NEARESTLL2] += 2000;
  rd->thresh_mult[THR_COMP_NEAR_NEWLL2] += 2200;
  rd->thresh_mult[THR_COMP_NEW_NEARLL2] += 2200;
  rd->thresh_mult[THR_COMP_NEW_NEWLL2] += 2400;
  rd->thresh_mult[THR_COMP_GLOBAL_GLOBALLL2] += 3200;

  rd->thresh_mult[THR_COMP_NEAR_NEARLL3] += 1600;
  rd->thresh_mult[THR_COMP_NEAREST_NEWLL3] += 2000;
  rd->thresh_mult[THR_COMP_NEW_NEARESTLL3] += 2000;
  rd->thresh_mult[THR_COMP_NEAR_NEWLL3] += 2200;
  rd->thresh_mult[THR_COMP_NEW_NEARLL3] += 2200;
  rd->thresh_mult[THR_COMP_NEW_NEWLL3] += 2400;
  rd->thresh_mult[THR_COMP_GLOBAL_GLOBALLL3] += 3200;

  rd->thresh_mult[THR_COMP_NEAR_NEARLG] += 1600;
  rd->thresh_mult[THR_COMP_NEAREST_NEWLG] += 2000;
  rd->thresh_mult[THR_COMP_NEW_NEARESTLG] += 2000;
  rd->thresh_mult[THR_COMP_NEAR_NEWLG] += 2200;
  rd->thresh_mult[THR_COMP_NEW_NEARLG] += 2200;
  rd->thresh_mult[THR_COMP_NEW_NEWLG] += 2400;
  rd->thresh_mult[THR_COMP_GLOBAL_GLOBALLG] += 3200;

  rd->thresh_mult[THR_COMP_NEAR_NEARBA] += 1600;
  rd->thresh_mult[THR_COMP_NEAREST_NEWBA] += 2000;
  rd->thresh_mult[THR_COMP_NEW_NEARESTBA] += 2000;
  rd->thresh_mult[THR_COMP_NEAR_NEWBA] += 2200;
  rd->thresh_mult[THR_COMP_NEW_NEARBA] += 2200;
  rd->thresh_mult[THR_COMP_NEW_NEWBA] += 2400;
  rd->thresh_mult[THR_COMP_GLOBAL_GLOBALBA] += 3200;

  rd->thresh_mult[THR_DC] += 1000;
  rd->thresh_mult[THR_PAETH] += 1000;
  rd->thresh_mult[THR_SMOOTH] += 2000;
  rd->thresh_mult[THR_SMOOTH_V] += 2000;
  rd->thresh_mult[THR_SMOOTH_H] += 2000;
  rd->thresh_mult[THR_H_PRED] += 2000;
  rd->thresh_mult[THR_V_PRED] += 2000;
  rd->thresh_mult[THR_D135_PRED] += 2500;
  rd->thresh_mult[THR_D203_PRED] += 2500;
  rd->thresh_mult[THR_D157_PRED] += 2500;
  rd->thresh_mult[THR_D67_PRED] += 2500;
  rd->thresh_mult[THR_D113_PRED] += 2500;
  rd->thresh_mult[THR_D45_PRED] += 2500;
}

void av1_update_rd_thresh_fact(const AV1_COMMON *const cm,
                               int (*factor_buf)[MAX_MODES], int rd_thresh,
                               int bsize, int best_mode_index) {
  if (rd_thresh > 0) {
    const int top_mode = MAX_MODES;
    int mode;
    for (mode = 0; mode < top_mode; ++mode) {
      const BLOCK_SIZE min_size = AOMMAX(bsize - 1, BLOCK_4X4);
      const BLOCK_SIZE max_size =
          AOMMIN(bsize + 2, (int)cm->seq_params.sb_size);
      BLOCK_SIZE bs;
      for (bs = min_size; bs <= max_size; ++bs) {
        int *const fact = &factor_buf[bs][mode];
        if (mode == best_mode_index) {
          *fact -= (*fact >> 4);
        } else {
          *fact = AOMMIN(*fact + RD_THRESH_INC, rd_thresh * RD_THRESH_MAX_FACT);
        }
      }
    }
  }
}

int av1_get_intra_cost_penalty(int qindex, int qdelta,
                               aom_bit_depth_t bit_depth) {
  const int q = av1_dc_quant_Q3(qindex, qdelta, bit_depth);
  switch (bit_depth) {
    case AOM_BITS_8: return 20 * q;
    case AOM_BITS_10: return 5 * q;
    case AOM_BITS_12: return ROUND_POWER_OF_TWO(5 * q, 2);
    default:
      assert(0 && "bit_depth should be AOM_BITS_8, AOM_BITS_10 or AOM_BITS_12");
      return -1;
  }
}
