// File: /workspace/github_cpp_makefile_star2_O3/wrighteagle2d[P]wrighteaglebase/Debug/../src/Kicker.cpp
// Function: Kicker::UpdateKickData(Agent const&)
void Kicker::UpdateKickData(const Agent &agent) {
  if (mAgentID == agent.GetAgentID()) {
    return; /** no need to update */
  }

  mAgentID = agent.GetAgentID();

  const BallState &ball_state = agent.GetWorldState().GetBall();
  const PlayerState &player_state = agent.GetSelf();

  /** absolute values */
  mInput.mBallPos = ball_state.GetPos();
  mInput.mBallVel = ball_state.GetVel();
  mInput.mPlayerPos = player_state.GetPos();
  mInput.mPlayerVel = player_state.GetVel();
  mInput.mPlayerBodyDir = player_state.GetBodyDir();

  /** relative values */
  mInput.mBallPos =
      (mInput.mBallPos - mInput.mPlayerPos).Rotate(-mInput.mPlayerBodyDir);
  mInput.mBallVel = mInput.mBallVel.Rotate(-mInput.mPlayerBodyDir);
  mInput.mPlayerVel = mInput.mPlayerVel.Rotate(-mInput.mPlayerBodyDir);

  /** player type is changed */
  if (mInput.mPlayerType != player_state.GetPlayerType()) {
    mInput.mPlayerType = player_state.GetPlayerType();

    for (int k = 0; k < POINTS_NUM; ++k) {
      mKickRate[k] = GetKickRate(mPoint[k], mInput.mPlayerType);
      mMaxAccel[k] = ServerParam::instance().maxPower() *
                     mKickRate[k]; //计算出对应该点最大的eff_power
    }

    for (int i = 0; i < POINTS_NUM; ++i) //考虑kick_rand
    {
      AngleDeg angle_diff = mPoint[i].Dir();
      angle_diff = GetNormalizeAngleDeg(angle_diff);
      double dir_diff = Deg2Rad(fabs(angle_diff));
      double dist_2_ball = mPoint[i].Mod() -
                           PlayerParam::instance()
                               .HeteroPlayer(mInput.mPlayerType)
                               .playerSize() -
                           ServerParam::instance().ballSize();
      double kick_pos_rand =
          dir_diff / M_PI + dist_2_ball / PlayerParam::instance()
                                              .HeteroPlayer(mInput.mPlayerType)
                                              .kickableMargin();
      mRandEva[i] = mRandCurve.GetOutput(kick_pos_rand);
    }
  }

  /** initial */
  for (int i = 0; i < POINTS_NUM; i++) {
    mPointEva[i] = mRandEva[i];
  }

  /** 排除掉一定不能踢的点 */
  Vector ball_next_pos = mInput.mBallPos + mInput.mBallVel - mInput.mPlayerVel;
  double eff_power =
      ServerParam::instance().maxPower() *
      agent.GetSelf().GetKickRate(); //球在当前位置下的实际可以踢到的最大加速度
  double outside_buf = 0.3;
  Vector temp_pos = Vector(0.0, 0.0);

  double x_max = ServerParam::instance().PITCH_LENGTH * 0.5 -
                 mInput.mPlayerPos.X() - outside_buf;
  double x_min = -ServerParam::instance().PITCH_LENGTH * 0.5 -
                 mInput.mPlayerPos.X() + outside_buf;
  double y_max = ServerParam::instance().PITCH_WIDTH * 0.5 -
                 mInput.mPlayerPos.Y() - outside_buf;
  double y_min = -ServerParam::instance().PITCH_WIDTH * 0.5 -
                 mInput.mPlayerPos.Y() + outside_buf;

  for (int i = 0; i < POINTS_NUM; i++) {
    temp_pos =
        (mInput.mPlayerVel + mPoint[i])
            .Rotate(mInput.mPlayerBodyDir); /** 把x正方向变为和球场一样 */
    if (ball_next_pos.Dist(mPoint[i]) > eff_power /** 踢不到该点 */
        || temp_pos.X() > x_max || temp_pos.X() < x_min ||
        temp_pos.Y() > y_max || temp_pos.Y() < y_min) /** 会出界 */
    {
      mPointEva[i] = 0.0;
      continue;
    }
  }

  /** 考虑近身对手，不用InfoState的东西，接口更简单 */
  int min_unum = 0;
  double min_dist = 100.0;
  for (int i = 1; i <= TEAMSIZE; ++i) {
    double opp_kick_area;
    if (i == agent.GetWorldState().GetOpponentGoalieUnum()) {
      opp_kick_area = ServerParam::instance().maxCatchableArea();
    } else {
      opp_kick_area = agent.GetWorldState().GetOpponent(i).GetKickableArea();
    }
    double dist = agent.GetWorldState().GetOpponent(i).GetPos().Dist(
                      ball_state.GetPos()) -
                  opp_kick_area;

    if (dist < min_dist) {
      min_dist = dist;
      min_unum = i;
    }
  }

  if (min_unum != 0) {
    double opp_kick_area = 0.0;
    Vector opp_next_pos = agent.GetWorldState().GetOpponent(min_unum).GetPos();
    opp_next_pos = (opp_next_pos - (mInput.mPlayerPos + mInput.mPlayerVel))
                       .Rotate(-mInput.mPlayerBodyDir);
    if (min_unum == agent.GetWorldState().GetOpponentGoalieUnum()) {
      opp_kick_area = ServerParam::instance().maxCatchableArea();
    } else {
      opp_kick_area =
          agent.GetWorldState().GetOpponent(min_unum).GetKickableArea();
    }

    if (opp_next_pos.Mod() < opp_kick_area + 2.0) {
      double dist = 0.0;
      for (int i = 0; i < POINTS_NUM; i++) {
        dist = opp_next_pos.Dist(mPoint[i]) - opp_kick_area;
        mPointEva[i] *= mOppCurve.GetOutput(dist);
      }
    }
  }

  /** max kick rand factor */
  mMaxRandFactor = GetMaxKickRand(mInput.mBallPos, ball_state.GetVel(),
                                  player_state.GetPlayerType(),
                                  ServerParam::instance().maxPower());
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0xa8, %rsp
movq %rdi, %rbx
movl 0x8(%rsi), %eax
movq 0x18(%rsi), %rcx
movq 0x10(%rcx), %rcx
movq %rsi, -0x48(%rbp)
movb 0xc(%rsi), %dl
movl %eax, -0x60(%rbp)
movq %rcx, -0x5c(%rbp)
movb %dl, -0x54(%rbp)
movq -0x58(%rbp), %rsi
cmpl %esi, 0x8(%rdi)
jne 0x2d4f3
movq -0x60(%rbp), %rdi
movq %rdi, %r8
shrq $0x20, %r8
cmpl %r8d, 0x4(%rbx)
jne 0x2d4f3
cmpl %edi, (%rbx)
jne 0x2d4f3
shrq $0x20, %rsi
cmpb %sil, 0xc(%rbx)
je 0x2df93
leaq -0x60(%rbp), %r12
movl %eax, (%r12)
movq %rcx, 0x4(%r12)
movb %dl, 0xc(%r12)
movq (%r12), %rax
movq 0x8(%r12), %rcx
movq %rax, (%rbx)
movl %ecx, 0x8(%rbx)
shrq $0x20, %rcx
movb %cl, 0xc(%rbx)
movq -0x48(%rbp), %rdi
movq 0x18(%rdi), %r15
callq 0xe75a
movq %rax, %r14
movups 0x38(%r15), %xmm0
movups %xmm0, 0x2b45b0(%rbx)
leaq 0x2b45c0(%rbx), %rax
movq %rax, -0x30(%rbp)
movq %r15, -0x68(%rbp)
movups 0x60(%r15), %xmm0
movups %xmm0, 0x2b45c0(%rbx)
movups 0x8(%r14), %xmm0
movups %xmm0, 0x2b4588(%rbx)
leaq 0x2b4598(%rbx), %r15
movups 0x30(%r14), %xmm0
movups %xmm0, 0x2b4598(%rbx)
movsd 0xb0(%r14), %xmm0
movsd %xmm0, 0x2b45a8(%rbx)
movsd 0x2b45b0(%rbx), %xmm2
movsd 0x2b45b8(%rbx), %xmm1
subsd 0x2b4588(%rbx), %xmm2
movsd %xmm2, -0x50(%rbp)
subsd 0x2b4590(%rbx), %xmm1
movsd %xmm1, -0x40(%rbp)
mulsd 0x3baec(%rip), %xmm0    # 0x690a0
divsd 0x3ba8c(%rip), %xmm0    # 0x69048
leaq -0xa8(%rbp), %r13
movq %r12, %rdi
movq %r13, %rsi
callq 0x92d0
movsd (%r12), %xmm0
movsd (%r13), %xmm1
movsd -0x50(%rbp), %xmm3
movapd %xmm3, %xmm2
mulsd %xmm0, %xmm3
movapd %xmm3, %xmm4
movsd -0x40(%rbp), %xmm3
mulsd %xmm3, %xmm0
mulsd %xmm1, %xmm2
subsd %xmm0, %xmm2
mulsd %xmm1, %xmm3
addsd %xmm4, %xmm3
movsd %xmm2, 0x2b45b0(%rbx)
movsd %xmm3, 0x2b45b8(%rbx)
movsd 0x2b45a8(%rbx), %xmm0
xorps 0x3b9fd(%rip), %xmm0    # 0x69020
movlps %xmm0, (%r12)
movq -0x30(%rbp), %rdi
movq %r12, %rsi
callq 0x3268c
movsd %xmm0, 0x2b45c0(%rbx)
movsd %xmm1, 0x2b45c8(%rbx)
movsd 0x2b45a8(%rbx), %xmm0
xorpd 0x3b9cc(%rip), %xmm0    # 0x69020
movlpd %xmm0, (%r12)
leaq -0x60(%rbp), %rsi
movq %r15, %rdi
callq 0x3268c
movsd %xmm0, 0x2b4598(%rbx)
movsd %xmm1, 0x2b45a0(%rbx)
movq %r14, -0xa0(%rbp)
movl 0x114(%r14), %eax
cmpl %eax, 0x2b4580(%rbx)
je 0x2d958
movl %eax, 0x2b4580(%rbx)
leaq 0x48(%rbx), %r13
movl $0x568bd, %r14d         # imm = 0x568BD
movq %r13, %r12
movslq 0x2b4580(%rbx), %r15
movq %r12, %rdi
callq 0xe702
andpd 0x3b956(%rip), %xmm0    # 0x69010
movapd %xmm0, -0x40(%rbp)
movsd (%r12), %xmm0
movsd 0x8(%r12), %xmm1
mulsd %xmm1, %xmm1
mulsd %xmm0, %xmm0
addsd %xmm1, %xmm0
sqrtsd %xmm0, %xmm0
movsd %xmm0, -0x30(%rbp)
callq 0x43dce
movq 0x5c38(%rax), %rax
imulq $0x3700, %r15, %r15     # imm = 0x3700
movsd -0x30(%rbp), %xmm0
subsd 0x3038(%rax,%r15), %xmm0
movsd %xmm0, -0x30(%rbp)
callq 0x49360
movsd -0x30(%rbp), %xmm0
subsd 0x30d8(%rax), %xmm0
movsd %xmm0, -0x30(%rbp)
callq 0x43dce
movq 0x5c38(%rax), %rax
movsd 0x3068(%rax,%r15), %xmm0
movsd %xmm0, -0x50(%rbp)
movsd 0x3b966(%rip), %xmm0    # 0x690a8
movapd -0x40(%rbp), %xmm1
mulsd %xmm0, %xmm1
divsd 0x3b90d(%rip), %xmm1    # 0x69060
addsd 0x3b8fd(%rip), %xmm1    # 0x69058
movapd %xmm1, -0x40(%rbp)
movsd -0x30(%rbp), %xmm1
mulsd %xmm0, %xmm1
movsd %xmm1, -0x30(%rbp)
callq 0x43dce
movq 0x5c38(%rax), %rax
movsd -0x30(%rbp), %xmm0
divsd 0x3040(%rax,%r15), %xmm0
movapd -0x40(%rbp), %xmm1
subsd %xmm0, %xmm1
mulsd -0x50(%rbp), %xmm1
movsd %xmm1, (%rbx,%r14,8)
callq 0x49360
movsd 0x3130(%rax), %xmm0
mulsd (%rbx,%r14,8), %xmm0
movsd %xmm0, 0x288(%rbx,%r14,8)
addq $0x10, %r12
incq %r14
cmpq $0x5690e, %r14          # imm = 0x5690E
jne 0x2d6a3
xorl %r12d, %r12d
movq %r12, %r14
shlq $0x4, %r14
addq %r13, %r14
movq %r14, %rdi
callq 0xe702
movapd %xmm0, %xmm4
movsd 0x3b871(%rip), %xmm1    # 0x69060
ucomisd %xmm0, %xmm1
jbe 0x2d819
movapd 0x3b813(%rip), %xmm0    # 0x69010
movsd 0x3b86b(%rip), %xmm2    # 0x69070
movsd 0x3b83b(%rip), %xmm3    # 0x69048
addsd %xmm2, %xmm4
ucomisd %xmm4, %xmm1
ja 0x2d80d
jmp 0x2d841
movsd 0x3b827(%rip), %xmm3    # 0x69048
ucomisd %xmm3, %xmm4
movapd 0x3b7e3(%rip), %xmm0    # 0x69010
jb 0x2d841
movsd 0x3b831(%rip), %xmm1    # 0x69068
addsd %xmm1, %xmm4
ucomisd %xmm3, %xmm4
jae 0x2d837
andpd %xmm0, %xmm4
movsd 0x3b803(%rip), %xmm0    # 0x69050
mulsd %xmm0, %xmm4
divsd %xmm3, %xmm4
movapd %xmm4, -0x40(%rbp)
movsd (%r14), %xmm0
movsd 0x8(%r14), %xmm1
mulsd %xmm1, %xmm1
mulsd %xmm0, %xmm0
addsd %xmm1, %xmm0
sqrtsd %xmm0, %xmm0
movsd %xmm0, -0x30(%rbp)
callq 0x43dce
movq 0x5c38(%rax), %rax
movslq 0x2b4580(%rbx), %rcx
imulq $0x3700, %rcx, %rcx     # imm = 0x3700
movsd -0x30(%rbp), %xmm0
subsd 0x3038(%rax,%rcx), %xmm0
movsd %xmm0, -0x30(%rbp)
callq 0x49360
movsd -0x30(%rbp), %xmm0
subsd 0x30d8(%rax), %xmm0
movsd %xmm0, -0x30(%rbp)
movapd -0x40(%rbp), %xmm0
divsd 0x3b785(%rip), %xmm0    # 0x69050
movapd %xmm0, -0x40(%rbp)
callq 0x43dce
movq 0x5c38(%rax), %rax
movslq 0x2b4580(%rbx), %rcx
imulq $0x3700, %rcx, %rcx     # imm = 0x3700
movsd -0x30(%rbp), %xmm0
divsd 0x3040(%rax,%rcx), %xmm0
addsd -0x40(%rbp), %xmm0
addsd 0x2b4540(%rbx), %xmm0
movapd %xmm0, %xmm1
movsd 0x2b4538(%rbx), %xmm0
divsd %xmm1, %xmm0
movsd 0x2b4548(%rbx), %xmm1
addsd 0x2b4530(%rbx), %xmm0
ucomisd %xmm0, %xmm1
ja 0x2d941
movsd 0x2b4550(%rbx), %xmm2
ucomisd %xmm2, %xmm0
movapd %xmm0, %xmm1
jbe 0x2d941
movapd %xmm2, %xmm1
movsd %xmm1, 0x2b4af8(%rbx,%r12,8)
incq %r12
cmpq $0x51, %r12
jne 0x2d7d1
leaq 0x2b45b0(%rbx), %rax
movq %rax, -0x98(%rbp)
leaq 0x2b45a8(%rbx), %r13
movq $-0x51, %rax
movsd 0x2b4d80(%rbx,%rax,8), %xmm0
movsd %xmm0, 0x2b5008(%rbx,%rax,8)
incq %rax
jne 0x2d974
movsd 0x2b45b0(%rbx), %xmm0
movsd 0x2b45b8(%rbx), %xmm1
addsd 0x2b45c0(%rbx), %xmm0
addsd 0x2b45c8(%rbx), %xmm1
subsd 0x2b4598(%rbx), %xmm0
movsd %xmm0, -0x40(%rbp)
subsd 0x2b45a0(%rbx), %xmm1
movsd %xmm1, -0x50(%rbp)
callq 0x49360
movsd 0x3130(%rax), %xmm0
movsd %xmm0, -0x30(%rbp)
movq -0x48(%rbp), %rdi
callq 0xe75a
movsd -0x30(%rbp), %xmm0
mulsd 0x130(%rax), %xmm0
movsd %xmm0, -0x30(%rbp)
callq 0x49360
leaq 0x3e4ea(%rip), %rax     # 0x6bee8
movsd (%rax), %xmm0
movapd %xmm0, -0x90(%rbp)
mulsd 0x3be66(%rip), %xmm0    # 0x69878
subsd 0x2b4588(%rbx), %xmm0
addsd 0x3cece(%rip), %xmm0    # 0x6a8f0
movapd %xmm0, -0xd0(%rbp)
callq 0x49360
movapd 0x3b5e9(%rip), %xmm0    # 0x69020
movapd -0x90(%rbp), %xmm1
xorpd %xmm0, %xmm1
mulsd 0x3be2d(%rip), %xmm1    # 0x69878
subsd 0x2b4588(%rbx), %xmm1
addsd 0x3bf7d(%rip), %xmm1    # 0x699d8
movapd %xmm1, -0x90(%rbp)
callq 0x49360
leaq 0x3e481(%rip), %rax     # 0x6bef0
movsd (%rax), %xmm0
movapd %xmm0, -0x80(%rbp)
mulsd 0x3bdf8(%rip), %xmm0    # 0x69878
subsd 0x2b4590(%rbx), %xmm0
addsd 0x3ce60(%rip), %xmm0    # 0x6a8f0
movapd %xmm0, -0xc0(%rbp)
callq 0x49360
movapd -0x80(%rbp), %xmm0
xorpd 0x3b576(%rip), %xmm0    # 0x69020
mulsd 0x3bdc6(%rip), %xmm0    # 0x69878
subsd 0x2b4590(%rbx), %xmm0
addsd 0x3bf16(%rip), %xmm0    # 0x699d8
movapd %xmm0, -0x80(%rbp)
xorl %r14d, %r14d
leaq -0x60(%rbp), %r12
movsd 0x2b4598(%rbx), %xmm0
movsd 0x2b45a0(%rbx), %xmm1
addsd 0x48(%rbx,%r14,2), %xmm0
addsd 0x50(%rbx,%r14,2), %xmm1
movsd %xmm0, -0x60(%rbp)
movsd %xmm1, -0x58(%rbp)
movq %r12, %rdi
movq %r13, %rsi
callq 0x3268c
movsd -0x40(%rbp), %xmm2
subsd 0x48(%rbx,%r14,2), %xmm2
movsd -0x50(%rbp), %xmm3
subsd 0x50(%rbx,%r14,2), %xmm3
mulsd %xmm3, %xmm3
mulsd %xmm2, %xmm2
addsd %xmm3, %xmm2
sqrtsd %xmm2, %xmm2
ucomisd -0x30(%rbp), %xmm2
ja 0x2db5d
ucomisd -0xd0(%rbp), %xmm0
ja 0x2db5d
movapd -0x90(%rbp), %xmm2
ucomisd %xmm0, %xmm2
ja 0x2db5d
ucomisd -0xc0(%rbp), %xmm1
ja 0x2db5d
movapd -0x80(%rbp), %xmm0
ucomisd %xmm1, %xmm0
jbe 0x2db69
movq $0x0, 0x2b4d80(%rbx,%r14)
addq $0x8, %r14
cmpq $0x288, %r14            # imm = 0x288
jne 0x2dace
movq -0x48(%rbp), %rax
movq 0x18(%rax), %rdi
xorl %r13d, %r13d
movsd 0x3bba3(%rip), %xmm0    # 0x69730
movl $0x1, %r14d
movl $0x10d0, %r12d          # imm = 0x10D0
movsd %xmm0, -0x30(%rbp)
movl 0x2114(%rdi), %eax
cmpq %rax, %r14
jne 0x2dbba
callq 0x49360
addq $0x3458, %rax           # imm = 0x3458
leaq -0x1(%r14), %r15
jmp 0x2dbc8
leaq -0x1(%r14), %r15
movq (%rdi,%r12), %rax
addq %r12, %rdi
callq *0x10(%rax)
movq -0x48(%rbp), %rcx
movq 0x18(%rcx), %rdi
imulq $0x178, %r15, %rcx      # imm = 0x178
movsd 0x10d8(%rdi,%rcx), %xmm0
movsd 0x10e0(%rdi,%rcx), %xmm1
movq -0x68(%rbp), %rcx
subsd 0x38(%rcx), %xmm0
subsd 0x40(%rcx), %xmm1
mulsd %xmm1, %xmm1
mulsd %xmm0, %xmm0
addsd %xmm1, %xmm0
sqrtsd %xmm0, %xmm0
subsd (%rax), %xmm0
movsd -0x30(%rbp), %xmm1
ucomisd %xmm0, %xmm1
cmoval %r14d, %r13d
minsd %xmm1, %xmm0
incq %r14
movl $0x178, %eax            # imm = 0x178
addq %rax, %r12
cmpq $0xc, %r14
jne 0x2db99
testl %r13d, %r13d
je 0x2de05
addq $0x10d0, %rdi           # imm = 0x10D0
leal -0x1(%r13), %eax
cltq
imulq $0x178, %rax, %r15      # imm = 0x178
movsd 0x8(%rdi,%r15), %xmm3
movsd 0x10(%rdi,%r15), %xmm2
movsd 0x2b4588(%rbx), %xmm0
movsd 0x2b4590(%rbx), %xmm1
addsd 0x2b4598(%rbx), %xmm0
subsd %xmm0, %xmm3
movsd %xmm3, -0x40(%rbp)
addsd 0x2b45a0(%rbx), %xmm1
subsd %xmm1, %xmm2
movsd %xmm2, -0x30(%rbp)
movsd 0x2b45a8(%rbx), %xmm0
mulsd 0x3b402(%rip), %xmm0    # 0x690a0
divsd 0x3b3a2(%rip), %xmm0    # 0x69048
leaq -0x60(%rbp), %r14
leaq -0xa8(%rbp), %r12
movq %r14, %rdi
movq %r12, %rsi
callq 0x92d0
movsd (%r14), %xmm0
movsd (%r12), %xmm1
movsd -0x40(%rbp), %xmm3
movapd %xmm3, %xmm2
mulsd %xmm0, %xmm3
movsd -0x30(%rbp), %xmm4
mulsd %xmm4, %xmm0
mulsd %xmm1, %xmm2
subsd %xmm0, %xmm2
movsd %xmm2, -0x40(%rbp)
mulsd %xmm1, %xmm4
addsd %xmm3, %xmm4
movsd %xmm4, -0x30(%rbp)
movq -0x48(%rbp), %rax
movq 0x18(%rax), %rax
cmpl 0x2114(%rax), %r13d
jne 0x2dd15
callq 0x49360
addq $0x3458, %rax           # imm = 0x3458
jmp 0x2dd26
leaq (%rax,%r15), %rdi
addq $0x10d0, %rdi           # imm = 0x10D0
movq (%rdi), %rax
callq *0x10(%rax)
movsd (%rax), %xmm0
movsd -0x30(%rbp), %xmm8
movapd %xmm8, %xmm1
mulsd %xmm8, %xmm1
movsd -0x40(%rbp), %xmm9
movapd %xmm9, %xmm2
mulsd %xmm9, %xmm2
addsd %xmm1, %xmm2
xorps %xmm1, %xmm1
sqrtsd %xmm2, %xmm1
movsd 0x3ba23(%rip), %xmm2    # 0x69780
addsd %xmm0, %xmm2
ucomisd %xmm1, %xmm2
jbe 0x2de05
movsd 0x2b4508(%rbx), %xmm1
movsd 0x2b4510(%rbx), %xmm2
movsd 0x2b4518(%rbx), %xmm3
movsd 0x2b4520(%rbx), %xmm4
movsd 0x2b4528(%rbx), %xmm5
xorl %eax, %eax
movapd %xmm9, %xmm6
subsd 0x48(%rbx,%rax,2), %xmm6
movapd %xmm8, %xmm7
subsd 0x50(%rbx,%rax,2), %xmm7
mulsd %xmm7, %xmm7
mulsd %xmm6, %xmm6
addsd %xmm7, %xmm6
sqrtsd %xmm6, %xmm6
subsd %xmm0, %xmm6
addsd %xmm3, %xmm6
movapd %xmm2, %xmm7
divsd %xmm6, %xmm7
addsd %xmm1, %xmm7
ucomisd %xmm7, %xmm4
movapd %xmm4, %xmm6
ja 0x2dde7
ucomisd %xmm5, %xmm7
movapd %xmm7, %xmm6
jbe 0x2dde7
movapd %xmm5, %xmm6
mulsd 0x2b4d80(%rbx,%rax), %xmm6
movsd %xmm6, 0x2b4d80(%rbx,%rax)
addq $0x8, %rax
cmpq $0x288, %rax            # imm = 0x288
jne 0x2dd95
movq -0xa0(%rbp), %rax
movslq 0x114(%rax), %r14
callq 0x49360
movsd 0x3130(%rax), %xmm0
movsd %xmm0, -0x48(%rbp)
movq -0x98(%rbp), %rdi
callq 0xe702
andps 0x3b1d8(%rip), %xmm0    # 0x69010
movaps %xmm0, -0x40(%rbp)
movsd 0x2b45b0(%rbx), %xmm0
movsd 0x2b45b8(%rbx), %xmm1
mulsd %xmm1, %xmm1
mulsd %xmm0, %xmm0
addsd %xmm1, %xmm0
sqrtsd %xmm0, %xmm0
movsd %xmm0, -0x30(%rbp)
callq 0x43dce
movq 0x5c38(%rax), %rax
imulq $0x3700, %r14, %r14     # imm = 0x3700
movsd -0x30(%rbp), %xmm0
subsd 0x3038(%rax,%r14), %xmm0
movsd %xmm0, -0x30(%rbp)
callq 0x49360
movsd -0x30(%rbp), %xmm0
subsd 0x30d8(%rax), %xmm0
movsd %xmm0, -0x30(%rbp)
movapd -0x40(%rbp), %xmm0
divsd 0x3b19c(%rip), %xmm0    # 0x69048
movapd %xmm0, -0x40(%rbp)
callq 0x43dce
movq 0x5c38(%rax), %rax
movsd -0x30(%rbp), %xmm1
divsd 0x3040(%rax,%r14), %xmm1
addsd -0x40(%rbp), %xmm1
mulsd 0x3b1cf(%rip), %xmm1    # 0x690a8
movsd 0x3b997(%rip), %xmm0    # 0x69878
addsd %xmm0, %xmm1
movsd %xmm1, -0x30(%rbp)
movq -0x68(%rbp), %rax
movsd 0x60(%rax), %xmm0
movsd 0x68(%rax), %xmm1
mulsd %xmm1, %xmm1
mulsd %xmm0, %xmm0
addsd %xmm1, %xmm0
sqrtsd %xmm0, %xmm0
movsd %xmm0, -0x40(%rbp)
callq 0x49360
movsd 0x30f8(%rax), %xmm0
movsd %xmm0, -0x68(%rbp)
callq 0x49360
movsd -0x68(%rbp), %xmm1
mulsd 0x30e0(%rax), %xmm1
movsd -0x40(%rbp), %xmm0
divsd %xmm1, %xmm0
movsd 0x3b936(%rip), %xmm1    # 0x69878
mulsd %xmm1, %xmm0
addsd %xmm1, %xmm0
addsd -0x30(%rbp), %xmm0
movsd %xmm0, -0x40(%rbp)
callq 0x43dce
movq 0x5c38(%rax), %rax
movsd 0x3048(%rax,%r14), %xmm0
movsd %xmm0, -0x30(%rbp)
callq 0x49360
movsd -0x48(%rbp), %xmm0
divsd 0x3130(%rax), %xmm0
mulsd -0x30(%rbp), %xmm0
mulsd -0x40(%rbp), %xmm0
movsd %xmm0, 0x2b5008(%rbx)
addq $0xa8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
nop