MAPO: Mixed Advantage Policy Optimization for Long-Horizon Multi-Turn Dialogue

MAPO 는 신뢰할 수 있는 과정 감독이 부재한 주관적 다턴 대화 과제를 위해, 판사 모델의 밀집 피드백과 Monte Carlo 반환을 활용하고 턴별 및 배치별 정규화를 혼합한 어드밴티지 추정기를 도입하여 장기적 상호작용 품질을 효율적으로 최적화하는 크리티크 없는 강화학습 알고리즘을 제안합니다.

Naifan Zhang, Ruihan Sun, Jinwei Su, Hengjie Yang, Zhengyuan Pan, Zhaohan Chen, Xiaofan Zhang

게시일 2026-03-09
📖 1 분 읽기☕ 가벼운 읽기

Each language version is independently generated for its own context, not a direct translation.

🎭 1. 문제: 왜 기존 방법은 실패했을까? (과거의 방식)

기존의 인공지능 대화 학습 방식은 마치 "시험지 한 장을 보고 점수만 매기는" 방식이었습니다.

  • 상황: AI 가 10 번의 대화를 나눴다고 가정해 봅시다.
  • 기존 방식 (Outcome-only): 대화 전체가 끝난 후, "너는 잘했어, 100 점!" 혹은 "너는 못했어, 0 점!"이라고 한 번에 점수만 줍니다.
  • 문제점:
    • 만약 AI 가 처음 9 번은 아주 잘했는데, 마지막 10 번째 말 한마디로 모든 게 망쳐졌다면? AI 는 "내가 처음 9 번은 잘했구나"라는 걸 모릅니다. 그냥 "전체적으로 실패했다"고만 생각합니다.
    • 반대로 처음부터 엉망이었지만, 운 좋게 마지막에 좋은 말을 해서 점수를 받았다면? AI 는 "처음부터 엉망인 게 괜찮구나"라고 착각할 수 있습니다.
    • 핵심: 어떤 단계에서 잘했고, 어디서 잘못했는지 (Credit Assignment) 를 구분해 주지 못합니다.

🌟 2. 해결책: MAPO (새로운 방식)

저자들은 이 문제를 해결하기 위해 **"대화 중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중중