Console Output
Skipping 32,182 KB..
Full LogTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTest
[Pipeline] sh
+ curl -X POST http://159.27.114.184:31018/ota-api/otaUploadFileAndVersion --form 'Content-Type="multipart/form-data"' --form 'file=@"/root/workspace/params-submodule/jining-liangshan-submodule/JNLSG_JL_AT017/master/params_module_orin_master_JNLSG_JL_AT017_2026-08-16_17-02-19.zip"' --form 'version=@"/root/workspace/params-submodule/jining-liangshan-submodule/JNLSG_JL_AT017/master/version.json"'
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
2 269M 0 0 2 6464k 0 8362k 0:00:33 --:--:-- 0:00:33 8351k
3 269M 0 0 3 10.5M 0 6159k 0:00:44 0:00:01 0:00:43 6155k
5 269M 0 0 5 15.6M 0 5799k 0:00:47 0:00:02 0:00:45 5797k
7 269M 0 0 7 19.8M 0 5397k 0:00:51 0:00:03 0:00:48 5395k
8 269M 0 0 8 24.1M 0 5177k 0:00:53 0:00:04 0:00:49 5176k
10 269M 0 0 10 29.0M 0 5173k 0:00:53 0:00:05 0:00:48 4678k
12 269M 0 0 12 33.3M 0 5028k 0:00:54 0:00:06 0:00:48 4634k
13 269M 0 0 13 37.3M 0 4929k 0:00:56 0:00:07 0:00:49 4450k
15 269M 0 0 15 41.9M 0 4898k 0:00:56 0:00:08 0:00:48 4523k
17 269M 0 0 17 46.5M 0 4884k 0:00:56 0:00:09 0:00:47 4602k
19 269M 0 0 19 51.5M 0 4902k 0:00:56 0:00:10 0:00:46 4592k
20 269M 0 0 20 56.5M 0 4913k 0:00:56 0:00:11 0:00:45 4757k
22 269M 0 0 22 61.6M 0 4948k 0:00:55 0:00:12 0:00:43 4977k
24 269M 0 0 24 65.7M 0 4894k 0:00:56 0:00:13 0:00:43 4888k
26 269M 0 0 26 70.1M 0 4872k 0:00:56 0:00:14 0:00:42 4849k
27 269M 0 0 27 75.3M 0 4891k 0:00:56 0:00:15 0:00:41 4866k
29 269M 0 0 29 78.9M 0 4817k 0:00:57 0:00:16 0:00:41 4592k
30 269M 0 0 30 83.4M 0 4810k 0:00:57 0:00:17 0:00:40 4458k
32 269M 0 0 32 88.3M 0 4817k 0:00:57 0:00:18 0:00:39 4605k
34 269M 0 0 34 92.8M 0 4814k 0:00:57 0:00:19 0:00:38 4645k
36 269M 0 0 36 97.5M 0 4813k 0:00:57 0:00:20 0:00:37 4566k
37 269M 0 0 37 102M 0 4815k 0:00:57 0:00:21 0:00:36 4806k
39 269M 0 0 39 107M 0 4814k 0:00:57 0:00:22 0:00:35 4825k
41 269M 0 0 41 111M 0 4816k 0:00:57 0:00:23 0:00:34 4814k
43 269M 0 0 43 116M 0 4817k 0:00:57 0:00:24 0:00:33 4829k
45 269M 0 0 45 121M 0 4829k 0:00:57 0:00:25 0:00:32 4894k
46 269M 0 0 46 126M 0 4842k 0:00:57 0:00:26 0:00:31 4959k
48 269M 0 0 48 131M 0 4860k 0:00:56 0:00:27 0:00:29 5070k
50 269M 0 0 50 136M 0 4838k 0:00:57 0:00:28 0:00:29 4942k
51 269M 0 0 51 138M 0 4775k 0:00:57 0:00:29 0:00:28 4569k
52 269M 0 0 52 141M 0 4698k 0:00:58 0:00:30 0:00:28 4025k
53 269M 0 0 53 144M 0 4663k 0:00:59 0:00:31 0:00:28 3712k
55 269M 0 0 55 148M 0 4648k 0:00:59 0:00:32 0:00:27 3471k
56 269M 0 0 56 153M 0 4643k 0:00:59 0:00:33 0:00:26 3513k
58 269M 0 0 58 158M 0 4664k 0:00:59 0:00:34 0:00:25 4001k
60 269M 0 0 60 162M 0 4654k 0:00:59 0:00:35 0:00:24 4384k
61 269M 0 0 61 166M 0 4648k 0:00:59 0:00:36 0:00:23 4554k
63 269M 0 0 63 172M 0 4662k 0:00:59 0:00:37 0:00:22 4757k
65 269M 0 0 65 176M 0 4663k 0:00:59 0:00:38 0:00:21 4800k
66 269M 0 0 66 180M 0 4648k 0:00:59 0:00:39 0:00:20 4539k
68 269M 0 0 68 185M 0 4657k 0:00:59 0:00:40 0:00:19 4681k
70 269M 0 0 70 189M 0 4645k 0:00:59 0:00:41 0:00:18 4622k
71 269M 0 0 71 193M 0 4635k 0:00:59 0:00:42 0:00:17 4427k
73 269M 0 0 73 198M 0 4647k 0:00:59 0:00:43 0:00:16 4523k
75 269M 0 0 75 203M 0 4655k 0:00:59 0:00:44 0:00:15 4707k
76 269M 0 0 76 207M 0 4642k 0:00:59 0:00:45 0:00:14 4517k
78 269M 0 0 78 212M 0 4650k 0:00:59 0:00:46 0:00:13 4685k
80 269M 0 0 80 217M 0 4661k 0:00:59 0:00:47 0:00:12 4880k
82 269M 0 0 82 221M 0 4645k 0:00:59 0:00:48 0:00:11 4621k
83 269M 0 0 83 225M 0 4648k 0:00:59 0:00:49 0:00:10 4587k
85 269M 0 0 85 230M 0 4651k 0:00:59 0:00:50 0:00:09 4733k
86 269M 0 0 86 234M 0 4633k 0:00:59 0:00:51 0:00:08 4483k
88 269M 0 0 88 239M 0 4638k 0:00:59 0:00:52 0:00:07 4419k
90 269M 0 0 90 243M 0 4641k 0:00:59 0:00:53 0:00:06 4610k
91 269M 0 0 91 247M 0 4627k 0:00:59 0:00:54 0:00:05 4422k
93 269M 0 0 93 252M 0 4633k 0:00:59 0:00:55 0:00:04 4454k
95 269M 0 0 95 257M 0 4645k 0:00:59 0:00:56 0:00:03 4763k
96 269M 0 0 96 261M 0 4629k 0:00:59 0:00:57 0:00:02 4534k
98 269M 0 0 98 265M 0 4632k 0:00:59 0:00:58 0:00:01 4532k
100 269M 0 0 100 269M 0 4564k 0:01:00 0:01:00 --:--:-- 3962k
100 269M 0 0 100 269M 0 4490k 0:01:01 0:01:01 --:--:-- 3093k
100 269M 0 0 100 269M 0 4418k 0:01:02 0:01:02 --:--:-- 2179k
100 269M 0 0 100 269M 0 4348k 0:01:03 0:01:03 --:--:-- 1516k
100 269M 0 0 100 269M 0 4281k 0:01:04 0:01:04 --:--:-- 677k
100 269M 0 0 100 269M 0 4215k 0:01:05 0:01:05 --:--:-- 0
100 269M 0 0 100 269M 0 4152k 0:01:06 0:01:06 --:--:-- 0
100 269M 0 0 100 269M 0 4090k 0:01:07 0:01:07 --:--:-- 0
100 269M 0 0 100 269M 0 4030k 0:01:08 0:01:08 --:--:-- 0
100 269M 0 0 100 269M 0 3972k 0:01:09 0:01:09 --:--:-- 0
100 269M 0 0 100 269M 0 3916k 0:01:10 0:01:10 --:--:-- 0
100 269M 0 0 100 269M 0 3861k 0:01:11 0:01:11 --:--:-- 0
100 269M 0 0 100 269M 0 3808k 0:01:12 0:01:12 --:--:-- 0
100 269M 0 0 100 269M 0 3756k 0:01:13 0:01:13 --:--:-- 0
100 269M 0 0 100 269M 0 3706k 0:01:14 0:01:14 --:--:-- 0
100 269M 0 0 100 269M 0 3656k 0:01:15 0:01:15 --:--:-- 0
100 269M 0 0 100 269M 0 3609k 0:01:16 0:01:16 --:--:-- 0
100 269M 0 0 100 269M 0 3562k 0:01:17 0:01:17 --:--:-- 0
100 269M 0 0 100 269M 0 3517k 0:01:18 0:01:18 --:--:-- 0
100 269M 0 0 100 269M 0 3472k 0:01:19 0:01:19 --:--:-- 0
100 269M 0 0 100 269M 0 3429k 0:01:20 0:01:20 --:--:-- 0
100 269M 0 0 100 269M 0 3387k 0:01:21 0:01:21 --:--:-- 0
100 269M 0 0 100 269M 0 3346k 0:01:22 0:01:22 --:--:-- 0
100 269M 0 0 100 269M 0 3306k 0:01:23 0:01:23 --:--:-- 0
100 269M 0 0 100 269M 0 3267k 0:01:24 0:01:24 --:--:-- 0
100 269M 0 0 100 269M 0 3228k 0:01:25 0:01:25 --:--:-- 0
100 269M 0 0 100 269M 0 3191k 0:01:26 0:01:26 --:--:-- 0
100 269M 0 0 100 269M 0 3155k 0:01:27 0:01:27 --:--:-- 0
100 269M 0 43 100 269M 0 3125k 0:01:28 0:01:28 --:--:-- 8
100 269M 0 43 100 269M 0 3125k 0:01:28 0:01:28 --:--:-- 11
[Pipeline] echo
{"msg":"操作成功","code":200,"data":""}
[Pipeline] readJSON
[Pipeline] echo
[msg:操作成功, code:200, data:]
[Pipeline] echo
status:200
[Pipeline] echo
{"msg":"操作成功","code":200,"data":""}
[Pipeline] }
[Pipeline] // dir
[Pipeline] sh
+ rm -rf /root/workspace/params-submodule/jining-liangshan-submodule/JNLSG_JL_AT017/master@tmp
[Pipeline] sh
+ rm -rf /root/workspace/params-submodule/jining-liangshan-submodule/JNLSG_JL_AT017/master/params_submodule/
[Pipeline] echo
------------------------------------- JNLSG_JL_AT017压缩并上传,slave -------------------------------------------
[Pipeline] dir
Running in /root/workspace/params-submodule/jining-liangshan-submodule/JNLSG_JL_AT017/slave
[Pipeline] {
[Pipeline] sh
+ cd /root/workspace/params-submodule/jining-liangshan-submodule/JNLSG_JL_AT017/slave/params/
+ ls -d crane_align/ crane_detection/ data_collection/ extrinsics/ hardware/ hdmap/ hdmap_interface/ hesai_lidar/ imv_spreader_detection/ lane_detection/ lidar_camera_fusion/ lidar_correction_files/ lidar_loc_v2/ master/ new_truck_spreader_detection/ perception/ pncc_common_config/ pncc_port_related_config/ pncc_vehicle_related_config/ pointcloud/ prediction/ rslidar_sdk/ slave/ spreader_detection/ system-ros/
[Pipeline] echo
crane_align/
crane_detection/
data_collection/
extrinsics/
hardware/
hdmap/
hdmap_interface/
hesai_lidar/
imv_spreader_detection/
lane_detection/
lidar_camera_fusion/
lidar_correction_files/
lidar_loc_v2/
master/
new_truck_spreader_detection/
perception/
pncc_common_config/
pncc_port_related_config/
pncc_vehicle_related_config/
pointcloud/
prediction/
rslidar_sdk/
slave/
spreader_detection/
system-ros/
[Pipeline] echo
最终目录包含slave目录,进行合并操作
[Pipeline] sh
+ cp -r /root/workspace/params-submodule/jining-liangshan-submodule/JNLSG_JL_AT017/slave/params/slave/camera_driver /root/workspace/params-submodule/jining-liangshan-submodule/JNLSG_JL_AT017/slave/params/slave/recorder.toml /root/workspace/params-submodule/jining-liangshan-submodule/JNLSG_JL_AT017/slave/params/slave/system-ros /root/workspace/params-submodule/jining-liangshan-submodule/JNLSG_JL_AT017/slave/params/
[Pipeline] sh
+ mkdir -p params_module_orin_slave_JNLSG_JL_AT017_2026-08-16_17-02-19/
+ mv params/ params_module_orin_slave_JNLSG_JL_AT017_2026-08-16_17-02-19/
[Pipeline] sh
+ zip -rq params_module_orin_slave_JNLSG_JL_AT017_2026-08-16_17-02-19.zip params_module_orin_slave_JNLSG_JL_AT017_2026-08-16_17-02-19 ./version.json
[Pipeline] echo
/root/workspace/params-submodule/jining-liangshan-submodule/JNLSG_JL_AT017/slave/params_module_orin_slave_JNLSG_JL_AT017_2026-08-16_17-02-19.zip,/root/workspace/params-submodule/jining-liangshan-submodule/JNLSG_JL_AT017/slave/version.json
[Pipeline] sh
+ curl -X POST http://159.27.114.184:31018/ota-api/otaUploadFileAndVersion --form 'Content-Type="multipart/form-data"' --form 'file=@"/root/workspace/params-submodule/jining-liangshan-submodule/JNLSG_JL_AT017/slave/params_module_orin_slave_JNLSG_JL_AT017_2026-08-16_17-02-19.zip"' --form 'version=@"/root/workspace/params-submodule/jining-liangshan-submodule/JNLSG_JL_AT017/slave/version.json"'
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
2 260M 0 0 2 5376k 0 9.7M 0:00:26 --:--:-- 0:00:26 9992k
3 260M 0 0 3 9920k 0 6509k 0:00:40 0:00:01 0:00:39 6504k
5 260M 0 0 5 13.8M 0 5637k 0:00:47 0:00:02 0:00:45 5635k
7 260M 0 0 7 18.7M 0 5468k 0:00:48 0:00:03 0:00:45 5466k
8 260M 0 0 8 23.0M 0 5224k 0:00:50 0:00:04 0:00:46 5223k
10 260M 0 0 10 27.0M 0 5016k 0:00:53 0:00:05 0:00:48 4477k
12 260M 0 0 12 32.1M 0 5044k 0:00:52 0:00:06 0:00:46 4597k
14 260M 0 0 14 36.8M 0 5009k 0:00:53 0:00:07 0:00:46 4697k
15 260M 0 0 15 39.6M 0 4764k 0:00:55 0:00:08 0:00:47 4272k
16 260M 0 0 16 43.6M 0 4695k 0:00:56 0:00:09 0:00:47 4216k
18 260M 0 0 18 48.6M 0 4741k 0:00:56 0:00:10 0:00:46 4438k
20 260M 0 0 20 53.6M 0 4768k 0:00:55 0:00:11 0:00:44 4409k
22 260M 0 0 22 58.6M 0 4800k 0:00:55 0:00:12 0:00:43 4483k
24 260M 0 0 24 62.9M 0 4762k 0:00:55 0:00:13 0:00:42 4759k
25 260M 0 0 25 67.0M 0 4726k 0:00:56 0:00:14 0:00:42 4785k
27 260M 0 0 27 72.0M 0 4754k 0:00:56 0:00:15 0:00:41 4779k
29 260M 0 0 29 76.8M 0 4766k 0:00:55 0:00:16 0:00:39 4761k
31 260M 0 0 31 80.8M 0 4725k 0:00:56 0:00:17 0:00:39 4537k
32 260M 0 0 32 85.7M 0 4740k 0:00:56 0:00:18 0:00:38 4681k
34 260M 0 0 34 90.0M 0 4718k 0:00:56 0:00:19 0:00:37 4697k
36 260M 0 0 36 94.0M 0 4690k 0:00:56 0:00:20 0:00:36 4495k
38 260M 0 0 38 99.0M 0 4713k 0:00:56 0:00:21 0:00:35 4538k
39 260M 0 0 39 103M 0 4692k 0:00:56 0:00:22 0:00:34 4575k
41 260M 0 0 41 107M 0 4670k 0:00:57 0:00:23 0:00:34 4408k
43 260M 0 0 43 112M 0 4689k 0:00:56 0:00:24 0:00:32 4574k
44 260M 0 0 44 116M 0 4690k 0:00:56 0:00:25 0:00:31 4686k
46 260M 0 0 46 122M 0 4714k 0:00:56 0:00:26 0:00:30 4718k
48 260M 0 0 48 126M 0 4694k 0:00:56 0:00:27 0:00:29 4703k
50 260M 0 0 50 130M 0 4680k 0:00:56 0:00:28 0:00:28 4725k
52 260M 0 0 52 135M 0 4698k 0:00:56 0:00:29 0:00:27 4744k
53 260M 0 0 53 139M 0 4684k 0:00:56 0:00:30 0:00:26 4658k
55 260M 0 0 55 143M 0 4672k 0:00:57 0:00:31 0:00:26 4446k
57 260M 0 0 57 148M 0 4686k 0:00:56 0:00:32 0:00:24 4639k
59 260M 0 0 59 153M 0 4694k 0:00:56 0:00:33 0:00:23 4778k
61 260M 0 0 61 158M 0 4713k 0:00:56 0:00:34 0:00:22 4797k
62 260M 0 0 62 163M 0 4719k 0:00:56 0:00:35 0:00:21 4929k
64 260M 0 0 64 167M 0 4682k 0:00:56 0:00:36 0:00:20 4745k
65 260M 0 0 65 169M 0 4639k 0:00:57 0:00:37 0:00:20 4334k
66 260M 0 0 66 172M 0 4593k 0:00:57 0:00:38 0:00:19 3914k
67 260M 0 0 67 176M 0 4580k 0:00:58 0:00:39 0:00:19 3663k
69 260M 0 0 69 181M 0 4583k 0:00:58 0:00:40 0:00:18 3625k
71 260M 0 0 71 186M 0 4587k 0:00:58 0:00:41 0:00:17 3896k
73 260M 0 0 73 191M 0 4605k 0:00:57 0:00:42 0:00:15 4349k
74 260M 0 0 74 194M 0 4586k 0:00:58 0:00:43 0:00:15 4532k
76 260M 0 0 76 199M 0 4588k 0:00:58 0:00:44 0:00:14 4647k
78 260M 0 0 78 204M 0 4605k 0:00:57 0:00:45 0:00:12 4782k
80 260M 0 0 80 208M 0 4588k 0:00:58 0:00:46 0:00:12 4597k
81 260M 0 0 81 211M 0 4561k 0:00:58 0:00:47 0:00:11 4194k
83 260M 0 0 83 215M 0 4558k 0:00:58 0:00:48 0:00:10 4313k
85 260M 0 0 85 221M 0 4572k 0:00:58 0:00:49 0:00:09 4433k
86 260M 0 0 86 225M 0 4564k 0:00:58 0:00:50 0:00:08 4187k
88 260M 0 0 88 229M 0 4560k 0:00:58 0:00:51 0:00:07 4300k
90 260M 0 0 90 234M 0 4573k 0:00:58 0:00:52 0:00:06 4683k
92 260M 0 0 92 239M 0 4579k 0:00:58 0:00:53 0:00:05 4782k
93 260M 0 0 93 244M 0 4592k 0:00:57 0:00:54 0:00:03 4789k
95 260M 0 0 95 248M 0 4584k 0:00:58 0:00:55 0:00:03 4793k
97 260M 0 0 97 252M 0 4582k 0:00:58 0:00:56 0:00:02 4803k
99 260M 0 0 99 258M 0 4593k 0:00:57 0:00:57 --:--:-- 4804k
100 260M 0 0 100 260M 0 4515k 0:00:58 0:00:58 --:--:-- 3889k
100 260M 0 0 100 260M 0 4439k 0:00:59 0:00:59 --:--:-- 2920k
100 260M 0 0 100 260M 0 4367k 0:01:00 0:01:00 --:--:-- 2146k
100 260M 0 0 100 260M 0 4296k 0:01:01 0:01:01 --:--:-- 1351k
100 260M 0 0 100 260M 0 4228k 0:01:02 0:01:02 --:--:-- 383k
100 260M 0 0 100 260M 0 4162k 0:01:03 0:01:03 --:--:-- 0
100 260M 0 0 100 260M 0 4097k 0:01:04 0:01:04 --:--:-- 0
100 260M 0 0 100 260M 0 4035k 0:01:05 0:01:05 --:--:-- 0
100 260M 0 0 100 260M 0 3975k 0:01:06 0:01:06 --:--:-- 0
100 260M 0 0 100 260M 0 3916k 0:01:07 0:01:07 --:--:-- 0
100 260M 0 0 100 260M 0 3860k 0:01:09 0:01:09 --:--:-- 0
100 260M 0 0 100 260M 0 3804k 0:01:10 0:01:10 --:--:-- 0
100 260M 0 0 100 260M 0 3751k 0:01:11 0:01:11 --:--:-- 0
100 260M 0 0 100 260M 0 3699k 0:01:12 0:01:12 --:--:-- 0
100 260M 0 0 100 260M 0 3648k 0:01:13 0:01:13 --:--:-- 0
100 260M 0 0 100 260M 0 3599k 0:01:14 0:01:14 --:--:-- 0
100 260M 0 0 100 260M 0 3550k 0:01:15 0:01:15 --:--:-- 0
100 260M 0 0 100 260M 0 3504k 0:01:16 0:01:16 --:--:-- 0
100 260M 0 0 100 260M 0 3458k 0:01:17 0:01:17 --:--:-- 0
100 260M 0 0 100 260M 0 3414k 0:01:18 0:01:18 --:--:-- 0
100 260M 0 0 100 260M 0 3371k 0:01:19 0:01:19 --:--:-- 0
100 260M 0 0 100 260M 0 3328k 0:01:20 0:01:20 --:--:-- 0
100 260M 0 0 100 260M 0 3287k 0:01:21 0:01:21 --:--:-- 0
100 260M 0 0 100 260M 0 3247k 0:01:22 0:01:22 --:--:-- 0
100 260M 0 0 100 260M 0 3208k 0:01:23 0:01:23 --:--:-- 0
100 260M 0 0 100 260M 0 3170k 0:01:24 0:01:24 --:--:-- 0
100 260M 0 0 100 260M 0 3132k 0:01:25 0:01:25 --:--:-- 0
100 260M 0 0 100 260M 0 3096k 0:01:26 0:01:26 --:--:-- 0
100 260M 0 0 100 260M 0 3060k 0:01:27 0:01:27 --:--:-- 0
100 260M 0 0 100 260M 0 3025k 0:01:28 0:01:28 --:--:-- 0
100 260M 0 0 100 260M 0 2991k 0:01:29 0:01:29 --:--:-- 0
100 260M 0 0 100 260M 0 2958k 0:01:30 0:01:30 --:--:-- 0
100 260M 0 0 100 260M 0 2926k 0:01:31 0:01:31 --:--:-- 0
100 260M 0 0 100 260M 0 2894k 0:01:32 0:01:32 --:--:-- 0
100 260M 0 0 100 260M 0 2863k 0:01:33 0:01:33 --:--:-- 0
100 260M 0 0 100 260M 0 2832k 0:01:34 0:01:34 --:--:-- 0
100 260M 0 0 100 260M 0 2802k 0:01:35 0:01:35 --:--:-- 0
100 260M 0 0 100 260M 0 2773k 0:01:36 0:01:36 --:--:-- 0
100 260M 0 0 100 260M 0 2744k 0:01:37 0:01:37 --:--:-- 0
100 260M 0 0 100 260M 0 2716k 0:01:38 0:01:38 --:--:-- 0
100 260M 0 0 100 260M 0 2689k 0:01:39 0:01:39 --:--:-- 0
100 260M 0 0 100 260M 0 2662k 0:01:40 0:01:40 --:--:-- 0
100 260M 0 0 100 260M 0 2636k 0:01:41 0:01:41 --:--:-- 0
100 260M 0 0 100 260M 0 2610k 0:01:42 0:01:42 --:--:-- 0
100 260M 0 0 100 260M 0 2584k 0:01:43 0:01:43 --:--:-- 0
100 260M 0 0 100 260M 0 2560k 0:01:44 0:01:44 --:--:-- 0
100 260M 0 0 100 260M 0 2535k 0:01:45 0:01:45 --:--:-- 0
100 260M 0 0 100 260M 0 2511k 0:01:46 0:01:46 --:--:-- 0
100 260M 0 0 100 260M 0 2488k 0:01:47 0:01:47 --:--:-- 0
100 260M 0 0 100 260M 0 2465k 0:01:48 0:01:48 --:--:-- 0
100 260M 0 43 100 260M 0 2461k 0:01:48 0:01:48 --:--:-- 10
[Pipeline] echo
{"msg":"操作成功","code":200,"data":""}
[Pipeline] readJSON
[Pipeline] echo
[msg:操作成功, code:200, data:]
[Pipeline] echo
status:200
[Pipeline] echo
{"msg":"操作成功","code":200,"data":""}
[Pipeline] }
[Pipeline] // dir
[Pipeline] sh
+ rm -rf /root/workspace/params-submodule/jining-liangshan-submodule/JNLSG_JL_AT017/slave@tmp
[Pipeline] sh
+ rm -rf /root/workspace/params-submodule/jining-liangshan-submodule/JNLSG_JL_AT017/slave/params_submodule/
[Pipeline] echo
------------------------------------- JNLSG_JL_AT018压缩并上传,master -------------------------------------------
[Pipeline] dir
Running in /root/workspace/params-submodule/jining-liangshan-submodule/JNLSG_JL_AT018/master
[Pipeline] {
[Pipeline] sh
+ cd /root/workspace/params-submodule/jining-liangshan-submodule/JNLSG_JL_AT018/master/params/
+ ls -d crane_align/ crane_detection/ data_collection/ extrinsics/ hardware/ hdmap/ hdmap_interface/ hesai_lidar/ imv_spreader_detection/ lane_detection/ lidar_camera_fusion/ lidar_correction_files/ lidar_loc_v2/ master/ new_truck_spreader_detection/ perception/ pncc_common_config/ pncc_port_related_config/ pncc_vehicle_related_config/ pointcloud/ prediction/ rslidar_sdk/ slave/ spreader_detection/ system-ros/
[Pipeline] echo
crane_align/
crane_detection/
data_collection/
extrinsics/
hardware/
hdmap/
hdmap_interface/
hesai_lidar/
imv_spreader_detection/
lane_detection/
lidar_camera_fusion/
lidar_correction_files/
lidar_loc_v2/
master/
new_truck_spreader_detection/
perception/
pncc_common_config/
pncc_port_related_config/
pncc_vehicle_related_config/
pointcloud/
prediction/
rslidar_sdk/
slave/
spreader_detection/
system-ros/
[Pipeline] echo
最终目录包含master目录,进行合并操作
[Pipeline] sh
+ cp -r /root/workspace/params-submodule/jining-liangshan-submodule/JNLSG_JL_AT018/master/params/master/camera_driver /root/workspace/params-submodule/jining-liangshan-submodule/JNLSG_JL_AT018/master/params/master/recorder.toml /root/workspace/params-submodule/jining-liangshan-submodule/JNLSG_JL_AT018/master/params/master/system-ros /root/workspace/params-submodule/jining-liangshan-submodule/JNLSG_JL_AT018/master/params/
[Pipeline] sh
+ mkdir -p params_module_orin_master_JNLSG_JL_AT018_2026-08-16_17-02-19/
+ mv params/ params_module_orin_master_JNLSG_JL_AT018_2026-08-16_17-02-19/
[Pipeline] sh
+ zip -rq params_module_orin_master_JNLSG_JL_AT018_2026-08-16_17-02-19.zip params_module_orin_master_JNLSG_JL_AT018_2026-08-16_17-02-19 ./version.json
[Pipeline] echo
/root/workspace/params-submodule/jining-liangshan-submodule/JNLSG_JL_AT018/master/params_module_orin_master_JNLSG_JL_AT018_2026-08-16_17-02-19.zip,/root/workspace/params-submodule/jining-liangshan-submodule/JNLSG_JL_AT018/master/version.json
[Pipeline] sh
+ curl -X POST http://159.27.114.184:31018/ota-api/otaUploadFileAndVersion --form 'Content-Type="multipart/form-data"' --form 'file=@"/root/workspace/params-submodule/jining-liangshan-submodule/JNLSG_JL_AT018/master/params_module_orin_master_JNLSG_JL_AT018_2026-08-16_17-02-19.zip"' --form 'version=@"/root/workspace/params-submodule/jining-liangshan-submodule/JNLSG_JL_AT018/master/version.json"'
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
0 269M 0 0 0 768k 0 27.7M 0:00:09 --:--:-- 0:00:09 26.7M
2 269M 0 0 2 6656k 0 6387k 0:00:43 0:00:01 0:00:42 6381k
4 269M 0 0 4 11.5M 0 5829k 0:00:47 0:00:02 0:00:45 5826k
5 269M 0 0 5 15.6M 0 5284k 0:00:52 0:00:03 0:00:49 5284k
7 269M 0 0 7 19.9M 0 5043k 0:00:54 0:00:04 0:00:50 5042k
8 269M 0 0 8 24.0M 0 4889k 0:00:56 0:00:05 0:00:51 4762k
10 269M 0 0 10 28.8M 0 4885k 0:00:56 0:00:06 0:00:50 4573k
12 269M 0 0 12 33.6M 0 4887k 0:00:56 0:00:07 0:00:49 4505k
14 269M 0 0 14 38.6M 0 4919k 0:00:56 0:00:08 0:00:48 4697k
15 269M 0 0 15 43.1M 0 4887k 0:00:56 0:00:09 0:00:47 4760k
17 269M 0 0 17 47.2M 0 4814k 0:00:57 0:00:10 0:00:47 4739k
19 269M 0 0 19 52.1M 0 4839k 0:00:57 0:00:11 0:00:46 4783k
20 269M 0 0 20 56.5M 0 4797k 0:00:57 0:00:12 0:00:45 4671k
22 269M 0 0 22 60.4M 0 4747k 0:00:58 0:00:13 0:00:45 4471k
24 269M 0 0 24 65.6M 0 4783k 0:00:57 0:00:14 0:00:43 4596k
26 269M 0 0 26 70.2M 0 4780k 0:00:57 0:00:15 0:00:42 4710k
27 269M 0 0 27 74.2M 0 4738k 0:00:58 0:00:16 0:00:42 4515k
29 269M 0 0 29 79.1M 0 4754k 0:00:58 0:00:17 0:00:41 4649k
30 269M 0 0 30 83.3M 0 4728k 0:00:58 0:00:18 0:00:40 4679k
32 269M 0 0 32 87.3M 0 4697k 0:00:58 0:00:19 0:00:39 4454k
33 269M 0 0 33 91.2M 0 4657k 0:00:59 0:00:20 0:00:39 4290k
34 269M 0 0 34 94.0M 0 4579k 0:01:00 0:00:21 0:00:39 4068k
36 269M 0 0 36 97.6M 0 4538k 0:01:00 0:00:22 0:00:38 3803k
37 269M 0 0 37 102M 0 4534k 0:01:00 0:00:23 0:00:37 3829k
39 269M 0 0 39 106M 0 4532k 0:01:00 0:00:24 0:00:36 3903k
41 269M 0 0 41 111M 0 4561k 0:01:00 0:00:25 0:00:35 4172k
43 269M 0 0 43 116M 0 4565k 0:01:00 0:00:26 0:00:34 4509k
44 269M 0 0 44 120M 0 4551k 0:01:00 0:00:27 0:00:33 4608k
46 269M 0 0 46 125M 0 4571k 0:01:00 0:00:28 0:00:32 4742k
47 269M 0 0 47 128M 0 4543k 0:01:00 0:00:29 0:00:31 4599k
48 269M 0 0 48 132M 0 4498k 0:01:01 0:00:30 0:00:31 4182k
50 269M 0 0 50 136M 0 4493k 0:01:01 0:00:31 0:00:30 4116k
52 269M 0 0 52 141M 0 4517k 0:01:01 0:00:32 0:00:29 4328k
53 269M 0 0 53 145M 0 4511k 0:01:01 0:00:33 0:00:28 4175k
55 269M 0 0 55 149M 0 4509k 0:01:01 0:00:34 0:00:27 4308k
57 269M 0 0 57 155M 0 4530k 0:01:00 0:00:35 0:00:25 4724k
58 269M 0 0 58 159M 0 4519k 0:01:01 0:00:36 0:00:25 4680k
60 269M 0 0 60 163M 0 4513k 0:01:01 0:00:37 0:00:24 4493k
62 269M 0 0 62 168M 0 4535k 0:01:00 0:00:38 0:00:22 4692k
63 269M 0 0 63 172M 0 4526k 0:01:01 0:00:39 0:00:22 4646k
65 269M 0 0 65 176M 0 4522k 0:01:01 0:00:40 0:00:21 4468k
67 269M 0 0 67 182M 0 4541k 0:01:00 0:00:41 0:00:19 4700k
68 269M 0 0 68 185M 0 4524k 0:01:01 0:00:42 0:00:19 4600k
70 269M 0 0 70 190M 0 4521k 0:01:01 0:00:43 0:00:18 4416k
72 269M 0 0 72 195M 0 4538k 0:01:00 0:00:44 0:00:16 4634k
74 269M 0 0 74 200M 0 4548k 0:01:00 0:00:45 0:00:15 4750k
76 269M 0 0 76 205M 0 4559k 0:01:00 0:00:46 0:00:14 4706k
77 269M 0 0 77 208M 0 4540k 0:01:00 0:00:47 0:00:13 4674k
79 269M 0 0 79 213M 0 4541k 0:01:00 0:00:48 0:00:12 4716k
80 269M 0 0 80 218M 0 4558k 0:01:00 0:00:49 0:00:11 4732k
82 269M 0 0 82 221M 0 4538k 0:01:00 0:00:50 0:00:10 4448k
83 269M 0 0 83 225M 0 4516k 0:01:01 0:00:51 0:00:10 4119k
85 269M 0 0 85 229M 0 4518k 0:01:01 0:00:52 0:00:09 4307k
87 269M 0 0 87 234M 0 4533k 0:01:00 0:00:53 0:00:07 4454k
88 269M 0 0 88 238M 0 4527k 0:01:00 0:00:54 0:00:06 4224k
90 269M 0 0 90 243M 0 4526k 0:01:01 0:00:55 0:00:06 4411k
92 269M 0 0 92 248M 0 4539k 0:01:00 0:00:56 0:00:04 4767k
93 269M 0 0 93 251M 0 4520k 0:01:01 0:00:57 0:00:04 4545k
95 269M 0 0 95 256M 0 4521k 0:01:01 0:00:58 0:00:03 4392k
97 269M 0 0 97 261M 0 4536k 0:01:00 0:00:59 0:00:01 4634k
98 269M 0 0 98 266M 0 4542k 0:01:00 0:01:00 --:--:-- 4716k
100 269M 0 0 100 269M 0 4476k 0:01:01 0:01:01 --:--:-- 3855k
100 269M 0 0 100 269M 0 4404k 0:01:02 0:01:02 --:--:-- 3240k
100 269M 0 0 100 269M 0 4335k 0:01:03 0:01:03 --:--:-- 2427k
100 269M 0 0 100 269M 0 4268k 0:01:04 0:01:04 --:--:-- 1459k
100 269M 0 0 100 269M 0 4203k 0:01:05 0:01:05 --:--:-- 596k
100 269M 0 0 100 269M 0 4140k 0:01:06 0:01:06 --:--:-- 0
100 269M 0 0 100 269M 0 4079k 0:01:07 0:01:07 --:--:-- 0
100 269M 0 0 100 269M 0 4019k 0:01:08 0:01:08 --:--:-- 0
100 269M 0 0 100 269M 0 3961k 0:01:09 0:01:09 --:--:-- 0
100 269M 0 0 100 269M 0 3905k 0:01:10 0:01:10 --:--:-- 0
100 269M 0 0 100 269M 0 3851k 0:01:11 0:01:11 --:--:-- 0
100 269M 0 0 100 269M 0 3798k 0:01:12 0:01:12 --:--:-- 0
100 269M 0 0 100 269M 0 3746k 0:01:13 0:01:13 --:--:-- 0
100 269M 0 0 100 269M 0 3696k 0:01:14 0:01:14 --:--:-- 0
100 269M 0 0 100 269M 0 3647k 0:01:15 0:01:15 --:--:-- 0
100 269M 0 0 100 269M 0 3599k 0:01:16 0:01:16 --:--:-- 0
100 269M 0 0 100 269M 0 3553k 0:01:17 0:01:17 --:--:-- 0
100 269M 0 0 100 269M 0 3508k 0:01:18 0:01:18 --:--:-- 0
100 269M 0 0 100 269M 0 3464k 0:01:19 0:01:19 --:--:-- 0
100 269M 0 0 100 269M 0 3421k 0:01:20 0:01:20 --:--:-- 0
100 269M 0 0 100 269M 0 3379k 0:01:21 0:01:21 --:--:-- 0
100 269M 0 0 100 269M 0 3338k 0:01:22 0:01:22 --:--:-- 0
100 269M 0 0 100 269M 0 3298k 0:01:23 0:01:23 --:--:-- 0
100 269M 0 0 100 269M 0 3259k 0:01:24 0:01:24 --:--:-- 0
100 269M 0 0 100 269M 0 3221k 0:01:25 0:01:25 --:--:-- 0
100 269M 0 0 100 269M 0 3184k 0:01:26 0:01:26 --:--:-- 0
100 269M 0 0 100 269M 0 3147k 0:01:27 0:01:27 --:--:-- 0
100 269M 0 0 100 269M 0 3112k 0:01:28 0:01:28 --:--:-- 0
100 269M 0 0 100 269M 0 3077k 0:01:29 0:01:29 --:--:-- 0
100 269M 0 0 100 269M 0 3043k 0:01:30 0:01:30 --:--:-- 0
100 269M 0 0 100 269M 0 3010k 0:01:31 0:01:31 --:--:-- 0
100 269M 0 0 100 269M 0 2978k 0:01:32 0:01:32 --:--:-- 0
100 269M 0 0 100 269M 0 2946k 0:01:33 0:01:33 --:--:-- 0
100 269M 0 0 100 269M 0 2915k 0:01:34 0:01:34 --:--:-- 0
100 269M 0 0 100 269M 0 2884k 0:01:35 0:01:35 --:--:-- 0
100 269M 0 0 100 269M 0 2854k 0:01:36 0:01:36 --:--:-- 0
100 269M 0 0 100 269M 0 2825k 0:01:37 0:01:37 --:--:-- 0
100 269M 0 0 100 269M 0 2796k 0:01:38 0:01:38 --:--:-- 0
100 269M 0 0 100 269M 0 2768k 0:01:39 0:01:39 --:--:-- 0
100 269M 0 0 100 269M 0 2741k 0:01:40 0:01:40 --:--:-- 0
100 269M 0 0 100 269M 0 2714k 0:01:41 0:01:41 --:--:-- 0
100 269M 0 0 100 269M 0 2687k 0:01:42 0:01:42 --:--:-- 0
100 269M 0 0 100 269M 0 2661k 0:01:43 0:01:43 --:--:-- 0
100 269M 0 0 100 269M 0 2636k 0:01:44 0:01:44 --:--:-- 0
100 269M 0 0 100 269M 0 2611k 0:01:45 0:01:45 --:--:-- 0
100 269M 0 0 100 269M 0 2587k 0:01:46 0:01:46 --:--:-- 0
100 269M 0 0 100 269M 0 2562k 0:01:47 0:01:47 --:--:-- 0
100 269M 0 0 100 269M 0 2539k 0:01:48 0:01:48 --:--:-- 0
100 269M 0 0 100 269M 0 2516k 0:01:49 0:01:49 --:--:-- 0
100 269M 0 0 100 269M 0 2493k 0:01:50 0:01:50 --:--:-- 0
100 269M 0 0 100 269M 0 2471k 0:01:51 0:01:51 --:--:-- 0
100 269M 0 43 100 269M 0 2461k 0:01:52 0:01:52 --:--:-- 9
100 269M 0 43 100 269M 0 2461k 0:01:52 0:01:52 --:--:-- 12
[Pipeline] echo
{"msg":"操作成功","code":200,"data":""}
[Pipeline] readJSON
[Pipeline] echo
[msg:操作成功, code:200, data:]
[Pipeline] echo
status:200
[Pipeline] echo
{"msg":"操作成功","code":200,"data":""}
[Pipeline] }
[Pipeline] // dir
[Pipeline] sh
+ rm -rf /root/workspace/params-submodule/jining-liangshan-submodule/JNLSG_JL_AT018/master@tmp
[Pipeline] sh
+ rm -rf /root/workspace/params-submodule/jining-liangshan-submodule/JNLSG_JL_AT018/master/params_submodule/
[Pipeline] echo
------------------------------------- JNLSG_JL_AT018压缩并上传,slave -------------------------------------------
[Pipeline] dir
Running in /root/workspace/params-submodule/jining-liangshan-submodule/JNLSG_JL_AT018/slave
[Pipeline] {
[Pipeline] sh
+ cd /root/workspace/params-submodule/jining-liangshan-submodule/JNLSG_JL_AT018/slave/params/
+ ls -d crane_align/ crane_detection/ data_collection/ extrinsics/ hardware/ hdmap/ hdmap_interface/ hesai_lidar/ imv_spreader_detection/ lane_detection/ lidar_camera_fusion/ lidar_correction_files/ lidar_loc_v2/ master/ new_truck_spreader_detection/ perception/ pncc_common_config/ pncc_port_related_config/ pncc_vehicle_related_config/ pointcloud/ prediction/ rslidar_sdk/ slave/ spreader_detection/ system-ros/
[Pipeline] echo
crane_align/
crane_detection/
data_collection/
extrinsics/
hardware/
hdmap/
hdmap_interface/
hesai_lidar/
imv_spreader_detection/
lane_detection/
lidar_camera_fusion/
lidar_correction_files/
lidar_loc_v2/
master/
new_truck_spreader_detection/
perception/
pncc_common_config/
pncc_port_related_config/
pncc_vehicle_related_config/
pointcloud/
prediction/
rslidar_sdk/
slave/
spreader_detection/
system-ros/
[Pipeline] echo
最终目录包含slave目录,进行合并操作
[Pipeline] sh
+ cp -r /root/workspace/params-submodule/jining-liangshan-submodule/JNLSG_JL_AT018/slave/params/slave/camera_driver /root/workspace/params-submodule/jining-liangshan-submodule/JNLSG_JL_AT018/slave/params/slave/recorder.toml /root/workspace/params-submodule/jining-liangshan-submodule/JNLSG_JL_AT018/slave/params/slave/system-ros /root/workspace/params-submodule/jining-liangshan-submodule/JNLSG_JL_AT018/slave/params/
[Pipeline] sh
+ mkdir -p params_module_orin_slave_JNLSG_JL_AT018_2026-08-16_17-02-19/
+ mv params/ params_module_orin_slave_JNLSG_JL_AT018_2026-08-16_17-02-19/
[Pipeline] sh
+ zip -rq params_module_orin_slave_JNLSG_JL_AT018_2026-08-16_17-02-19.zip params_module_orin_slave_JNLSG_JL_AT018_2026-08-16_17-02-19 ./version.json
[Pipeline] echo
/root/workspace/params-submodule/jining-liangshan-submodule/JNLSG_JL_AT018/slave/params_module_orin_slave_JNLSG_JL_AT018_2026-08-16_17-02-19.zip,/root/workspace/params-submodule/jining-liangshan-submodule/JNLSG_JL_AT018/slave/version.json
[Pipeline] sh
+ curl -X POST http://159.27.114.184:31018/ota-api/otaUploadFileAndVersion --form 'Content-Type="multipart/form-data"' --form 'file=@"/root/workspace/params-submodule/jining-liangshan-submodule/JNLSG_JL_AT018/slave/params_module_orin_slave_JNLSG_JL_AT018_2026-08-16_17-02-19.zip"' --form 'version=@"/root/workspace/params-submodule/jining-liangshan-submodule/JNLSG_JL_AT018/slave/version.json"'
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
1 260M 0 0 1 4992k 0 5608k 0:00:47 --:--:-- 0:00:47 5602k
3 260M 0 0 3 9.8M 0 5338k 0:00:49 0:00:01 0:00:48 5336k
5 260M 0 0 5 13.5M 0 4761k 0:00:55 0:00:02 0:00:53 4760k
6 260M 0 0 6 16.6M 0 4343k 0:01:01 0:00:03 0:00:58 4342k
7 260M 0 0 7 19.1M 0 3975k 0:01:06 0:00:04 0:01:02 3974k
8 260M 0 0 8 22.2M 0 3868k 0:01:08 0:00:05 0:01:03 3558k
10 260M 0 0 10 26.6M 0 3958k 0:01:07 0:00:06 0:01:01 3436k
11 260M 0 0 11 31.1M 0 4047k 0:01:05 0:00:07 0:00:58 3631k
13 260M 0 0 13 35.0M 0 4028k 0:01:06 0:00:08 0:00:58 3779k
15 260M 0 0 15 39.5M 0 4092k 0:01:05 0:00:09 0:00:56 4207k
17 260M 0 0 17 44.7M 0 4207k 0:01:03 0:00:10 0:00:53 4607k
18 260M 0 0 18 49.1M 0 4229k 0:01:02 0:00:11 0:00:51 4603k
20 260M 0 0 20 53.6M 0 4266k 0:01:02 0:00:12 0:00:50 4611k
22 260M 0 0 22 58.1M 0 4289k 0:01:02 0:00:13 0:00:49 4755k
24 260M 0 0 24 63.0M 0 4332k 0:01:01 0:00:14 0:00:47 4806k
25 260M 0 0 25 67.2M 0 4332k 0:01:01 0:00:15 0:00:46 4604k
27 260M 0 0 27 71.0M 0 4301k 0:01:01 0:00:16 0:00:45 4474k
29 260M 0 0 29 75.8M 0 4339k 0:01:01 0:00:17 0:00:44 4527k
30 260M 0 0 30 80.5M 0 4364k 0:01:01 0:00:18 0:00:43 4575k
32 260M 0 0 32 84.3M 0 4343k 0:01:01 0:00:19 0:00:42 4378k
34 260M 0 0 34 89.2M 0 4374k 0:01:00 0:00:20 0:00:40 4507k
36 260M 0 0 36 94.2M 0 4402k 0:01:00 0:00:21 0:00:39 4742k
37 260M 0 0 37 97.9M 0 4380k 0:01:00 0:00:22 0:00:38 4526k
39 260M 0 0 39 102M 0 4388k 0:01:00 0:00:23 0:00:37 4480k
41 260M 0 0 41 106M 0 4392k 0:01:00 0:00:24 0:00:36 4586k
43 260M 0 0 43 111M 0 4425k 0:01:00 0:00:25 0:00:35 4639k
44 260M 0 0 44 116M 0 4424k 0:01:00 0:00:26 0:00:34 4522k
46 260M 0 0 46 120M 0 4423k 0:01:00 0:00:27 0:00:33 4623k
48 260M 0 0 48 125M 0 4455k 0:00:59 0:00:28 0:00:31 4772k
49 260M 0 0 49 129M 0 4439k 0:00:59 0:00:29 0:00:30 4671k
51 260M 0 0 51 134M 0 4439k 0:00:59 0:00:30 0:00:29 4512k
53 260M 0 0 53 137M 0 4427k 0:01:00 0:00:31 0:00:29 4439k
54 260M 0 0 54 142M 0 4445k 0:00:59 0:00:32 0:00:27 4566k
56 260M 0 0 56 147M 0 4446k 0:00:59 0:00:33 0:00:26 4395k
57 260M 0 0 57 150M 0 4400k 0:01:00 0:00:34 0:00:26 4169k
59 260M 0 0 59 154M 0 4392k 0:01:00 0:00:35 0:00:25 4100k
61 260M 0 0 61 159M 0 4412k 0:01:00 0:00:36 0:00:24 4317k
63 260M 0 0 63 164M 0 4431k 0:01:00 0:00:37 0:00:23 4336k
65 260M 0 0 65 169M 0 4451k 0:00:59 0:00:38 0:00:21 4483k
66 260M 0 0 66 173M 0 4455k 0:00:59 0:00:39 0:00:20 4839k
68 260M 0 0 68 177M 0 4448k 0:00:59 0:00:40 0:00:19 4851k
70 260M 0 0 70 182M 0 4464k 0:00:59 0:00:41 0:00:18 4850k
71 260M 0 0 71 186M 0 4439k 0:00:59 0:00:42 0:00:17 4503k
72 260M 0 0 72 189M 0 4412k 0:01:00 0:00:43 0:00:17 4110k
74 260M 0 0 74 193M 0 4412k 0:01:00 0:00:44 0:00:16 4064k
76 260M 0 0 76 198M 0 4429k 0:01:00 0:00:45 0:00:15 4276k
77 260M 0 0 77 202M 0 4426k 0:01:00 0:00:46 0:00:14 4113k
79 260M 0 0 79 207M 0 4425k 0:01:00 0:00:47 0:00:13 4303k
81 260M 0 0 81 212M 0 4440k 0:00:59 0:00:48 0:00:11 4688k
83 260M 0 0 83 216M 0 4437k 0:01:00 0:00:49 0:00:11 4667k
84 260M 0 0 84 220M 0 4433k 0:01:00 0:00:50 0:00:10 4463k
86 260M 0 0 86 225M 0 4447k 0:00:59 0:00:51 0:00:08 4644k
88 260M 0 0 88 229M 0 4445k 0:00:59 0:00:52 0:00:07 4632k
89 260M 0 0 89 233M 0 4441k 0:00:59 0:00:53 0:00:06 4449k
91 260M 0 0 91 238M 0 4453k 0:00:59 0:00:54 0:00:05 4608k
93 260M 0 0 93 243M 0 4463k 0:00:59 0:00:55 0:00:04 4774k
95 260M 0 0 95 248M 0 4476k 0:00:59 0:00:56 0:00:03 4768k
97 260M 0 0 97 253M 0 4475k 0:00:59 0:00:57 0:00:02 4791k
98 260M 0 0 98 257M 0 4471k 0:00:59 0:00:58 0:00:01 4788k
100 260M 0 0 100 260M 0 4396k 0:01:00 0:01:00 --:--:-- 3847k
100 260M 0 0 100 260M 0 4324k 0:01:01 0:01:01 --:--:-- 2962k
100 260M 0 0 100 260M 0 4255k 0:01:02 0:01:02 --:--:-- 2046k
100 260M 0 0 100 260M 0 4188k 0:01:03 0:01:03 --:--:-- 1277k
100 260M 0 0 100 260M 0 4123k 0:01:04 0:01:04 --:--:-- 535k
100 260M 0 0 100 260M 0 4060k 0:01:05 0:01:05 --:--:-- 0
100 260M 0 0 100 260M 0 3999k 0:01:06 0:01:06 --:--:-- 0
100 260M 0 0 100 260M 0 3940k 0:01:07 0:01:07 --:--:-- 0
100 260M 0 0 100 260M 0 3882k 0:01:08 0:01:08 --:--:-- 0
100 260M 0 0 100 260M 0 3826k 0:01:09 0:01:09 --:--:-- 0
100 260M 0 0 100 260M 0 3772k 0:01:10 0:01:10 --:--:-- 0
100 260M 0 0 100 260M 0 3720k 0:01:11 0:01:11 --:--:-- 0
100 260M 0 0 100 260M 0 3668k 0:01:12 0:01:12 --:--:-- 0
100 260M 0 0 100 260M 0 3618k 0:01:13 0:01:13 --:--:-- 0
100 260M 0 0 100 260M 0 3570k 0:01:14 0:01:14 --:--:-- 0
100 260M 0 0 100 260M 0 3522k 0:01:15 0:01:15 --:--:-- 0
100 260M 0 0 100 260M 0 3476k 0:01:16 0:01:16 --:--:-- 0
100 260M 0 0 100 260M 0 3432k 0:01:17 0:01:17 --:--:-- 0
100 260M 0 0 100 260M 0 3388k 0:01:18 0:01:18 --:--:-- 0
100 260M 0 0 100 260M 0 3345k 0:01:19 0:01:19 --:--:-- 0
100 260M 0 0 100 260M 0 3304k 0:01:20 0:01:20 --:--:-- 0
100 260M 0 0 100 260M 0 3263k 0:01:21 0:01:21 --:--:-- 0
100 260M 0 0 100 260M 0 3224k 0:01:22 0:01:22 --:--:-- 0
100 260M 0 0 100 260M 0 3185k 0:01:23 0:01:23 --:--:-- 0
100 260M 0 0 100 260M 0 3147k 0:01:24 0:01:24 --:--:-- 0
100 260M 0 0 100 260M 0 3111k 0:01:25 0:01:25 --:--:-- 0
100 260M 0 0 100 260M 0 3075k 0:01:26 0:01:26 --:--:-- 0
100 260M 0 0 100 260M 0 3039k 0:01:27 0:01:27 --:--:-- 0
100 260M 0 0 100 260M 0 3005k 0:01:28 0:01:28 --:--:-- 0
100 260M 0 0 100 260M 0 2972k 0:01:29 0:01:29 --:--:-- 0
100 260M 0 0 100 260M 0 2939k 0:01:30 0:01:30 --:--:-- 0
100 260M 0 0 100 260M 0 2907k 0:01:31 0:01:31 --:--:-- 0
100 260M 0 0 100 260M 0 2875k 0:01:32 0:01:32 --:--:-- 0
100 260M 0 0 100 260M 0 2844k 0:01:33 0:01:33 --:--:-- 0
100 260M 0 0 100 260M 0 2814k 0:01:34 0:01:34 --:--:-- 0
100 260M 0 0 100 260M 0 2785k 0:01:35 0:01:35 --:--:-- 0
100 260M 0 0 100 260M 0 2756k 0:01:36 0:01:36 --:--:-- 0
100 260M 0 0 100 260M 0 2728k 0:01:37 0:01:37 --:--:-- 0
100 260M 0 0 100 260M 0 2700k 0:01:38 0:01:38 --:--:-- 0
100 260M 0 0 100 260M 0 2673k 0:01:39 0:01:39 --:--:-- 0
100 260M 0 0 100 260M 0 2646k 0:01:40 0:01:40 --:--:-- 0
100 260M 0 0 100 260M 0 2620k 0:01:41 0:01:41 --:--:-- 0
100 260M 0 0 100 260M 0 2595k 0:01:42 0:01:42 --:--:-- 0
100 260M 0 0 100 260M 0 2570k 0:01:43 0:01:43 --:--:-- 0
100 260M 0 0 100 260M 0 2545k 0:01:44 0:01:44 --:--:-- 0
100 260M 0 0 100 260M 0 2521k 0:01:45 0:01:45 --:--:-- 0
100 260M 0 0 100 260M 0 2497k 0:01:46 0:01:46 --:--:-- 0
100 260M 0 0 100 260M 0 2474k 0:01:47 0:01:47 --:--:-- 0
100 260M 0 43 100 260M 0 2467k 0:01:47 0:01:47 --:--:-- 9
100 260M 0 43 100 260M 0 2467k 0:01:47 0:01:47 --:--:-- 12
[Pipeline] echo
{"msg":"操作成功","code":200,"data":""}
[Pipeline] readJSON
[Pipeline] echo
[msg:操作成功, code:200, data:]
[Pipeline] echo
status:200
[Pipeline] echo
{"msg":"操作成功","code":200,"data":""}
[Pipeline] }
[Pipeline] // dir
[Pipeline] sh
+ rm -rf /root/workspace/params-submodule/jining-liangshan-submodule/JNLSG_JL_AT018/slave@tmp
[Pipeline] sh
+ rm -rf /root/workspace/params-submodule/jining-liangshan-submodule/JNLSG_JL_AT018/slave/params_submodule/
[Pipeline] echo
------------------------------------- JNLSG_JL_AT019压缩并上传,master -------------------------------------------
[Pipeline] dir
Running in /root/workspace/params-submodule/jining-liangshan-submodule/JNLSG_JL_AT019/master
[Pipeline] {
[Pipeline] sh
+ cd /root/workspace/params-submodule/jining-liangshan-submodule/JNLSG_JL_AT019/master/params/
+ ls -d crane_align/ crane_detection/ data_collection/ extrinsics/ hardware/ hdmap/ hdmap_interface/ hesai_lidar/ imv_spreader_detection/ lane_detection/ lidar_camera_fusion/ lidar_correction_files/ lidar_loc_v2/ master/ new_truck_spreader_detection/ perception/ pncc_common_config/ pncc_port_related_config/ pncc_vehicle_related_config/ pointcloud/ prediction/ rslidar_sdk/ slave/ spreader_detection/ system-ros/
[Pipeline] echo
crane_align/
crane_detection/
data_collection/
extrinsics/
hardware/
hdmap/
hdmap_interface/
hesai_lidar/
imv_spreader_detection/
lane_detection/
lidar_camera_fusion/
lidar_correction_files/
lidar_loc_v2/
master/
new_truck_spreader_detection/
perception/
pncc_common_config/
pncc_port_related_config/
pncc_vehicle_related_config/
pointcloud/
prediction/
rslidar_sdk/
slave/
spreader_detection/
system-ros/
[Pipeline] echo
最终目录包含master目录,进行合并操作
[Pipeline] sh
+ cp -r /root/workspace/params-submodule/jining-liangshan-submodule/JNLSG_JL_AT019/master/params/master/camera_driver /root/workspace/params-submodule/jining-liangshan-submodule/JNLSG_JL_AT019/master/params/master/recorder.toml /root/workspace/params-submodule/jining-liangshan-submodule/JNLSG_JL_AT019/master/params/master/system-ros /root/workspace/params-submodule/jining-liangshan-submodule/JNLSG_JL_AT019/master/params/
[Pipeline] sh
+ mkdir -p params_module_orin_master_JNLSG_JL_AT019_2026-08-16_17-02-19/
+ mv params/ params_module_orin_master_JNLSG_JL_AT019_2026-08-16_17-02-19/
[Pipeline] sh
+ zip -rq params_module_orin_master_JNLSG_JL_AT019_2026-08-16_17-02-19.zip params_module_orin_master_JNLSG_JL_AT019_2026-08-16_17-02-19 ./version.json
[Pipeline] echo
/root/workspace/params-submodule/jining-liangshan-submodule/JNLSG_JL_AT019/master/params_module_orin_master_JNLSG_JL_AT019_2026-08-16_17-02-19.zip,/root/workspace/params-submodule/jining-liangshan-submodule/JNLSG_JL_AT019/master/version.json
[Pipeline] sh
+ curl -X POST http://159.27.114.184:31018/ota-api/otaUploadFileAndVersion --form 'Content-Type="multipart/form-data"' --form 'file=@"/root/workspace/params-submodule/jining-liangshan-submodule/JNLSG_JL_AT019/master/params_module_orin_master_JNLSG_JL_AT019_2026-08-16_17-02-19.zip"' --form 'version=@"/root/workspace/params-submodule/jining-liangshan-submodule/JNLSG_JL_AT019/master/version.json"'
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
1 269M 0 0 1 3904k 0 7595k 0:00:36 --:--:-- 0:00:36 7580k
4 269M 0 0 4 11.1M 0 7504k 0:00:36 0:00:01 0:00:35 7499k
5 269M 0 0 5 15.4M 0 6323k 0:00:43 0:00:02 0:00:41 6320k
7 269M 0 0 7 20.6M 0 6006k 0:00:45 0:00:03 0:00:42 6005k
9 269M 0 0 9 25.3M 0 5757k 0:00:47 0:00:04 0:00:43 5756k
11 269M 0 0 11 30.6M 0 5681k 0:00:48 0:00:05 0:00:43 5485k
12 269M 0 0 12 35.0M 0 5498k 0:00:50 0:00:06 0:00:44 4889k
14 269M 0 0 14 39.1M 0 5335k 0:00:51 0:00:07 0:00:44 4842k
16 269M 0 0 16 44.2M 0 5321k 0:00:51 0:00:08 0:00:43 4838k
17 269M 0 0 17 48.2M 0 5186k 0:00:53 0:00:09 0:00:44 4673k
19 269M 0 0 19 52.4M 0 5113k 0:00:54 0:00:10 0:00:44 4484k
21 269M 0 0 21 57.5M 0 5123k 0:00:53 0:00:11 0:00:42 4632k
22 269M 0 0 22 61.8M 0 5062k 0:00:54 0:00:12 0:00:42 4652k
24 269M 0 0 24 65.9M 0 4991k 0:00:55 0:00:13 0:00:42 4431k
26 269M 0 0 26 71.1M 0 5017k 0:00:55 0:00:14 0:00:41 4694k
28 269M 0 0 28 75.7M 0 4987k 0:00:55 0:00:15 0:00:40 4725k
29 269M 0 0 29 79.6M 0 4943k 0:00:55 0:00:16 0:00:39 4530k
31 269M 0 0 31 84.5M 0 4940k 0:00:55 0:00:17 0:00:38 4636k
33 269M 0 0 33 89.0M 0 4924k 0:00:56 0:00:18 0:00:38 4741k
34 269M 0 0 34 94.1M 0 4944k 0:00:55 0:00:19 0:00:36 4731k
36 269M 0 0 36 98.5M 0 4920k 0:00:56 0:00:20 0:00:36 4712k
38 269M 0 0 38 102M 0 4893k 0:00:56 0:00:21 0:00:35 4725k
40 269M 0 0 40 107M 0 4911k 0:00:56 0:00:22 0:00:34 4807k
41 269M 0 0 41 112M 0 4882k 0:00:56 0:00:23 0:00:33 4727k
43 269M 0 0 43 116M 0 4860k 0:00:56 0:00:24 0:00:32 4534k
45 269M 0 0 45 121M 0 4875k 0:00:56 0:00:25 0:00:31 4689k
46 269M 0 0 46 125M 0 4833k 0:00:57 0:00:26 0:00:31 4580k
47 269M 0 0 47 128M 0 4777k 0:00:57 0:00:27 0:00:30 4176k
49 269M 0 0 49 132M 0 4765k 0:00:57 0:00:28 0:00:29 4218k
51 269M 0 0 51 137M 0 4785k 0:00:57 0:00:29 0:00:28 4414k
52 269M 0 0 52 142M 0 4777k 0:00:57 0:00:30 0:00:27 4277k
54 269M 0 0 54 146M 0 4762k 0:00:57 0:00:31 0:00:26 4381k
56 269M 0 0 56 151M 0 4774k 0:00:57 0:00:32 0:00:25 4757k
57 269M 0 0 57 156M 0 4763k 0:00:57 0:00:33 0:00:24 4747k
59 269M 0 0 59 160M 0 4747k 0:00:58 0:00:34 0:00:24 4524k
61 269M 0 0 61 164M 0 4757k 0:00:58 0:00:35 0:00:23 4633k
62 269M 0 0 62 169M 0 4743k 0:00:58 0:00:36 0:00:22 4620k
64 269M 0 0 64 173M 0 4726k 0:00:58 0:00:37 0:00:21 4413k
66 269M 0 0 66 178M 0 4734k 0:00:58 0:00:38 0:00:20 4541k
67 269M 0 0 67 182M 0 4724k 0:00:58 0:00:39 0:00:19 4566k
69 269M 0 0 69 186M 0 4713k 0:00:58 0:00:40 0:00:18 4401k
70 269M 0 0 70 191M 0 4720k 0:00:58 0:00:41 0:00:17 4559k
72 269M 0 0 72 196M 0 4719k 0:00:58 0:00:42 0:00:16 4672k
74 269M 0 0 74 201M 0 4731k 0:00:58 0:00:43 0:00:15 4706k
76 269M 0 0 76 205M 0 4721k 0:00:58 0:00:44 0:00:14 4700k
77 269M 0 0 77 208M 0 4698k 0:00:58 0:00:45 0:00:13 4582k
78 269M 0 0 78 212M 0 4686k 0:00:58 0:00:46 0:00:12 4407k
80 269M 0 0 80 216M 0 4663k 0:00:59 0:00:47 0:00:12 4188k
81 269M 0 0 81 219M 0 4620k 0:00:59 0:00:48 0:00:11 3664k
82 269M 0 0 82 222M 0 4608k 0:00:59 0:00:49 0:00:10 3592k
84 269M 0 0 84 227M 0 4618k 0:00:59 0:00:50 0:00:09 3891k
86 269M 0 0 86 232M 0 4624k 0:00:59 0:00:51 0:00:08 4038k
87 269M 0 0 87 236M 0 4611k 0:00:59 0:00:52 0:00:07 4111k
89 269M 0 0 89 241M 0 4618k 0:00:59 0:00:53 0:00:06 4595k
91 269M 0 0 91 246M 0 4628k 0:00:59 0:00:54 0:00:05 4835k
93 269M 0 0 93 251M 0 4636k 0:00:59 0:00:55 0:00:04 4813k
94 269M 0 0 94 255M 0 4629k 0:00:59 0:00:56 0:00:03 4682k
95 269M 0 0 95 258M 0 4598k 0:01:00 0:00:57 0:00:03 4457k
96 269M 0 0 96 261M 0 4570k 0:01:00 0:00:58 0:00:02 4061k
98 269M 0 0 98 265M 0 4564k 0:01:00 0:00:59 0:00:01 3862k
100 269M 0 0 100 269M 0 4498k 0:01:01 0:01:01 --:--:-- 3199k
100 269M 0 0 100 269M 0 4426k 0:01:02 0:01:02 --:--:-- 2477k
100 269M 0 0 100 269M 0 4356k 0:01:03 0:01:03 --:--:-- 1984k
100 269M 0 0 100 269M 0 4288k 0:01:04 0:01:04 --:--:-- 1470k
100 269M 0 0 100 269M 0 4223k 0:01:05 0:01:05 --:--:-- 768k
100 269M 0 0 100 269M 0 4159k 0:01:06 0:01:06 --:--:-- 0
100 269M 0 0 100 269M 0 4097k 0:01:07 0:01:07 --:--:-- 0
100 269M 0 0 100 269M 0 4037k 0:01:08 0:01:08 --:--:-- 0
100 269M 0 0 100 269M 0 3979k 0:01:09 0:01:09 --:--:-- 0
100 269M 0 0 100 269M 0 3922k 0:01:10 0:01:10 --:--:-- 0
100 269M 0 0 100 269M 0 3867k 0:01:11 0:01:11 --:--:-- 0
100 269M 0 0 100 269M 0 3814k 0:01:12 0:01:12 --:--:-- 0
100 269M 0 0 100 269M 0 3762k 0:01:13 0:01:13 --:--:-- 0
100 269M 0 0 100 269M 0 3711k 0:01:14 0:01:14 --:--:-- 0
100 269M 0 0 100 269M 0 3662k 0:01:15 0:01:15 --:--:-- 0
100 269M 0 0 100 269M 0 3614k 0:01:16 0:01:16 --:--:-- 0
100 269M 0 0 100 269M 0 3567k 0:01:17 0:01:17 --:--:-- 0
100 269M 0 0 100 269M 0 3522k 0:01:18 0:01:18 --:--:-- 0
100 269M 0 0 100 269M 0 3477k 0:01:19 0:01:19 --:--:-- 0
100 269M 0 0 100 269M 0 3434k 0:01:20 0:01:20 --:--:-- 0
100 269M 0 0 100 269M 0 3392k 0:01:21 0:01:21 --:--:-- 0
100 269M 0 0 100 269M 0 3350k 0:01:22 0:01:22 --:--:-- 0
100 269M 0 0 100 269M 0 3310k 0:01:23 0:01:23 --:--:-- 0
100 269M 0 0 100 269M 0 3271k 0:01:24 0:01:24 --:--:-- 0
100 269M 0 0 100 269M 0 3233k 0:01:25 0:01:25 --:--:-- 0
100 269M 0 0 100 269M 0 3195k 0:01:26 0:01:26 --:--:-- 0
100 269M 0 0 100 269M 0 3159k 0:01:27 0:01:27 --:--:-- 0
100 269M 0 0 100 269M 0 3123k 0:01:28 0:01:28 --:--:-- 0
100 269M 0 0 100 269M 0 3088k 0:01:29 0:01:29 --:--:-- 0
100 269M 0 0 100 269M 0 3054k 0:01:30 0:01:30 --:--:-- 0
100 269M 0 0 100 269M 0 3020k 0:01:31 0:01:31 --:--:-- 0
100 269M 0 0 100 269M 0 2987k 0:01:32 0:01:32 --:--:-- 0
100 269M 0 0 100 269M 0 2955k 0:01:33 0:01:33 --:--:-- 0
100 269M 0 0 100 269M 0 2924k 0:01:34 0:01:34 --:--:-- 0
100 269M 0 0 100 269M 0 2893k 0:01:35 0:01:35 --:--:-- 0
100 269M 0 0 100 269M 0 2863k 0:01:36 0:01:36 --:--:-- 0
100 269M 0 0 100 269M 0 2834k 0:01:37 0:01:37 --:--:-- 0
100 269M 0 0 100 269M 0 2805k 0:01:38 0:01:38 --:--:-- 0
100 269M 0 0 100 269M 0 2777k 0:01:39 0:01:39 --:--:-- 0
100 269M 0 0 100 269M 0 2749k 0:01:40 0:01:40 --:--:-- 0
100 269M 0 0 100 269M 0 2722k 0:01:41 0:01:41 --:--:-- 0
100 269M 0 0 100 269M 0 2695k 0:01:42 0:01:42 --:--:-- 0
100 269M 0 0 100 269M 0 2669k 0:01:43 0:01:43 --:--:-- 0
100 269M 0 0 100 269M 0 2644k 0:01:44 0:01:44 --:--:-- 0
100 269M 0 0 100 269M 0 2619k 0:01:45 0:01:45 --:--:-- 0
100 269M 0 0 100 269M 0 2594k 0:01:46 0:01:46 --:--:-- 0
100 269M 0 0 100 269M 0 2570k 0:01:47 0:01:47 --:--:-- 0
100 269M 0 0 100 269M 0 2546k 0:01:48 0:01:48 --:--:-- 0
100 269M 0 0 100 269M 0 2523k 0:01:49 0:01:49 --:--:-- 0
100 269M 0 0 100 269M 0 2500k 0:01:50 0:01:50 --:--:-- 0
100 269M 0 0 100 269M 0 2477k 0:01:51 0:01:51 --:--:-- 0
100 269M 0 0 100 269M 0 2455k 0:01:52 0:01:52 --:--:-- 0
100 269M 0 0 100 269M 0 2434k 0:01:53 0:01:53 --:--:-- 0
100 269M 0 0 100 269M 0 2412k 0:01:54 0:01:54 --:--:-- 0
100 269M 0 0 100 269M 0 2391k 0:01:55 0:01:55 --:--:-- 0
100 269M 0 0 100 269M 0 2371k 0:01:56 0:01:56 --:--:-- 0
100 269M 0 0 100 269M 0 2351k 0:01:57 0:01:57 --:--:-- 0
100 269M 0 43 100 269M 0 2350k 0:01:57 0:01:57 --:--:-- 10
[Pipeline] echo
{"msg":"操作成功","code":200,"data":""}
[Pipeline] readJSON
[Pipeline] echo
[msg:操作成功, code:200, data:]
[Pipeline] echo
status:200
[Pipeline] echo
{"msg":"操作成功","code":200,"data":""}
[Pipeline] }
[Pipeline] // dir
[Pipeline] sh
+ rm -rf /root/workspace/params-submodule/jining-liangshan-submodule/JNLSG_JL_AT019/master@tmp
[Pipeline] sh
+ rm -rf /root/workspace/params-submodule/jining-liangshan-submodule/JNLSG_JL_AT019/master/params_submodule/
[Pipeline] echo
------------------------------------- JNLSG_JL_AT019压缩并上传,slave -------------------------------------------
[Pipeline] dir
Running in /root/workspace/params-submodule/jining-liangshan-submodule/JNLSG_JL_AT019/slave
[Pipeline] {
[Pipeline] sh
+ cd /root/workspace/params-submodule/jining-liangshan-submodule/JNLSG_JL_AT019/slave/params/
+ ls -d crane_align/ crane_detection/ data_collection/ extrinsics/ hardware/ hdmap/ hdmap_interface/ hesai_lidar/ imv_spreader_detection/ lane_detection/ lidar_camera_fusion/ lidar_correction_files/ lidar_loc_v2/ master/ new_truck_spreader_detection/ perception/ pncc_common_config/ pncc_port_related_config/ pncc_vehicle_related_config/ pointcloud/ prediction/ rslidar_sdk/ slave/ spreader_detection/ system-ros/
[Pipeline] echo
crane_align/
crane_detection/
data_collection/
extrinsics/
hardware/
hdmap/
hdmap_interface/
hesai_lidar/
imv_spreader_detection/
lane_detection/
lidar_camera_fusion/
lidar_correction_files/
lidar_loc_v2/
master/
new_truck_spreader_detection/
perception/
pncc_common_config/
pncc_port_related_config/
pncc_vehicle_related_config/
pointcloud/
prediction/
rslidar_sdk/
slave/
spreader_detection/
system-ros/
[Pipeline] echo
最终目录包含slave目录,进行合并操作
[Pipeline] sh
+ cp -r /root/workspace/params-submodule/jining-liangshan-submodule/JNLSG_JL_AT019/slave/params/slave/camera_driver /root/workspace/params-submodule/jining-liangshan-submodule/JNLSG_JL_AT019/slave/params/slave/recorder.toml /root/workspace/params-submodule/jining-liangshan-submodule/JNLSG_JL_AT019/slave/params/slave/system-ros /root/workspace/params-submodule/jining-liangshan-submodule/JNLSG_JL_AT019/slave/params/
[Pipeline] sh
+ mkdir -p params_module_orin_slave_JNLSG_JL_AT019_2026-08-16_17-02-19/
+ mv params/ params_module_orin_slave_JNLSG_JL_AT019_2026-08-16_17-02-19/
[Pipeline] sh
+ zip -rq params_module_orin_slave_JNLSG_JL_AT019_2026-08-16_17-02-19.zip params_module_orin_slave_JNLSG_JL_AT019_2026-08-16_17-02-19 ./version.json
[Pipeline] echo
/root/workspace/params-submodule/jining-liangshan-submodule/JNLSG_JL_AT019/slave/params_module_orin_slave_JNLSG_JL_AT019_2026-08-16_17-02-19.zip,/root/workspace/params-submodule/jining-liangshan-submodule/JNLSG_JL_AT019/slave/version.json
[Pipeline] sh
+ curl -X POST http://159.27.114.184:31018/ota-api/otaUploadFileAndVersion --form 'Content-Type="multipart/form-data"' --form 'file=@"/root/workspace/params-submodule/jining-liangshan-submodule/JNLSG_JL_AT019/slave/params_module_orin_slave_JNLSG_JL_AT019_2026-08-16_17-02-19.zip"' --form 'version=@"/root/workspace/params-submodule/jining-liangshan-submodule/JNLSG_JL_AT019/slave/version.json"'
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
2 260M 0 0 2 7744k 0 10.0M 0:00:25 --:--:-- 0:00:25 10.0M
4 260M 0 0 4 11.1M 0 6646k 0:00:40 0:00:01 0:00:39 6642k
6 260M 0 0 6 15.8M 0 5966k 0:00:44 0:00:02 0:00:42 5963k
7 260M 0 0 7 20.5M 0 5611k 0:00:47 0:00:03 0:00:44 5610k
9 260M 0 0 9 23.7M 0 5161k 0:00:51 0:00:04 0:00:47 5160k
10 260M 0 0 10 27.3M 0 4912k 0:00:54 0:00:05 0:00:49 4094k
12 260M 0 0 12 32.0M 0 4886k 0:00:54 0:00:06 0:00:48 4283k
14 260M 0 0 14 36.8M 0 4896k 0:00:54 0:00:07 0:00:47 4312k
15 260M 0 0 15 40.6M 0 4778k 0:00:55 0:00:08 0:00:47 4146k
17 260M 0 0 17 45.3M 0 4772k 0:00:55 0:00:09 0:00:46 4407k
19 260M 0 0 19 50.5M 0 4837k 0:00:55 0:00:10 0:00:45 4749k
21 260M 0 0 21 54.6M 0 4793k 0:00:55 0:00:11 0:00:44 4666k
22 260M 0 0 22 59.0M 0 4766k 0:00:55 0:00:12 0:00:43 4565k
24 260M 0 0 24 64.3M 0 4798k 0:00:55 0:00:13 0:00:42 4832k
26 260M 0 0 26 68.3M 0 4752k 0:00:56 0:00:14 0:00:42 4712k
27 260M 0 0 27 71.7M 0 4683k 0:00:56 0:00:15 0:00:41 4354k
29 260M 0 0 29 75.9M 0 4659k 0:00:57 0:00:16 0:00:41 4349k
31 260M 0 0 31 81.0M 0 4683k 0:00:56 0:00:17 0:00:39 4475k
33 260M 0 0 33 86.0M 0 4707k 0:00:56 0:00:18 0:00:38 4456k
34 260M 0 0 34 91.0M 0 4731k 0:00:56 0:00:19 0:00:37 4669k
36 260M 0 0 36 95.9M 0 4744k 0:00:56 0:00:20 0:00:36 4931k
38 260M 0 0 38 101M 0 4769k 0:00:55 0:00:21 0:00:34 5132k
40 260M 0 0 40 104M 0 4721k 0:00:56 0:00:22 0:00:34 4856k
42 260M 0 0 42 109M 0 4715k 0:00:56 0:00:23 0:00:33 4746k
43 260M 0 0 43 114M 0 4741k 0:00:56 0:00:24 0:00:32 4783k
45 260M 0 0 45 118M 0 4728k 0:00:56 0:00:25 0:00:31 4667k
46 260M 0 0 46 122M 0 4681k 0:00:56 0:00:26 0:00:30 4305k
48 260M 0 0 48 126M 0 4658k 0:00:57 0:00:27 0:00:30 4370k
50 260M 0 0 50 130M 0 4644k 0:00:57 0:00:28 0:00:29 4305k
51 260M 0 0 51 134M 0 4652k 0:00:57 0:00:29 0:00:28 4212k
53 260M 0 0 53 139M 0 4658k 0:00:57 0:00:30 0:00:27 4294k
55 260M 0 0 55 143M 0 4629k 0:00:57 0:00:31 0:00:26 4349k
56 260M 0 0 56 147M 0 4632k 0:00:57 0:00:32 0:00:25 4488k
58 260M 0 0 58 152M 0 4638k 0:00:57 0:00:33 0:00:24 4601k
60 260M 0 0 60 156M 0 4605k 0:00:57 0:00:34 0:00:23 4331k
61 260M 0 0 61 158M 0 4550k 0:00:58 0:00:35 0:00:23 3896k
62 260M 0 0 62 162M 0 4533k 0:00:58 0:00:36 0:00:22 3922k
64 260M 0 0 64 167M 0 4544k 0:00:58 0:00:37 0:00:21 3968k
66 260M 0 0 66 172M 0 4547k 0:00:58 0:00:38 0:00:20 3937k
67 260M 0 0 67 175M 0 4536k 0:00:58 0:00:39 0:00:19 4054k
69 260M 0 0 69 180M 0 4546k 0:00:58 0:00:40 0:00:18 4512k
71 260M 0 0 71 186M 0 4565k 0:00:58 0:00:41 0:00:17 4798k
72 260M 0 0 72 189M 0 4549k 0:00:58 0:00:42 0:00:16 4595k
74 260M 0 0 74 194M 0 4557k 0:00:58 0:00:43 0:00:15 4635k
76 260M 0 0 76 199M 0 4573k 0:00:58 0:00:44 0:00:14 4864k
78 260M 0 0 78 203M 0 4566k 0:00:58 0:00:45 0:00:13 4730k
80 260M 0 0 80 208M 0 4564k 0:00:58 0:00:46 0:00:12 4558k
82 260M 0 0 82 213M 0 4581k 0:00:58 0:00:47 0:00:11 4849k
83 260M 0 0 83 217M 0 4577k 0:00:58 0:00:48 0:00:10 4750k
85 260M 0 0 85 222M 0 4573k 0:00:58 0:00:49 0:00:09 4573k
87 260M 0 0 87 227M 0 4585k 0:00:58 0:00:50 0:00:08 4755k
88 260M 0 0 88 231M 0 4579k 0:00:58 0:00:51 0:00:07 4718k
90 260M 0 0 90 235M 0 4575k 0:00:58 0:00:52 0:00:06 4514k
92 260M 0 0 92 240M 0 4586k 0:00:58 0:00:53 0:00:05 4675k
94 260M 0 0 94 245M 0 4583k 0:00:58 0:00:54 0:00:04 4686k
95 260M 0 0 95 249M 0 4577k 0:00:58 0:00:55 0:00:03 4500k
97 260M 0 0 97 252M 0 4568k 0:00:58 0:00:56 0:00:02 4447k
99 260M 0 0 99 257M 0 4575k 0:00:58 0:00:57 0:00:01 4580k
100 260M 0 0 100 260M 0 4506k 0:00:59 0:00:59 --:--:-- 3713k
100 260M 0 0 100 260M 0 4431k 0:01:00 0:01:00 --:--:-- 2878k
100 260M 0 0 100 260M 0 4359k 0:01:01 0:01:01 --:--:-- 2106k
100 260M 0 0 100 260M 0 4288k 0:01:02 0:01:02 --:--:-- 1358k
100 260M 0 0 100 260M 0 4220k 0:01:03 0:01:03 --:--:-- 413k
100 260M 0 0 100 260M 0 4155k 0:01:04 0:01:04 --:--:-- 0
100 260M 0 0 100 260M 0 4091k 0:01:05 0:01:05 --:--:-- 0
100 260M 0 0 100 260M 0 4029k 0:01:06 0:01:06 --:--:-- 0
100 260M 0 0 100 260M 0 3969k 0:01:07 0:01:07 --:--:-- 0
100 260M 0 0 100 260M 0 3910k 0:01:08 0:01:08 --:--:-- 0
100 260M 0 0 100 260M 0 3854k 0:01:09 0:01:09 --:--:-- 0
100 260M 0 0 100 260M 0 3799k 0:01:10 0:01:10 --:--:-- 0
100 260M 0 0 100 260M 0 3745k 0:01:11 0:01:11 --:--:-- 0
100 260M 0 0 100 260M 0 3693k 0:01:12 0:01:12 --:--:-- 0
100 260M 0 0 100 260M 0 3642k 0:01:13 0:01:13 --:--:-- 0
100 260M 0 0 100 260M 0 3593k 0:01:14 0:01:14 --:--:-- 0
100 260M 0 0 100 260M 0 3545k 0:01:15 0:01:15 --:--:-- 0
100 260M 0 0 100 260M 0 3499k 0:01:16 0:01:16 --:--:-- 0
100 260M 0 0 100 260M 0 3453k 0:01:17 0:01:17 --:--:-- 0
100 260M 0 0 100 260M 0 3409k 0:01:18 0:01:18 --:--:-- 0
100 260M 0 0 100 260M 0 3366k 0:01:19 0:01:19 --:--:-- 0
100 260M 0 0 100 260M 0 3324k 0:01:20 0:01:20 --:--:-- 0
100 260M 0 0 100 260M 0 3283k 0:01:21 0:01:21 --:--:-- 0
100 260M 0 0 100 260M 0 3243k 0:01:22 0:01:22 --:--:-- 0
100 260M 0 0 100 260M 0 3204k 0:01:23 0:01:23 --:--:-- 0
100 260M 0 0 100 260M 0 3166k 0:01:24 0:01:24 --:--:-- 0
100 260M 0 0 100 260M 0 3128k 0:01:25 0:01:25 --:--:-- 0
100 260M 0 0 100 260M 0 3092k 0:01:26 0:01:26 --:--:-- 0
100 260M 0 0 100 260M 0 3056k 0:01:27 0:01:27 --:--:-- 0
100 260M 0 0 100 260M 0 3022k 0:01:28 0:01:28 --:--:-- 0
100 260M 0 0 100 260M 0 2988k 0:01:29 0:01:29 --:--:-- 0
100 260M 0 0 100 260M 0 2955k 0:01:30 0:01:30 --:--:-- 0
100 260M 0 0 100 260M 0 2922k 0:01:31 0:01:31 --:--:-- 0
100 260M 0 0 100 260M 0 2890k 0:01:32 0:01:32 --:--:-- 0
100 260M 0 0 100 260M 0 2859k 0:01:33 0:01:33 --:--:-- 0
100 260M 0 0 100 260M 0 2829k 0:01:34 0:01:34 --:--:-- 0
100 260M 0 0 100 260M 0 2799k 0:01:35 0:01:35 --:--:-- 0
100 260M 0 0 100 260M 0 2770k 0:01:36 0:01:36 --:--:-- 0
100 260M 0 0 100 260M 0 2741k 0:01:37 0:01:37 --:--:-- 0
100 260M 0 0 100 260M 0 2713k 0:01:38 0:01:38 --:--:-- 0
100 260M 0 0 100 260M 0 2686k 0:01:39 0:01:39 --:--:-- 0
100 260M 0 0 100 260M 0 2659k 0:01:40 0:01:40 --:--:-- 0
100 260M 0 0 100 260M 0 2633k 0:01:41 0:01:41 --:--:-- 0
100 260M 0 0 100 260M 0 2607k 0:01:42 0:01:42 --:--:-- 0
100 260M 0 0 100 260M 0 2582k 0:01:43 0:01:43 --:--:-- 0
100 260M 0 0 100 260M 0 2557k 0:01:44 0:01:44 --:--:-- 0
100 260M 0 0 100 260M 0 2533k 0:01:45 0:01:45 --:--:-- 0
100 260M 0 0 100 260M 0 2509k 0:01:46 0:01:46 --:--:-- 0
100 260M 0 0 100 260M 0 2485k 0:01:47 0:01:47 --:--:-- 0
100 260M 0 0 100 260M 0 2462k 0:01:48 0:01:48 --:--:-- 0
100 260M 0 0 100 260M 0 2440k 0:01:49 0:01:49 --:--:-- 0
100 260M 0 43 100 260M 0 2422k 0:01:49 0:01:49 --:--:-- 8
100 260M 0 43 100 260M 0 2422k 0:01:49 0:01:49 --:--:-- 11
[Pipeline] echo
{"msg":"操作成功","code":200,"data":""}
[Pipeline] readJSON
[Pipeline] echo
[msg:操作成功, code:200, data:]
[Pipeline] echo
status:200
[Pipeline] echo
{"msg":"操作成功","code":200,"data":""}
[Pipeline] }
[Pipeline] // dir
[Pipeline] sh
+ rm -rf /root/workspace/params-submodule/jining-liangshan-submodule/JNLSG_JL_AT019/slave@tmp
[Pipeline] sh
+ rm -rf /root/workspace/params-submodule/jining-liangshan-submodule/JNLSG_JL_AT019/slave/params_submodule/
[Pipeline] echo
------------------------------------- JNLSG_JL_AT020压缩并上传,master -------------------------------------------
[Pipeline] dir
Running in /root/workspace/params-submodule/jining-liangshan-submodule/JNLSG_JL_AT020/master
[Pipeline] {
[Pipeline] sh
+ cd /root/workspace/params-submodule/jining-liangshan-submodule/JNLSG_JL_AT020/master/params/
+ ls -d crane_align/ crane_detection/ data_collection/ extrinsics/ hardware/ hdmap/ hdmap_interface/ hesai_lidar/ imv_spreader_detection/ lane_detection/ lidar_camera_fusion/ lidar_correction_files/ lidar_loc_v2/ master/ new_truck_spreader_detection/ perception/ pncc_common_config/ pncc_port_related_config/ pncc_vehicle_related_config/ pointcloud/ prediction/ rslidar_sdk/ slave/ spreader_detection/ system-ros/
[Pipeline] echo
crane_align/
crane_detection/
data_collection/
extrinsics/
hardware/
hdmap/
hdmap_interface/
hesai_lidar/
imv_spreader_detection/
lane_detection/
lidar_camera_fusion/
lidar_correction_files/
lidar_loc_v2/
master/
new_truck_spreader_detection/
perception/
pncc_common_config/
pncc_port_related_config/
pncc_vehicle_related_config/
pointcloud/
prediction/
rslidar_sdk/
slave/
spreader_detection/
system-ros/
[Pipeline] echo
最终目录包含master目录,进行合并操作
[Pipeline] sh
+ cp -r /root/workspace/params-submodule/jining-liangshan-submodule/JNLSG_JL_AT020/master/params/master/camera_driver /root/workspace/params-submodule/jining-liangshan-submodule/JNLSG_JL_AT020/master/params/master/recorder.toml /root/workspace/params-submodule/jining-liangshan-submodule/JNLSG_JL_AT020/master/params/master/system-ros /root/workspace/params-submodule/jining-liangshan-submodule/JNLSG_JL_AT020/master/params/
[Pipeline] sh
+ mkdir -p params_module_orin_master_JNLSG_JL_AT020_2026-08-16_17-02-19/
+ mv params/ params_module_orin_master_JNLSG_JL_AT020_2026-08-16_17-02-19/
[Pipeline] sh
+ zip -rq params_module_orin_master_JNLSG_JL_AT020_2026-08-16_17-02-19.zip params_module_orin_master_JNLSG_JL_AT020_2026-08-16_17-02-19 ./version.json
[Pipeline] echo
/root/workspace/params-submodule/jining-liangshan-submodule/JNLSG_JL_AT020/master/params_module_orin_master_JNLSG_JL_AT020_2026-08-16_17-02-19.zip,/root/workspace/params-submodule/jining-liangshan-submodule/JNLSG_JL_AT020/master/version.json
[Pipeline] sh
+ curl -X POST http://159.27.114.184:31018/ota-api/otaUploadFileAndVersion --form 'Content-Type="multipart/form-data"' --form 'file=@"/root/workspace/params-submodule/jining-liangshan-submodule/JNLSG_JL_AT020/master/params_module_orin_master_JNLSG_JL_AT020_2026-08-16_17-02-19.zip"' --form 'version=@"/root/workspace/params-submodule/jining-liangshan-submodule/JNLSG_JL_AT020/master/version.json"'
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
0 269M 0 0 0 2688k 0 9111k 0:00:30 --:--:-- 0:00:30 9081k
3 269M 0 0 3 9152k 0 6949k 0:00:39 0:00:01 0:00:38 6943k
4 269M 0 0 4 13.0M 0 5705k 0:00:48 0:00:02 0:00:46 5703k
6 269M 0 0 6 17.7M 0 5536k 0:00:49 0:00:03 0:00:46 5534k
8 269M 0 0 8 22.0M 0 5206k 0:00:53 0:00:04 0:00:49 5206k
9 269M 0 0 9 26.1M 0 5044k 0:00:54 0:00:05 0:00:49 4805k
11 269M 0 0 11 29.6M 0 4833k 0:00:57 0:00:06 0:00:51 4272k
11 269M 0 0 11 32.0M 0 4460k 0:01:01 0:00:07 0:00:54 3881k
12 269M 0 0 12 34.8M 0 4296k 0:01:04 0:00:08 0:00:56 3488k
14 269M 0 0 14 39.1M 0 4300k 0:01:04 0:00:09 0:00:55 3517k
16 269M 0 0 16 44.1M 0 4384k 0:01:02 0:00:10 0:00:52 3685k
18 269M 0 0 18 48.6M 0 4413k 0:01:02 0:00:11 0:00:51 3884k
19 269M 0 0 19 52.7M 0 4388k 0:01:02 0:00:12 0:00:50 4282k
21 269M 0 0 21 57.6M 0 4440k 0:01:02 0:00:13 0:00:49 4678k
23 269M 0 0 23 62.5M 0 4481k 0:01:01 0:00:14 0:00:47 4821k
24 269M 0 0 24 66.1M 0 4420k 0:01:02 0:00:15 0:00:47 4493k
25 269M 0 0 25 68.9M 0 4327k 0:01:03 0:00:16 0:00:47 4135k
27 269M 0 0 27 72.8M 0 4306k 0:01:04 0:00:17 0:00:47 4105k
28 269M 0 0 28 77.5M 0 4340k 0:01:03 0:00:18 0:00:45 4075k
30 269M 0 0 30 82.8M 0 4392k 0:01:02 0:00:19 0:00:43 4141k
32 269M 0 0 32 86.8M 0 4372k 0:01:03 0:00:20 0:00:43 4227k
33 269M 0 0 33 91.3M 0 4389k 0:01:02 0:00:21 0:00:41 4590k
35 269M 0 0 35 96.6M 0 4434k 0:01:02 0:00:22 0:00:40 4875k
37 269M 0 0 37 100M 0 4415k 0:01:02 0:00:23 0:00:39 4689k
38 269M 0 0 38 104M 0 4420k 0:01:02 0:00:24 0:00:38 4528k
40 269M 0 0 40 110M 0 4461k 0:01:01 0:00:25 0:00:36 4825k
42 269M 0 0 42 114M 0 4450k 0:01:02 0:00:26 0:00:36 4710k
44 269M 0 0 44 118M 0 4450k 0:01:02 0:00:27 0:00:35 4522k
45 269M 0 0 45 123M 0 4478k 0:01:01 0:00:28 0:00:33 4772k
47 269M 0 0 47 128M 0 4470k 0:01:01 0:00:29 0:00:32 4713k
49 269M 0 0 49 132M 0 4466k 0:01:01 0:00:30 0:00:31 4494k
50 269M 0 0 50 137M 0 4491k 0:01:01 0:00:31 0:00:30 4707k
52 269M 0 0 52 142M 0 4501k 0:01:01 0:00:32 0:00:29 4777k
54 269M 0 0 54 147M 0 4525k 0:01:01 0:00:33 0:00:28 4793k
56 269M 0 0 56 151M 0 4506k 0:01:01 0:00:34 0:00:27 4713k
57 269M 0 0 57 155M 0 4509k 0:01:01 0:00:35 0:00:26 4769k
59 269M 0 0 59 160M 0 4529k 0:01:00 0:00:36 0:00:24 4770k
61 269M 0 0 61 165M 0 4535k 0:01:00 0:00:37 0:00:23 4754k
63 269M 0 0 63 170M 0 4558k 0:01:00 0:00:38 0:00:22 4778k
64 269M 0 0 64 175M 0 4557k 0:01:00 0:00:39 0:00:21 4914k
66 269M 0 0 66 179M 0 4552k 0:01:00 0:00:40 0:00:20 4851k
68 269M 0 0 68 184M 0 4570k 0:01:00 0:00:41 0:00:19 4865k
69 269M 0 0 69 188M 0 4556k 0:01:00 0:00:42 0:00:18 4718k
71 269M 0 0 71 192M 0 4552k 0:01:00 0:00:43 0:00:17 4509k
73 269M 0 0 73 197M 0 4568k 0:01:00 0:00:44 0:00:16 4652k
74 269M 0 0 74 200M 0 4532k 0:01:00 0:00:45 0:00:15 4374k
75 269M 0 0 75 203M 0 4495k 0:01:01 0:00:46 0:00:15 3874k
76 269M 0 0 76 207M 0 4481k 0:01:01 0:00:47 0:00:14 3844k
78 269M 0 0 78 211M 0 4493k 0:01:01 0:00:48 0:00:13 3981k
80 269M 0 0 80 217M 0 4512k 0:01:01 0:00:49 0:00:12 4014k
82 269M 0 0 82 222M 0 4523k 0:01:01 0:00:50 0:00:11 4448k
84 269M 0 0 84 227M 0 4533k 0:01:00 0:00:51 0:00:09 4885k
85 269M 0 0 85 231M 0 4521k 0:01:01 0:00:52 0:00:09 4897k
87 269M 0 0 87 235M 0 4529k 0:01:00 0:00:53 0:00:07 4870k
89 269M 0 0 89 240M 0 4543k 0:01:00 0:00:54 0:00:06 4854k
91 269M 0 0 91 245M 0 4552k 0:01:00 0:00:55 0:00:05 4836k
93 269M 0 0 93 250M 0 4564k 0:01:00 0:00:56 0:00:04 4874k
94 269M 0 0 94 256M 0 4573k 0:01:00 0:00:57 0:00:03 5120k
96 269M 0 0 96 260M 0 4572k 0:01:00 0:00:58 0:00:02 5026k
98 269M 0 0 98 264M 0 4567k 0:01:00 0:00:59 0:00:01 4830k
99 269M 0 0 99 268M 0 4557k 0:01:00 0:01:00 --:--:-- 4617k
100 269M 0 0 100 269M 0 4482k 0:01:01 0:01:01 --:--:-- 3615k
100 269M 0 0 100 269M 0 4410k 0:01:02 0:01:02 --:--:-- 2638k
100 269M 0 0 100 269M 0 4341k 0:01:03 0:01:03 --:--:-- 1789k
100 269M 0 0 100 269M 0 4274k 0:01:04 0:01:04 --:--:-- 995k
100 269M 0 0 100 269M 0 4208k 0:01:05 0:01:05 --:--:-- 237k
100 269M 0 0 100 269M 0 4145k 0:01:06 0:01:06 --:--:-- 0
100 269M 0 0 100 269M 0 4084k 0:01:07 0:01:07 --:--:-- 0
100 269M 0 0 100 269M 0 4024k 0:01:08 0:01:08 --:--:-- 0
100 269M 0 0 100 269M 0 3966k 0:01:09 0:01:09 --:--:-- 0
100 269M 0 0 100 269M 0 3910k 0:01:10 0:01:10 --:--:-- 0
100 269M 0 0 100 269M 0 3855k 0:01:11 0:01:11 --:--:-- 0
100 269M 0 0 100 269M 0 3802k 0:01:12 0:01:12 --:--:-- 0
100 269M 0 0 100 269M 0 3750k 0:01:13 0:01:13 --:--:-- 0
100 269M 0 0 100 269M 0 3700k 0:01:14 0:01:14 --:--:-- 0
100 269M 0 0 100 269M 0 3651k 0:01:15 0:01:15 --:--:-- 0
100 269M 0 0 100 269M 0 3603k 0:01:16 0:01:16 --:--:-- 0
100 269M 0 0 100 269M 0 3557k 0:01:17 0:01:17 --:--:-- 0
100 269M 0 0 100 269M 0 3512k 0:01:18 0:01:18 --:--:-- 0
100 269M 0 0 100 269M 0 3467k 0:01:19 0:01:19 --:--:-- 0
100 269M 0 0 100 269M 0 3424k 0:01:20 0:01:20 --:--:-- 0
100 269M 0 0 100 269M 0 3382k 0:01:21 0:01:21 --:--:-- 0
100 269M 0 0 100 269M 0 3341k 0:01:22 0:01:22 --:--:-- 0
100 269M 0 0 100 269M 0 3301k 0:01:23 0:01:23 --:--:-- 0
100 269M 0 0 100 269M 0 3262k 0:01:24 0:01:24 --:--:-- 0
100 269M 0 0 100 269M 0 3224k 0:01:25 0:01:25 --:--:-- 0
100 269M 0 0 100 269M 0 3187k 0:01:26 0:01:26 --:--:-- 0
100 269M 0 0 100 269M 0 3150k 0:01:27 0:01:27 --:--:-- 0
100 269M 0 0 100 269M 0 3115k 0:01:28 0:01:28 --:--:-- 0
100 269M 0 0 100 269M 0 3080k 0:01:29 0:01:29 --:--:-- 0
100 269M 0 0 100 269M 0 3046k 0:01:30 0:01:30 --:--:-- 0
100 269M 0 0 100 269M 0 3013k 0:01:31 0:01:31 --:--:-- 0
100 269M 0 0 100 269M 0 2980k 0:01:32 0:01:32 --:--:-- 0
100 269M 0 0 100 269M 0 2948k 0:01:33 0:01:33 --:--:-- 0
100 269M 0 0 100 269M 0 2917k 0:01:34 0:01:34 --:--:-- 0
100 269M 0 0 100 269M 0 2887k 0:01:35 0:01:35 --:--:-- 0
100 269M 0 0 100 269M 0 2857k 0:01:36 0:01:36 --:--:-- 0
100 269M 0 0 100 269M 0 2827k 0:01:37 0:01:37 --:--:-- 0
100 269M 0 0 100 269M 0 2799k 0:01:38 0:01:38 --:--:-- 0
100 269M 0 0 100 269M 0 2771k 0:01:39 0:01:39 --:--:-- 0
100 269M 0 0 100 269M 0 2743k 0:01:40 0:01:40 --:--:-- 0
100 269M 0 0 100 269M 0 2716k 0:01:41 0:01:41 --:--:-- 0
100 269M 0 0 100 269M 0 2690k 0:01:42 0:01:42 --:--:-- 0
100 269M 0 0 100 269M 0 2664k 0:01:43 0:01:43 --:--:-- 0
100 269M 0 0 100 269M 0 2638k 0:01:44 0:01:44 --:--:-- 0
100 269M 0 0 100 269M 0 2613k 0:01:45 0:01:45 --:--:-- 0
100 269M 0 0 100 269M 0 2589k 0:01:46 0:01:46 --:--:-- 0
100 269M 0 0 100 269M 0 2564k 0:01:47 0:01:47 --:--:-- 0
100 269M 0 0 100 269M 0 2541k 0:01:48 0:01:48 --:--:-- 0
100 269M 0 0 100 269M 0 2518k 0:01:49 0:01:49 --:--:-- 0
100 269M 0 0 100 269M 0 2495k 0:01:50 0:01:50 --:--:-- 0
100 269M 0 0 100 269M 0 2472k 0:01:51 0:01:51 --:--:-- 0
100 269M 0 0 100 269M 0 2450k 0:01:52 0:01:52 --:--:-- 0
100 269M 0 0 100 269M 0 2429k 0:01:53 0:01:53 --:--:-- 0
100 269M 0 0 100 269M 0 2408k 0:01:54 0:01:54 --:--:-- 0
100 269M 0 43 100 269M 0 2405k 0:01:54 0:01:54 --:--:-- 10
[Pipeline] echo
{"msg":"操作成功","code":200,"data":""}
[Pipeline] readJSON
[Pipeline] echo
[msg:操作成功, code:200, data:]
[Pipeline] echo
status:200
[Pipeline] echo
{"msg":"操作成功","code":200,"data":""}
[Pipeline] }
[Pipeline] // dir
[Pipeline] sh
+ rm -rf /root/workspace/params-submodule/jining-liangshan-submodule/JNLSG_JL_AT020/master@tmp
[Pipeline] sh
+ rm -rf /root/workspace/params-submodule/jining-liangshan-submodule/JNLSG_JL_AT020/master/params_submodule/
[Pipeline] echo
------------------------------------- JNLSG_JL_AT020压缩并上传,slave -------------------------------------------
[Pipeline] dir
Running in /root/workspace/params-submodule/jining-liangshan-submodule/JNLSG_JL_AT020/slave
[Pipeline] {
[Pipeline] sh
+ cd /root/workspace/params-submodule/jining-liangshan-submodule/JNLSG_JL_AT020/slave/params/
+ ls -d crane_align/ crane_detection/ data_collection/ extrinsics/ hardware/ hdmap/ hdmap_interface/ hesai_lidar/ imv_spreader_detection/ lane_detection/ lidar_camera_fusion/ lidar_correction_files/ lidar_loc_v2/ master/ new_truck_spreader_detection/ perception/ pncc_common_config/ pncc_port_related_config/ pncc_vehicle_related_config/ pointcloud/ prediction/ rslidar_sdk/ slave/ spreader_detection/ system-ros/
[Pipeline] echo
crane_align/
crane_detection/
data_collection/
extrinsics/
hardware/
hdmap/
hdmap_interface/
hesai_lidar/
imv_spreader_detection/
lane_detection/
lidar_camera_fusion/
lidar_correction_files/
lidar_loc_v2/
master/
new_truck_spreader_detection/
perception/
pncc_common_config/
pncc_port_related_config/
pncc_vehicle_related_config/
pointcloud/
prediction/
rslidar_sdk/
slave/
spreader_detection/
system-ros/
[Pipeline] echo
最终目录包含slave目录,进行合并操作
[Pipeline] sh
+ cp -r /root/workspace/params-submodule/jining-liangshan-submodule/JNLSG_JL_AT020/slave/params/slave/camera_driver /root/workspace/params-submodule/jining-liangshan-submodule/JNLSG_JL_AT020/slave/params/slave/recorder.toml /root/workspace/params-submodule/jining-liangshan-submodule/JNLSG_JL_AT020/slave/params/slave/system-ros /root/workspace/params-submodule/jining-liangshan-submodule/JNLSG_JL_AT020/slave/params/
[Pipeline] sh
+ mkdir -p params_module_orin_slave_JNLSG_JL_AT020_2026-08-16_17-02-19/
+ mv params/ params_module_orin_slave_JNLSG_JL_AT020_2026-08-16_17-02-19/
[Pipeline] sh
+ zip -rq params_module_orin_slave_JNLSG_JL_AT020_2026-08-16_17-02-19.zip params_module_orin_slave_JNLSG_JL_AT020_2026-08-16_17-02-19 ./version.json
[Pipeline] echo
/root/workspace/params-submodule/jining-liangshan-submodule/JNLSG_JL_AT020/slave/params_module_orin_slave_JNLSG_JL_AT020_2026-08-16_17-02-19.zip,/root/workspace/params-submodule/jining-liangshan-submodule/JNLSG_JL_AT020/slave/version.json
[Pipeline] sh
+ curl -X POST http://159.27.114.184:31018/ota-api/otaUploadFileAndVersion --form 'Content-Type="multipart/form-data"' --form 'file=@"/root/workspace/params-submodule/jining-liangshan-submodule/JNLSG_JL_AT020/slave/params_module_orin_slave_JNLSG_JL_AT020_2026-08-16_17-02-19.zip"' --form 'version=@"/root/workspace/params-submodule/jining-liangshan-submodule/JNLSG_JL_AT020/slave/version.json"'
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
0 260M 0 0 0 2304k 0 11.2M 0:00:23 --:--:-- 0:00:23 11.1M
3 260M 0 0 3 9088k 0 7708k 0:00:34 0:00:01 0:00:33 7701k
5 260M 0 0 5 13.2M 0 6153k 0:00:43 0:00:02 0:00:41 6150k
6 260M 0 0 6 18.1M 0 5847k 0:00:45 0:00:03 0:00:42 5845k
8 260M 0 0 8 22.4M 0 5454k 0:00:48 0:00:04 0:00:44 5453k
10 260M 0 0 10 26.5M 0 5238k 0:00:50 0:00:05 0:00:45 4986k
12 260M 0 0 12 31.6M 0 5224k 0:00:50 0:00:06 0:00:44 4640k
13 260M 0 0 13 36.1M 0 5142k 0:00:51 0:00:07 0:00:44 4697k
15 260M 0 0 15 40.0M 0 5009k 0:00:53 0:00:08 0:00:45 4477k
17 260M 0 0 17 44.9M 0 5005k 0:00:53 0:00:09 0:00:44 4625k
19 260M 0 0 19 49.8M 0 5011k 0:00:53 0:00:10 0:00:43 4775k
20 260M 0 0 20 53.6M 0 4906k 0:00:54 0:00:11 0:00:43 4513k
22 260M 0 0 22 58.3M 0 4898k 0:00:54 0:00:12 0:00:42 4547k
24 260M 0 0 24 63.0M 0 4895k 0:00:54 0:00:13 0:00:41 4710k
26 260M 0 0 26 68.0M 0 4908k 0:00:54 0:00:14 0:00:40 4727k
28 260M 0 0 28 73.0M 0 4929k 0:00:54 0:00:15 0:00:39 4762k
29 260M 0 0 29 76.9M 0 4865k 0:00:54 0:00:16 0:00:38 4772k
31 260M 0 0 31 81.7M 0 4863k 0:00:54 0:00:17 0:00:37 4778k
33 260M 0 0 33 85.9M 0 4837k 0:00:55 0:00:18 0:00:37 4682k
35 260M 0 0 35 91.1M 0 4860k 0:00:54 0:00:19 0:00:35 4726k
36 260M 0 0 36 95.1M 0 4818k 0:00:55 0:00:20 0:00:35 4486k
38 260M 0 0 38 99.3M 0 4799k 0:00:55 0:00:21 0:00:34 4586k
40 260M 0 0 40 104M 0 4823k 0:00:55 0:00:22 0:00:33 4681k
41 260M 0 0 41 108M 0 4791k 0:00:55 0:00:23 0:00:32 4622k
43 260M 0 0 43 112M 0 4774k 0:00:55 0:00:24 0:00:31 4442k
45 260M 0 0 45 117M 0 4792k 0:00:55 0:00:25 0:00:30 4683k
46 260M 0 0 46 122M 0 4770k 0:00:55 0:00:26 0:00:29 4647k
48 260M 0 0 48 126M 0 4755k 0:00:56 0:00:27 0:00:29 4456k
50 260M 0 0 50 131M 0 4770k 0:00:55 0:00:28 0:00:27 4672k
52 260M 0 0 52 136M 0 4771k 0:00:55 0:00:29 0:00:26 4760k
54 260M 0 0 54 141M 0 4790k 0:00:55 0:00:30 0:00:25 4784k
55 260M 0 0 55 145M 0 4764k 0:00:55 0:00:31 0:00:24 4731k
57 260M 0 0 57 149M 0 4756k 0:00:55 0:00:32 0:00:23 4758k
59 260M 0 0 59 154M 0 4769k 0:00:55 0:00:33 0:00:22 4766k
61 260M 0 0 61 159M 0 4772k 0:00:55 0:00:34 0:00:21 4779k
63 260M 0 0 63 164M 0 4791k 0:00:55 0:00:35 0:00:20 4797k
64 260M 0 0 64 168M 0 4778k 0:00:55 0:00:36 0:00:19 4867k
66 260M 0 0 66 173M 0 4768k 0:00:55 0:00:37 0:00:18 4845k
68 260M 0 0 68 178M 0 4780k 0:00:55 0:00:38 0:00:17 4854k
70 260M 0 0 70 182M 0 4768k 0:00:55 0:00:39 0:00:16 4736k
71 260M 0 0 71 186M 0 4756k 0:00:55 0:00:40 0:00:15 4512k
73 260M 0 0 73 191M 0 4767k 0:00:55 0:00:41 0:00:14 4685k
75 260M 0 0 75 196M 0 4772k 0:00:55 0:00:42 0:00:13 4799k
77 260M 0 0 77 201M 0 4784k 0:00:55 0:00:43 0:00:12 4816k
79 260M 0 0 79 205M 0 4771k 0:00:55 0:00:44 0:00:11 4795k
80 260M 0 0 80 210M 0 4760k 0:00:55 0:00:45 0:00:10 4794k
82 260M 0 0 82 213M 0 4741k 0:00:56 0:00:46 0:00:10 4527k
83 260M 0 0 83 216M 0 4706k 0:00:56 0:00:47 0:00:09 4149k
84 260M 0 0 84 219M 0 4657k 0:00:57 0:00:48 0:00:09 3549k
85 260M 0 0 85 222M 0 4624k 0:00:57 0:00:49 0:00:08 3322k
87 260M 0 0 87 226M 0 4617k 0:00:57 0:00:50 0:00:07 3319k
88 260M 0 0 88 230M 0 4613k 0:00:57 0:00:51 0:00:06 3434k
90 260M 0 0 90 235M 0 4616k 0:00:57 0:00:52 0:00:05 3770k
92 260M 0 0 92 239M 0 4615k 0:00:57 0:00:53 0:00:04 4218k
93 260M 0 0 93 243M 0 4604k 0:00:57 0:00:54 0:00:03 4410k
95 260M 0 0 95 248M 0 4613k 0:00:57 0:00:55 0:00:02 4575k
97 260M 0 0 97 253M 0 4611k 0:00:57 0:00:56 0:00:01 4589k
98 260M 0 0 98 256M 0 4583k 0:00:58 0:00:57 0:00:01 4232k
99 260M 0 0 99 259M 0 4571k 0:00:58 0:00:58 --:--:-- 4100k
100 260M 0 0 100 260M 0 4495k 0:00:59 0:00:59 --:--:-- 3322k
100 260M 0 0 100 260M 0 4420k 0:01:00 0:01:00 --:--:-- 2314k
100 260M 0 0 100 260M 0 4348k 0:01:01 0:01:01 --:--:-- 1416k
100 260M 0 0 100 260M 0 4278k 0:01:02 0:01:02 --:--:-- 832k
100 260M 0 0 100 260M 0 4210k 0:01:03 0:01:03 --:--:-- 73805
100 260M 0 0 100 260M 0 4145k 0:01:04 0:01:04 --:--:-- 0
100 260M 0 0 100 260M 0 4081k 0:01:05 0:01:05 --:--:-- 0
100 260M 0 0 100 260M 0 4020k 0:01:06 0:01:06 --:--:-- 0
100 260M 0 0 100 260M 0 3960k 0:01:07 0:01:07 --:--:-- 0
100 260M 0 0 100 260M 0 3902k 0:01:08 0:01:08 --:--:-- 0
100 260M 0 0 100 260M 0 3845k 0:01:09 0:01:09 --:--:-- 0
100 260M 0 0 100 260M 0 3790k 0:01:10 0:01:10 --:--:-- 0
100 260M 0 0 100 260M 0 3737k 0:01:11 0:01:11 --:--:-- 0
100 260M 0 0 100 260M 0 3685k 0:01:12 0:01:12 --:--:-- 0
100 260M 0 0 100 260M 0 3635k 0:01:13 0:01:13 --:--:-- 0
100 260M 0 0 100 260M 0 3586k 0:01:14 0:01:14 --:--:-- 0
100 260M 0 0 100 260M 0 3538k 0:01:15 0:01:15 --:--:-- 0
100 260M 0 0 100 260M 0 3492k 0:01:16 0:01:16 --:--:-- 0
100 260M 0 0 100 260M 0 3447k 0:01:17 0:01:17 --:--:-- 0
100 260M 0 0 100 260M 0 3403k 0:01:18 0:01:18 --:--:-- 0
100 260M 0 0 100 260M 0 3360k 0:01:19 0:01:19 --:--:-- 0
100 260M 0 0 100 260M 0 3318k 0:01:20 0:01:20 --:--:-- 0
100 260M 0 0 100 260M 0 3277k 0:01:21 0:01:21 --:--:-- 0
100 260M 0 0 100 260M 0 3237k 0:01:22 0:01:22 --:--:-- 0
100 260M 0 0 100 260M 0 3198k 0:01:23 0:01:23 --:--:-- 0
100 260M 0 0 100 260M 0 3160k 0:01:24 0:01:24 --:--:-- 0
100 260M 0 0 100 260M 0 3123k 0:01:25 0:01:25 --:--:-- 0
100 260M 0 0 100 260M 0 3087k 0:01:26 0:01:26 --:--:-- 0
100 260M 0 0 100 260M 0 3051k 0:01:27 0:01:27 --:--:-- 0
100 260M 0 0 100 260M 0 3017k 0:01:28 0:01:28 --:--:-- 0
100 260M 0 0 100 260M 0 2983k 0:01:29 0:01:29 --:--:-- 0
100 260M 0 0 100 260M 0 2950k 0:01:30 0:01:30 --:--:-- 0
100 260M 0 0 100 260M 0 2917k 0:01:31 0:01:31 --:--:-- 0
100 260M 0 0 100 260M 0 2886k 0:01:32 0:01:32 --:--:-- 0
100 260M 0 0 100 260M 0 2855k 0:01:33 0:01:33 --:--:-- 0
100 260M 0 0 100 260M 0 2824k 0:01:34 0:01:34 --:--:-- 0
100 260M 0 0 100 260M 0 2795k 0:01:35 0:01:35 --:--:-- 0
100 260M 0 0 100 260M 0 2766k 0:01:36 0:01:36 --:--:-- 0
100 260M 0 0 100 260M 0 2737k 0:01:37 0:01:37 --:--:-- 0
100 260M 0 0 100 260M 0 2709k 0:01:38 0:01:38 --:--:-- 0
100 260M 0 0 100 260M 0 2682k 0:01:39 0:01:39 --:--:-- 0
100 260M 0 0 100 260M 0 2655k 0:01:40 0:01:40 --:--:-- 0
100 260M 0 0 100 260M 0 2629k 0:01:41 0:01:41 --:--:-- 0
100 260M 0 0 100 260M 0 2603k 0:01:42 0:01:42 --:--:-- 0
100 260M 0 0 100 260M 0 2578k 0:01:43 0:01:43 --:--:-- 0
100 260M 0 0 100 260M 0 2553k 0:01:44 0:01:44 --:--:-- 0
100 260M 0 0 100 260M 0 2529k 0:01:45 0:01:45 --:--:-- 0
100 260M 0 0 100 260M 0 2505k 0:01:46 0:01:46 --:--:-- 0
100 260M 0 43 100 260M 0 2502k 0:01:46 0:01:46 --:--:-- 10
[Pipeline] echo
{"msg":"操作成功","code":200,"data":""}
[Pipeline] readJSON
[Pipeline] echo
[msg:操作成功, code:200, data:]
[Pipeline] echo
status:200
[Pipeline] echo
{"msg":"操作成功","code":200,"data":""}
[Pipeline] }
[Pipeline] // dir
[Pipeline] sh
+ rm -rf /root/workspace/params-submodule/jining-liangshan-submodule/JNLSG_JL_AT020/slave@tmp
[Pipeline] sh
+ rm -rf /root/workspace/params-submodule/jining-liangshan-submodule/JNLSG_JL_AT020/slave/params_submodule/
[Pipeline] fileExists
[Pipeline] readFile
[Pipeline] writeFile
[Pipeline] }
[Pipeline] // script
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Declarative: Post Actions)
[Pipeline] script
[Pipeline] {
[Pipeline] echo
always
[Pipeline] }
[Pipeline] // script
[Pipeline] script
[Pipeline] {
[Pipeline] echo
success
[Pipeline] publishHTML
[htmlpublisher] Archiving HTML reports...
[htmlpublisher] Archiving at BUILD level /root/workspace/params-submodule/jining-liangshan-submodule to /var/lib/jenkins/jobs/jining-liangshan-submodule/builds/115/htmlreports/update_20message
[Pipeline] wrap
[Pipeline] {
[Pipeline] script
[Pipeline] {
[Pipeline] echo
user: , telphone:
[Pipeline] }
[Pipeline] // script
[Pipeline] sh
+ curl -X POST 'https://oapi.dingtalk.com/robot/send?access_token=c4e318472bbd19d0449efb4060de213f730dc32b4bf44819381a8fa7adf61983' -H 'Content-Type: application/json' -d '{"msgtype": "markdown","markdown": {"title":"jenkins通知","text": "# 参数发布通知
### [济宁梁山港车辆参数]
---
- 状态:<font color=#01B468> 编译成功 </font>
- 执行人:wangshaojiang
- 更新车辆:
[JNLSG_JL_AT001master][JNLSG_JL_AT001slave][JNLSG_JL_AT002master][JNLSG_JL_AT002slave][JNLSG_JL_AT003master][JNLSG_JL_AT003slave][JNLSG_JL_AT004master][JNLSG_JL_AT004slave][JNLSG_JL_AT005master][JNLSG_JL_AT005slave][JNLSG_JL_AT006master][JNLSG_JL_AT006slave][JNLSG_JL_AT007master][JNLSG_JL_AT007slave][JNLSG_JL_AT008master][JNLSG_JL_AT008slave][JNLSG_JL_AT009master][JNLSG_JL_AT009slave][JNLSG_JL_AT010master][JNLSG_JL_AT010slave][JNLSG_JL_AT011master][JNLSG_JL_AT011slave][JNLSG_JL_AT012master][JNLSG_JL_AT012slave][JNLSG_JL_AT013master][JNLSG_JL_AT013slave][JNLSG_JL_AT014master][JNLSG_JL_AT014slave][JNLSG_JL_AT015master][JNLSG_JL_AT015slave][JNLSG_JL_AT016master][JNLSG_JL_AT016slave][JNLSG_JL_AT017master][JNLSG_JL_AT017slave][JNLSG_JL_AT018master][JNLSG_JL_AT018slave][JNLSG_JL_AT019master][JNLSG_JL_AT019slave][JNLSG_JL_AT020master][JNLSG_JL_AT020slave]
- 分支名:main
- 具体模块分支:[点此链接](http://jenkins.vehicle.senior.auto:8080/jenkins/job/jining-liangshan-submodule/115/update_20message/index.html)
---
> 请ota发布同学尽快发布验证,并在群里同步发布信息~@"},"at": {"atMobiles": [""],"isAtAll": "false"} }'
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
100 1453 100 27 100 1426 310 16390 --:--:-- --:--:-- --:--:-- 16701
[Pipeline] echo
{"errcode":0,"errmsg":"ok"}
[Pipeline] }
[Pipeline] // wrap
[Pipeline] }
[Pipeline] // script
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // timeout
[Pipeline] }
Lock released on resource [Label: built-in, Quantity: 1]
[Pipeline] // lock
[Pipeline] }
[Pipeline] // withEnv
[Pipeline] }
[Pipeline] // withEnv
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Finished: SUCCESS