007

007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007007