From f8d62aba01def060da58477950a89872c5ae9fac Mon Sep 17 00:00:00 2001 From: Chris Maes Date: Mon, 19 May 2025 14:44:29 -0700 Subject: [PATCH 01/15] Fix LP termination status 9 errors in batch LP solves (#17) These errors were caused by all LPs in the batch sharing the same concurrent halt variable. This meant that the first LP to solve, forced all other LPs to halt. So it was possible that both PDLP and Dual Simplex solves returned with a ConcurrentLimit termination status. This should never happen normally. For now, we fix this by disabling the Concurrent method in batch mode. We set the method to PDLP, if Concurrent was chosen, and tell the user to choose PDLP or Dual Simplex to avoid this warning in the future. Authors: - Chris Maes (https://github.com/chris-maes) Approvers: - Hugo Linsenmaier (https://github.com/hlinsen) URL: https://github.com/NVIDIA/cuopt/pull/17 --- cpp/src/linear_programming/utilities/cython_solve.cu | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/cpp/src/linear_programming/utilities/cython_solve.cu b/cpp/src/linear_programming/utilities/cython_solve.cu index 4a2941c84..f176db781 100644 --- a/cpp/src/linear_programming/utilities/cython_solve.cu +++ b/cpp/src/linear_programming/utilities/cython_solve.cu @@ -274,6 +274,14 @@ std::pair>, double> call_batch_solve( // Limit parallelism as too much stream overlap gets too slow const int max_thread = compute_max_thread(data_models); + if (solver_settings->get_parameter(CUOPT_METHOD) == CUOPT_METHOD_CONCURRENT) { + CUOPT_LOG_INFO("Concurrent mode not supported for batch solve. Using PDLP instead. "); + CUOPT_LOG_INFO( + "Set the CUOPT_METHOD parameter to CUOPT_METHOD_PDLP or CUOPT_METHOD_DUAL_SIMPLEX to avoid " + "this warning."); + solver_settings->set_parameter(CUOPT_METHOD, CUOPT_METHOD_PDLP); + } + #pragma omp parallel for num_threads(max_thread) for (std::size_t i = 0; i < size; ++i) list[i] = std::move(call_solve(data_models[i], solver_settings)); From 036dde80f25d09605886790091e77dcdcac9a09b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Akif=20=C3=87=C3=96RD=C3=9CK?= Date: Tue, 20 May 2025 16:19:39 +0200 Subject: [PATCH 02/15] Fix bugs on empty problem and pre_process assignment (#18) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit There was a bug in pre_process_assignment function. During initial solve() we are doing preprocess and then trivial_presolve. That means, the free var replacements are added first then the variable eliminations are done. For that reason the user solution preprocessing should follow the same order. The bug of set_solution is called multiple times in the tests if fixed: we should to pop the back solution after solution is being set, otherwise it will always be set. The bug of he assignment resize is fixed: it should be called before the gather, if not the resize will enlarge it and it will have junk values, causing mismatch in objective costs and sometimes infeasible solutions. This also changes a slight issue where we assign 2x for y and x for z when x is positive, for large initial values this might cause numerical issues, that's why we now assign x for y and 0 for z. This PR also fixes the bug of empty solutions not being handled correctly after a presolve (previously we handled it only for trivial presolve). Authors: - Akif ÇÖRDÜK (https://github.com/akifcorduk) Approvers: - Hugo Linsenmaier (https://github.com/hlinsen) URL: https://github.com/NVIDIA/cuopt/pull/18 --- cpp/include/cuopt/logger.hpp | 2 + cpp/src/mip/diversity/diversity_manager.cu | 34 +++++----- cpp/src/mip/diversity/population.cu | 44 ++++++++----- cpp/src/mip/presolve/trivial_presolve.cuh | 5 +- cpp/src/mip/problem/problem.cu | 73 +++++++++++----------- cpp/src/mip/solver.cu | 8 ++- cpp/tests/mip/incumbent_callback_test.cu | 13 ++-- cpp/tests/mip/server_test.cu | 2 +- 8 files changed, 103 insertions(+), 78 deletions(-) diff --git a/cpp/include/cuopt/logger.hpp b/cpp/include/cuopt/logger.hpp index ed0877d4e..0d1cc353c 100644 --- a/cpp/include/cuopt/logger.hpp +++ b/cpp/include/cuopt/logger.hpp @@ -74,6 +74,7 @@ inline rapids_logger::logger& default_logger() rapids_logger::logger logger_{"CUOPT", {default_sink()}}; logger_.set_pattern(default_pattern()); logger_.set_level(default_level()); + logger_.flush_on(rapids_logger::level_enum::info); return logger_; }(); @@ -91,6 +92,7 @@ inline void reset_default_logger() default_logger().sinks().push_back(default_sink()); default_logger().set_pattern(default_pattern()); default_logger().set_level(default_level()); + default_logger().flush_on(rapids_logger::level_enum::info); } } // namespace cuopt diff --git a/cpp/src/mip/diversity/diversity_manager.cu b/cpp/src/mip/diversity/diversity_manager.cu index 72f6c2f21..153175fc0 100644 --- a/cpp/src/mip/diversity/diversity_manager.cu +++ b/cpp/src/mip/diversity/diversity_manager.cu @@ -147,16 +147,12 @@ void diversity_manager_t::add_user_given_solution( if (context.settings.has_initial_solution()) { solution_t sol(*problem_ptr); auto& init_sol = context.settings.get_initial_solution(); - if (sol.assignment.size() <= init_sol.size()) { - thrust::for_each( - sol.handle_ptr->get_thrust_policy(), - thrust::make_counting_iterator(0), - thrust::make_counting_iterator((int)sol.assignment.size()), - [assgn = make_span(sol.assignment), - init_sol = make_span(init_sol), - var_map = make_span(problem_ptr->presolve_data.variable_mapping)] __device__(i_t i) { - assgn[i] = init_sol[var_map[i]]; - }); + rmm::device_uvector init_sol_assignment(init_sol, sol.handle_ptr->get_stream()); + if (problem_ptr->pre_process_assignment(init_sol_assignment)) { + raft::copy(sol.assignment.data(), + init_sol_assignment.data(), + init_sol_assignment.size(), + sol.handle_ptr->get_stream()); bool is_feasible = sol.compute_feasibility(); cuopt_func_call(sol.test_variable_bounds(true)); CUOPT_LOG_INFO("Adding initial solution success! feas %d objective %f excess %f", @@ -168,8 +164,8 @@ void diversity_manager_t::add_user_given_solution( } else { CUOPT_LOG_ERROR( "Error cannot add the provided initial solution! \ - Assignment size %lu \ - initial solution size %lu", + Assignment size %lu \ + initial solution size %lu", sol.assignment.size(), init_sol.size()); } @@ -250,14 +246,16 @@ bool diversity_manager_t::run_presolve(f_t time_limit) if (termination_criterion_t::NO_UPDATE != term_crit) { ls.constraint_prop.bounds_update.set_updated_bounds(*problem_ptr); trivial_presolve(*problem_ptr); + if (!problem_ptr->empty) { check_bounds_sanity(*problem_ptr); } + } + if (!problem_ptr->empty) { + // do the resizing no-matter what, bounds presolve might not change the bounds but initial + // trivial presolve might have + ls.constraint_prop.bounds_update.resize(*problem_ptr); + ls.constraint_prop.conditional_bounds_update.update_constraint_bounds( + *problem_ptr, ls.constraint_prop.bounds_update); check_bounds_sanity(*problem_ptr); } - // do the resizing no-matter what, bounds presolve might not change the bounds but initial trivial - // presolve might have - ls.constraint_prop.bounds_update.resize(*problem_ptr); - ls.constraint_prop.conditional_bounds_update.update_constraint_bounds( - *problem_ptr, ls.constraint_prop.bounds_update); - check_bounds_sanity(*problem_ptr); stats.presolve_time = presolve_timer.elapsed_time(); return true; } diff --git a/cpp/src/mip/diversity/population.cu b/cpp/src/mip/diversity/population.cu index 23b1f745e..0780e77ce 100644 --- a/cpp/src/mip/diversity/population.cu +++ b/cpp/src/mip/diversity/population.cu @@ -163,7 +163,6 @@ void population_t::run_solution_callbacks(solution_t& sol) ? sol.get_user_objective() > best_feasible_objective : sol.get_user_objective() < best_feasible_objective; auto user_callbacks = context.settings.get_mip_callbacks(); - if (better_solution_found && sol.get_feasible()) { CUOPT_LOG_DEBUG("Population: Found new best solution %g", sol.get_user_objective()); best_feasible_objective = sol.get_user_objective(); @@ -174,19 +173,29 @@ void population_t::run_solution_callbacks(solution_t& sol) for (auto callback : user_callbacks) { if (callback->get_type() == internals::base_solution_callback_type::GET_SOLUTION) { auto get_sol_callback = static_cast(callback); - rmm::device_uvector incumbent_assignment(sol.assignment, sol.handle_ptr->get_stream()); - problem_ptr->post_process_assignment(incumbent_assignment); - rmm::device_uvector dummy(0, sol.handle_ptr->get_stream()); + solution_t temp_sol(sol); + problem_ptr->post_process_assignment(temp_sol.assignment); + rmm::device_uvector dummy(0, temp_sol.handle_ptr->get_stream()); if (context.settings.mip_scaling) { - context.scaling.unscale_solutions(incumbent_assignment, dummy); + context.scaling.unscale_solutions(temp_sol.assignment, dummy); + // Need to get unscaled problem as well + problem_t n_problem(*sol.problem_ptr->original_problem_ptr); + temp_sol.problem_ptr = &n_problem; + temp_sol.resize_to_original_problem(); + temp_sol.compute_feasibility(); + if (!temp_sol.get_feasible()) { + CUOPT_LOG_DEBUG("Discard infeasible after unscaling"); + return; + } } - rmm::device_uvector user_objective_vec(1, sol.handle_ptr->get_stream()); + rmm::device_uvector user_objective_vec(1, temp_sol.handle_ptr->get_stream()); - f_t user_objective = sol.problem_ptr->get_user_obj_from_solver_obj(sol.get_objective()); - user_objective_vec.set_element_async(0, user_objective, sol.handle_ptr->get_stream()); + f_t user_objective = + temp_sol.problem_ptr->get_user_obj_from_solver_obj(temp_sol.get_objective()); + user_objective_vec.set_element_async(0, user_objective, temp_sol.handle_ptr->get_stream()); CUOPT_LOG_DEBUG("Returning incumbent solution with objective %g", user_objective); - get_sol_callback->get_solution(incumbent_assignment.data(), user_objective_vec.data()); + get_sol_callback->get_solution(temp_sol.assignment.data(), user_objective_vec.data()); } } } @@ -199,10 +208,15 @@ void population_t::run_solution_callbacks(solution_t& sol) rmm::device_uvector dummy(0, sol.handle_ptr->get_stream()); solution_t outside_sol(sol); rmm::device_scalar d_outside_sol_objective(sol.handle_ptr->get_stream()); + auto inf = std::numeric_limits::infinity(); + d_outside_sol_objective.set_value_async(inf, sol.handle_ptr->get_stream()); + sol.handle_ptr->sync_stream(); set_sol_callback->set_solution(incumbent_assignment.data(), d_outside_sol_objective.data()); f_t outside_sol_objective = d_outside_sol_objective.value(sol.handle_ptr->get_stream()); - + // The callback might be called without setting any valid solution or objective which triggers + // asserts + if (outside_sol_objective == inf) { return; } CUOPT_LOG_DEBUG("Injecting external solution with objective %g", outside_sol_objective); if (context.settings.mip_scaling) { @@ -210,21 +224,19 @@ void population_t::run_solution_callbacks(solution_t& sol) } bool is_valid = problem_ptr->pre_process_assignment(incumbent_assignment); if (!is_valid) { return; } - cuopt_assert(outside_sol.assignment.size() == incumbent_assignment.size(), "Incumbent assignment size mismatch"); raft::copy(outside_sol.assignment.data(), incumbent_assignment.data(), incumbent_assignment.size(), sol.handle_ptr->get_stream()); - outside_sol.compute_feasibility(); - CUOPT_LOG_DEBUG("Injected solution feasibility = %d", outside_sol.get_feasible()); + CUOPT_LOG_DEBUG("Injected solution feasibility = %d objective = %g", + outside_sol.get_feasible(), + outside_sol.get_user_objective()); - cuopt_assert(std::abs(outside_sol.problem_ptr->get_user_obj_from_solver_obj( - outside_sol.get_objective()) - - outside_sol_objective) <= 1e-6, + cuopt_assert(std::abs(outside_sol.get_user_objective() - outside_sol_objective) <= 1e-6, "External solution objective mismatch"); auto h_outside_sol = outside_sol.get_host_assignment(); add_external_solution(h_outside_sol, outside_sol.get_objective()); diff --git a/cpp/src/mip/presolve/trivial_presolve.cuh b/cpp/src/mip/presolve/trivial_presolve.cuh index 495a191fa..d7cfa6dc1 100644 --- a/cpp/src/mip/presolve/trivial_presolve.cuh +++ b/cpp/src/mip/presolve/trivial_presolve.cuh @@ -277,8 +277,9 @@ void update_from_csr(problem_t& pb) pb.n_constraints = updated_n_cnst; pb.n_variables = updated_n_vars; - CUOPT_LOG_INFO( - "After trivial presolve updated %d constraints %d variables", updated_n_cnst, updated_n_vars); + CUOPT_LOG_INFO("After trivial presolve updated number of %d constraints %d variables", + updated_n_cnst, + updated_n_vars); // check successive cnst in coo increases by atmost 1 // update csr offset pb.offsets.resize(pb.n_constraints + 1, handle_ptr->get_stream()); diff --git a/cpp/src/mip/problem/problem.cu b/cpp/src/mip/problem/problem.cu index 174d6af58..5826fee48 100644 --- a/cpp/src/mip/problem/problem.cu +++ b/cpp/src/mip/problem/problem.cu @@ -593,42 +593,42 @@ bool problem_t::pre_process_assignment(rmm::device_uvector& assig return false; } - // Map assignment to internal solution using variable mapping - rmm::device_uvector internal_assignment(presolve_data.variable_mapping.size(), - handle_ptr->get_stream()); - thrust::gather(handle_ptr->get_thrust_policy(), - presolve_data.variable_mapping.begin(), - presolve_data.variable_mapping.end(), - assignment.begin(), - internal_assignment.begin()); - + // create a temp assignment with the var size after bounds standardization (free vars added) + rmm::device_uvector temp_assignment(presolve_data.additional_var_used.size(), + handle_ptr->get_stream()); + // copy the assignment to the first part(the original variable count) of the temp_assignment + raft::copy( + temp_assignment.data(), assignment.data(), assignment.size(), handle_ptr->get_stream()); auto d_additional_var_used = cuopt::device_copy(presolve_data.additional_var_used, handle_ptr->get_stream()); auto d_additional_var_id_per_var = cuopt::device_copy(presolve_data.additional_var_id_per_var, handle_ptr->get_stream()); - thrust::for_each( - handle_ptr->get_thrust_policy(), - thrust::make_counting_iterator(0), - thrust::make_counting_iterator(presolve_data.variable_mapping.size()), - [additional_var_used = d_additional_var_used.data(), - additional_var_id_per_var = d_additional_var_id_per_var.data(), - assgn = internal_assignment.data()] __device__(auto idx) { - if (additional_var_used[idx]) { - cuopt_assert(additional_var_id_per_var[idx] != -1, "additional_var_id_per_var is not set"); - // We have two non-negative variables y and z that simulate a free variable x. If the value - // of x is negative, we can set z to be something higher than y. If the value of x is - // positive we can set y greater than z - assgn[additional_var_id_per_var[idx]] = assgn[idx] < 0 ? -assgn[idx] : assgn[idx]; - assgn[idx] += assgn[additional_var_id_per_var[idx]]; - } - }); - assignment.resize(internal_assignment.size(), handle_ptr->get_stream()); + // handle free var logic by substituting the free vars and their corresponding vars + thrust::for_each(handle_ptr->get_thrust_policy(), + thrust::make_counting_iterator(0), + thrust::make_counting_iterator(original_problem_ptr->get_n_variables()), + [additional_var_used = d_additional_var_used.data(), + additional_var_id_per_var = d_additional_var_id_per_var.data(), + assgn = temp_assignment.data()] __device__(auto idx) { + if (additional_var_used[idx]) { + cuopt_assert(additional_var_id_per_var[idx] != -1, + "additional_var_id_per_var is not set"); + // We have two non-negative variables y and z that simulate a free variable + // x. If the value of x is negative, we can set z to be something higher than + // y. If the value of x is positive we can set y greater than z + assgn[additional_var_id_per_var[idx]] = (assgn[idx] < 0 ? -assgn[idx] : 0.); + assgn[idx] += assgn[additional_var_id_per_var[idx]]; + } + }); + assignment.resize(n_variables, handle_ptr->get_stream()); assignment.shrink_to_fit(handle_ptr->get_stream()); - raft::copy(assignment.data(), - internal_assignment.data(), - internal_assignment.size(), - handle_ptr->get_stream()); + cuopt_assert(presolve_data.variable_mapping.size() == n_variables, "size mismatch"); + thrust::gather(handle_ptr->get_thrust_policy(), + presolve_data.variable_mapping.begin(), + presolve_data.variable_mapping.end(), + temp_assignment.begin(), + assignment.begin()); handle_ptr->sync_stream(); return true; } @@ -643,11 +643,14 @@ void problem_t::post_process_assignment(rmm::device_uvector& curr auto assgn = make_span(current_assignment); auto fixed_assgn = make_span(presolve_data.fixed_var_assignment); auto var_map = make_span(presolve_data.variable_mapping); - thrust::for_each( - handle_ptr->get_thrust_policy(), - thrust::make_counting_iterator(0), - thrust::make_counting_iterator(current_assignment.size()), - [fixed_assgn, var_map, assgn] __device__(auto idx) { fixed_assgn[var_map[idx]] = assgn[idx]; }); + if (current_assignment.size() > 0) { + thrust::for_each(handle_ptr->get_thrust_policy(), + thrust::make_counting_iterator(0), + thrust::make_counting_iterator(current_assignment.size()), + [fixed_assgn, var_map, assgn] __device__(auto idx) { + fixed_assgn[var_map[idx]] = assgn[idx]; + }); + } expand_device_copy( current_assignment, presolve_data.fixed_var_assignment, handle_ptr->get_stream()); auto h_assignment = cuopt::host_copy(current_assignment, handle_ptr->get_stream()); diff --git a/cpp/src/mip/solver.cu b/cpp/src/mip/solver.cu index 4aded0a08..24cdc7d1d 100644 --- a/cpp/src/mip/solver.cu +++ b/cpp/src/mip/solver.cu @@ -96,7 +96,7 @@ solution_t mip_solver_t::run_solver() "preprocess_problem should be called before running the solver"); if (context.problem_ptr->empty) { - CUOPT_LOG_INFO("Problem fully reduced at presolve"); + CUOPT_LOG_INFO("Problem fully reduced at trivial presolve"); solution_t sol(*context.problem_ptr); context.problem_ptr->post_process_solution(sol); return sol; @@ -112,6 +112,12 @@ solution_t mip_solver_t::run_solver() context.problem_ptr->post_process_solution(sol); return sol; } + if (context.problem_ptr->empty) { + CUOPT_LOG_INFO("Problem fully reduced at presolve"); + solution_t sol(*context.problem_ptr); + context.problem_ptr->post_process_solution(sol); + return sol; + } namespace dual_simplex = cuopt::linear_programming::dual_simplex; std::future branch_and_bound_status_future; diff --git a/cpp/tests/mip/incumbent_callback_test.cu b/cpp/tests/mip/incumbent_callback_test.cu index 35481256b..f45efca72 100644 --- a/cpp/tests/mip/incumbent_callback_test.cu +++ b/cpp/tests/mip/incumbent_callback_test.cu @@ -52,14 +52,16 @@ class test_set_solution_callback_t : public cuopt::internals::set_solution_callb // This will check that the we are able to recompute our own solution void set_solution(void* data, void* cost) override { + n_calls++; rmm::cuda_stream_view stream{}; - auto assignment = static_cast(data); - auto cost_ptr = static_cast(cost); + auto assignment = static_cast(data); + auto cost_ptr = static_cast(cost); + if (solutions.empty()) { return; } + auto const& [last_assignment, last_cost] = solutions.back(); raft::copy(assignment, last_assignment.data(), last_assignment.size(), stream); raft::copy(cost_ptr, &last_cost, 1, stream); stream.synchronize(); - n_calls++; } std::vector, double>>& solutions; int n_calls; @@ -74,6 +76,7 @@ class test_get_solution_callback_t : public cuopt::internals::get_solution_callb } void get_solution(void* data, void* cost) override { + n_calls++; rmm::cuda_stream_view stream{}; rmm::device_uvector assignment(n_variables, stream); raft::copy(assignment.data(), static_cast(data), n_variables, stream); @@ -81,7 +84,6 @@ class test_get_solution_callback_t : public cuopt::internals::get_solution_callb raft::copy(&h_cost, static_cast(cost), 1, stream); stream.synchronize(); solutions.push_back(std::make_pair(std::move(assignment), h_cost)); - n_calls++; } std::vector, double>>& solutions; int n_calls; @@ -131,7 +133,8 @@ void test_incumbent_callback(std::string test_instance) TEST(mip_solve, incumbent_callback_test) { - std::vector test_instances = {"mip/50v-10.mps", "mip/neos5.mps", "mip/swath1.mps"}; + std::vector test_instances = { + "mip/50v-10.mps", "mip/neos5-free-bound.mps", "mip/swath1.mps"}; for (const auto& test_instance : test_instances) { test_incumbent_callback(test_instance); } diff --git a/cpp/tests/mip/server_test.cu b/cpp/tests/mip/server_test.cu index ce3499e3d..cf8268b9f 100644 --- a/cpp/tests/mip/server_test.cu +++ b/cpp/tests/mip/server_test.cu @@ -15,7 +15,7 @@ * limitations under the License. */ -#include "../utilities/pdlp_test_utilities.cuh" +#include "../linear_programming/utilities/pdlp_test_utilities.cuh" #include "mip_utils.cuh" #include From b3a493a4e26c24c9b8fa922acf9ec5fc5020dc42 Mon Sep 17 00:00:00 2001 From: Rajesh Gandham Date: Tue, 20 May 2025 10:21:05 -0400 Subject: [PATCH 03/15] Remove unused and broken build flags (#15) This PR removes the following build flags: 1. cpp-mgtests: This is unused 2. no-fetch-rapids: This is broken in the latest version of rapids, this needs to be fixed to improve build times 3. skip_l1_tests: This is unused 4. d: The development build flag is unused Authors: - Rajesh Gandham (https://github.com/rg20) Approvers: - Trevor McKay (https://github.com/tmckayus) URL: https://github.com/NVIDIA/cuopt/pull/15 --- build.sh | 19 ++----------------- cpp/CMakeLists.txt | 5 ----- 2 files changed, 2 insertions(+), 22 deletions(-) diff --git a/build.sh b/build.sh index da9a02a9a..9165dbfbe 100755 --- a/build.sh +++ b/build.sh @@ -27,7 +27,7 @@ REPODIR=$(cd $(dirname $0); pwd) LIBCUOPT_BUILD_DIR=${LIBCUOPT_BUILD_DIR:=${REPODIR}/cpp/build} LIBMPS_PARSER_BUILD_DIR=${LIBMPS_PARSER_BUILD_DIR:=${REPODIR}/cpp/libmps_parser/build} -VALIDARGS="clean libcuopt libmps_parser cuopt_mps_parser cuopt cuopt_server cuopt_sh_client docs -a -b -d -g -v -l= --verbose-pdlp [--cmake-args=\\\"\\\"] [--cache-tool=] -n --no-fetch-rapids --skip_l1_tests --allgpuarch --ci-only-arch --show_depr_warn -h --help" +VALIDARGS="clean libcuopt libmps_parser cuopt_mps_parser cuopt cuopt_server cuopt_sh_client docs -a -b -g -v -l= --verbose-pdlp [--cmake-args=\\\"\\\"] [--cache-tool=] -n --allgpuarch --ci-only-arch --show_depr_warn -h --help" HELP="$0 [ ...] [ ...] where is: clean - remove all existing build artifacts and configuration (start over) @@ -43,15 +43,12 @@ HELP="$0 [ ...] [ ...] -g - build for debug -a - Enable assertion (by default in debug mode) -b - Build with benchmark settings - -d - Build with under development, non-release modules -n - no install step - --no-fetch-rapids - don't fetch rapids dependencies -l= - log level. Options are: TRACE | DEBUG | INFO | WARN | ERROR | CRITICAL | OFF. Default=INFO --verbose-pdlp - verbose mode for pdlp solver --cache-tool= - pass the build cache tool (eg: ccache, sccache, distcc) that will be used to speedup the build process. --cmake-args=\\\"\\\" - pass arbitrary list of CMake configuration options (escape all quotes in argument) - --skip_l1_tests - Do not build level 1 regression tests --allgpuarch - build for all supported GPU architectures --ci-only-arch - build for volta and ampere only --show_depr_warn - show cmake deprecation warnings @@ -78,7 +75,6 @@ DEFINE_ASSERT=False DEFINE_PDLP_VERBOSE_MODE=False INSTALL_TARGET=install BUILD_DISABLE_DEPRECATION_WARNING=ON -BUILD_L1_TESTS=ON BUILD_ALL_GPU_ARCH=0 BUILD_CI_ONLY=0 CACHE_ARGS="" @@ -203,21 +199,12 @@ fi if hasArg -b; then DEFINE_BENCHMARK=true fi -if hasArg -d; then - DEFINE_DEVELOPMENT=true -fi if hasArg --verbose-pdlp; then DEFINE_PDLP_VERBOSE_MODE=true fi if hasArg -n; then INSTALL_TARGET="" fi -if hasArg --no-fetch-rapids; then - FETCH_RAPIDS=OFF -fi -if hasArg --skip_l1_tests; then - BUILD_L1_TESTS=OFF -fi if hasArg --allgpuarch; then BUILD_ALL_GPU_ARCH=1 fi @@ -300,15 +287,13 @@ if buildAll || hasArg libcuopt; then mkdir -p ${LIBCUOPT_BUILD_DIR} cd ${LIBCUOPT_BUILD_DIR} cmake -DDEFINE_ASSERT=${DEFINE_ASSERT} \ - -DDEFINE_BENCHMARK=${DEFINE_BENCHMARK} \ - -DDEFINE_DEVELOPMENT=${DEFINE_DEVELOPMENT} \ + -DDEFINE_BENCHMARK=${DEFINE_BENCHMARK} \ -DDEFINE_PDLP_VERBOSE_MODE=${DEFINE_PDLP_VERBOSE_MODE} \ -DLIBCUOPT_LOGGING_LEVEL=${LOGGING_ACTIVE_LEVEL} \ -DCMAKE_INSTALL_PREFIX=${INSTALL_PREFIX} \ -DCMAKE_CUDA_ARCHITECTURES=${CUOPT_CMAKE_CUDA_ARCHITECTURES} \ -DDISABLE_DEPRECATION_WARNING=${BUILD_DISABLE_DEPRECATION_WARNING} \ -DCMAKE_BUILD_TYPE=${BUILD_TYPE} \ - -DBUILD_L1_TESTS=${BUILD_L1_TESTS} \ -DFETCH_RAPIDS=${FETCH_RAPIDS} \ ${EXTRA_CMAKE_ARGS} \ ${REPODIR}/cpp diff --git a/cpp/CMakeLists.txt b/cpp/CMakeLists.txt index 5ae7dc1aa..0a615aea7 100644 --- a/cpp/CMakeLists.txt +++ b/cpp/CMakeLists.txt @@ -86,11 +86,6 @@ if(DEFINE_BENCHMARK) add_definitions(-DBENCHMARK) endif(DEFINE_BENCHMARK) -# keep development flag in case we have experimental features -if(DEFINE_DEVELOPMENT) - add_definitions(-DDEVELOPMENT) -endif(DEFINE_DEVELOPMENT) - if(DEFINE_PDLP_VERBOSE_MODE) add_definitions(-DPDLP_VERBOSE_MODE) endif(DEFINE_PDLP_VERBOSE_MODE) From 11526870996a15554da11b51114bc61bb076db38 Mon Sep 17 00:00:00 2001 From: Chris Maes Date: Tue, 20 May 2025 10:43:16 -0700 Subject: [PATCH 04/15] Fix objective value when LP is unbounded (#19) This fixes a bug where the objective was not correctly set when an LP was determined to be dual infeasible / unbounded. Authors: - Chris Maes (https://github.com/chris-maes) Approvers: - Hugo Linsenmaier (https://github.com/hlinsen) - Rajesh Gandham (https://github.com/rg20) - Nicolas Blin (https://github.com/Kh4ster) URL: https://github.com/NVIDIA/cuopt/pull/19 --- cpp/src/dual_simplex/solve.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/cpp/src/dual_simplex/solve.cpp b/cpp/src/dual_simplex/solve.cpp index b422be873..05c1512fa 100644 --- a/cpp/src/dual_simplex/solve.cpp +++ b/cpp/src/dual_simplex/solve.cpp @@ -218,6 +218,16 @@ lp_status_t solve_linear_program_advanced(const lp_problem_t& original original_solution.iterations = iter; } else { // Dual infeasible -> Primal unbounded + settings.log.printf("Dual infeasible\n"); + original_solution.objective = -inf; + if (lp.obj_scale == 1.0) { + // Objective for unbounded minimization is -inf + original_solution.user_objective = -inf; + } else { + // Objective for unbounded maximization is inf + original_solution.user_objective = inf; + } + original_solution.iterations = iter; return lp_status_t::UNBOUNDED; } return lp_status; From ae9a068372af1ac65a90620552e719931488b687 Mon Sep 17 00:00:00 2001 From: Chris Maes Date: Wed, 21 May 2025 06:09:34 -0700 Subject: [PATCH 05/15] Fix bug in crossover where numerical was returned instead of time limit (#23) Also adds the --relaxation flag to cuopt_cli to solve the LP relaxation of a MIP Authors: - Chris Maes (https://github.com/chris-maes) Approvers: - Nicolas Blin (https://github.com/Kh4ster) URL: https://github.com/NVIDIA/cuopt/pull/23 --- cpp/cuopt_cli.cpp | 11 +++++++++-- cpp/src/dual_simplex/crossover.cpp | 20 ++++++++++++++++++-- cpp/src/linear_programming/solve.cu | 1 + 3 files changed, 28 insertions(+), 4 deletions(-) diff --git a/cpp/cuopt_cli.cpp b/cpp/cuopt_cli.cpp index afb59d58b..a81804a70 100644 --- a/cpp/cuopt_cli.cpp +++ b/cpp/cuopt_cli.cpp @@ -81,6 +81,7 @@ inline auto make_async() { return std::make_shared& settings_strings) { const raft::handle_t handle_{}; @@ -131,7 +132,7 @@ int run_single_file(const std::string& file_path, initial_solution_file, mps_data_model.get_variable_names()); try { - if (is_mip) { + if (is_mip && !solve_relaxation) { auto& mip_settings = settings.get_mip_settings(); if (initial_solution.size() > 0) { mip_settings.set_initial_solution(initial_solution.data(), initial_solution.size()); @@ -191,6 +192,11 @@ int main(int argc, char* argv[]) .help("path to the initial solution .sol file") .default_value(""); + program.add_argument("--relaxation") + .help("solve the LP relaxation of the MIP") + .default_value(false) + .implicit_value(true); + std::map arg_name_to_param_name; { // Add all solver settings as arguments @@ -257,8 +263,9 @@ int main(int argc, char* argv[]) std::string file_name = program.get("filename"); const auto initial_solution_file = program.get("--initial-solution"); + const auto solve_relaxation = program.get("--relaxation"); auto memory_resource = make_async(); rmm::mr::set_current_device_resource(memory_resource.get()); - return run_single_file(file_name, initial_solution_file, settings_strings); + return run_single_file(file_name, initial_solution_file, solve_relaxation, settings_strings); } diff --git a/cpp/src/dual_simplex/crossover.cpp b/cpp/src/dual_simplex/crossover.cpp index 37a67fc38..957b8d2ca 100644 --- a/cpp/src/dual_simplex/crossover.cpp +++ b/cpp/src/dual_simplex/crossover.cpp @@ -1217,6 +1217,15 @@ crossover_status_t crossover(const lp_problem_t& lp, std::vector edge_norms; dual::status_t status = dual_phase2(2, 0, start_time, lp, settings, vstatus, solution, dual_iter, edge_norms); + if (toc(start_time) > settings.time_limit) { + settings.log.printf("Time limit exceeded\n"); + return crossover_status_t::TIME_LIMIT; + } + if (settings.concurrent_halt != nullptr && + settings.concurrent_halt->load(std::memory_order_acquire) == 1) { + settings.log.printf("Concurrent halt\n"); + return crossover_status_t::CONCURRENT_LIMIT; + } primal_infeas = primal_infeasibility(lp, settings, vstatus, solution.x); dual_infeas = dual_infeasibility(lp, settings, vstatus, solution.z); primal_res = primal_residual(lp, solution); @@ -1337,6 +1346,15 @@ crossover_status_t crossover(const lp_problem_t& lp, std::vector edge_norms; dual::status_t status = dual_phase2( 2, iter == 0 ? 1 : 0, start_time, lp, settings, vstatus, solution, iter, edge_norms); + if (toc(start_time) > settings.time_limit) { + settings.log.printf("Time limit exceeded\n"); + return crossover_status_t::TIME_LIMIT; + } + if (settings.concurrent_halt != nullptr && + settings.concurrent_halt->load(std::memory_order_acquire) == 1) { + settings.log.printf("Concurrent halt\n"); + return crossover_status_t::CONCURRENT_LIMIT; + } solution.iterations += iter; primal_infeas = primal_infeasibility(lp, settings, vstatus, solution.x); dual_infeas = dual_infeasibility(lp, settings, vstatus, solution.z); @@ -1345,7 +1363,6 @@ crossover_status_t crossover(const lp_problem_t& lp, if (status != dual::status_t::OPTIMAL) { print_crossover_info(lp, settings, vstatus, solution, "Dual phase 2 complete"); } - primal_feasible = primal_infeas <= primal_tol && primal_res <= primal_tol; dual_feasible = dual_infeas <= dual_tol && dual_res <= dual_tol; } else { @@ -1355,7 +1372,6 @@ crossover_status_t crossover(const lp_problem_t& lp, settings.log.printf("Crossover time %.2f seconds\n", toc(crossover_start)); settings.log.printf("Total time %.2f seconds\n", toc(start_time)); - settings.log.printf("\n"); crossover_status_t status = crossover_status_t::NUMERICAL_ISSUES; if (dual_feasible) { status = crossover_status_t::DUAL_FEASIBLE; } diff --git a/cpp/src/linear_programming/solve.cu b/cpp/src/linear_programming/solve.cu index 8cca93915..0ab3d848d 100644 --- a/cpp/src/linear_programming/solve.cu +++ b/cpp/src/linear_programming/solve.cu @@ -396,6 +396,7 @@ optimization_problem_solution_t run_pdlp(detail::problem_t& info, termination_status); sol.copy_from(problem.handle_ptr, sol_crossover); + CUOPT_LOG_INFO("Crossover status %s", sol.get_termination_status_string().c_str()); } if (crossover_info == 0 && settings.concurrent_halt != nullptr) { // We finished. Tell dual simplex to stop if it is still running. From 0a04b79e23a34747546d78a67f6475845f954ceb Mon Sep 17 00:00:00 2001 From: Rajesh Gandham Date: Wed, 21 May 2025 11:27:22 -0400 Subject: [PATCH 06/15] Handle out of memory and out of time limit issues gracefully (#22) This PR adds two things: 1. Introduces a time limit for computing related variables. This function can take a lot of time for very large problems (in this case 20+ M variables). Ideally, we need to speed up this with a better algo and fine tune for larger problems 2. Catch `std::bad_alloc` exceptions in solve function. Currently, we only catch `cuopt::logic_error` Authors: - Rajesh Gandham (https://github.com/rg20) Approvers: - Hugo Linsenmaier (https://github.com/hlinsen) URL: https://github.com/NVIDIA/cuopt/pull/22 --- cpp/src/linear_programming/solve.cu | 5 +++++ cpp/src/mip/problem/problem.cu | 16 ++++++++++++---- cpp/src/mip/problem/problem.cuh | 2 +- cpp/src/mip/solve.cu | 5 +++++ cpp/src/routing/solve.cu | 5 +++++ 5 files changed, 28 insertions(+), 5 deletions(-) diff --git a/cpp/src/linear_programming/solve.cu b/cpp/src/linear_programming/solve.cu index 0ab3d848d..84cc4ce0c 100644 --- a/cpp/src/linear_programming/solve.cu +++ b/cpp/src/linear_programming/solve.cu @@ -554,6 +554,11 @@ optimization_problem_solution_t solve_lp(optimization_problem_t{e, op_problem.get_handle_ptr()->get_stream()}; + } catch (const std::bad_alloc& e) { + CUOPT_LOG_ERROR("Error in solve_lp: %s", e.what()); + return optimization_problem_solution_t{ + cuopt::logic_error("Memory allocation failed", cuopt::error_type_t::RuntimeError), + op_problem.get_handle_ptr()->get_stream()}; } } diff --git a/cpp/src/mip/problem/problem.cu b/cpp/src/mip/problem/problem.cu index 5826fee48..304b111ff 100644 --- a/cpp/src/mip/problem/problem.cu +++ b/cpp/src/mip/problem/problem.cu @@ -685,7 +685,10 @@ void problem_t::recompute_auxilliary_data(bool check_representation) { compute_n_integer_vars(); compute_binary_var_table(); - compute_related_variables(); + + // TODO: speedup compute related variables + const double time_limit = 30.; + compute_related_variables(time_limit); if (check_representation) check_problem_representation(true); } @@ -761,7 +764,7 @@ void problem_t::compute_binary_var_table() } template -void problem_t::compute_related_variables() +void problem_t::compute_related_variables(double time_limit) { auto pb_view = view(); @@ -788,6 +791,7 @@ void problem_t::compute_related_variables() i_t output_offset = 0; i_t related_var_offset = 0; + auto start_time = std::chrono::high_resolution_clock::now(); for (i_t i = 0;; ++i) { i_t slice_size = min(max_slice_size, n_variables - i * max_slice_size); if (slice_size <= 0) break; @@ -816,10 +820,14 @@ void problem_t::compute_related_variables() i_t related_var_base = related_variables.size(); related_variables.resize(related_variables.size() + array_size, handle_ptr->get_stream()); + auto current_time = std::chrono::high_resolution_clock::now(); // if the related variable array would wind up being too large for available memory, abort // TODO this used to be 1e9 - if (related_variables.size() > 1e9) { - CUOPT_LOG_DEBUG("Computing the related variable array would use too much memory, aborting\n"); + if (related_variables.size() > 1e9 || + std::chrono::duration_cast(current_time - start_time).count() > + time_limit) { + CUOPT_LOG_DEBUG( + "Computing the related variable array would use too much memory or time, aborting\n"); related_variables.resize(0, handle_ptr->get_stream()); related_variables_offsets.resize(0, handle_ptr->get_stream()); return; diff --git a/cpp/src/mip/problem/problem.cuh b/cpp/src/mip/problem/problem.cuh index 71daf7e33..6115dd162 100644 --- a/cpp/src/mip/problem/problem.cuh +++ b/cpp/src/mip/problem/problem.cuh @@ -79,7 +79,7 @@ class problem_t { void recompute_auxilliary_data(bool check_representation = true); void compute_n_integer_vars(); void compute_binary_var_table(); - void compute_related_variables(); + void compute_related_variables(double time_limit); void fix_given_variables(problem_t& original_problem, rmm::device_uvector& assignment, const rmm::device_uvector& variables_to_fix, diff --git a/cpp/src/mip/solve.cu b/cpp/src/mip/solve.cu index 71c23651d..a2547ef27 100644 --- a/cpp/src/mip/solve.cu +++ b/cpp/src/mip/solve.cu @@ -189,6 +189,11 @@ mip_solution_t solve_mip(optimization_problem_t& op_problem, } catch (const cuopt::logic_error& e) { CUOPT_LOG_ERROR("Error in solve_mip: %s", e.what()); return mip_solution_t{e, op_problem.get_handle_ptr()->get_stream()}; + } catch (const std::bad_alloc& e) { + CUOPT_LOG_ERROR("Error in solve_mip: %s", e.what()); + return mip_solution_t{ + cuopt::logic_error("Memory allocation failed", cuopt::error_type_t::RuntimeError), + op_problem.get_handle_ptr()->get_stream()}; } } diff --git a/cpp/src/routing/solve.cu b/cpp/src/routing/solve.cu index 641935e28..11fedcf18 100644 --- a/cpp/src/routing/solve.cu +++ b/cpp/src/routing/solve.cu @@ -31,6 +31,11 @@ assignment_t solve(data_model_view_t const& data_model, } catch (const cuopt::logic_error& e) { CUOPT_LOG_ERROR("Error in solve: %s", e.what()); return assignment_t(e, data_model.get_handle_ptr()->get_stream()); + } catch (const std::bad_alloc& e) { + CUOPT_LOG_ERROR("Error in solve: %s", e.what()); + return assignment_t( + cuopt::logic_error("Memory allocation failed", cuopt::error_type_t::RuntimeError), + data_model.get_handle_ptr()->get_stream()); } } From c796935f8299d151024742a2f805ccdb3c522d82 Mon Sep 17 00:00:00 2001 From: Alice Boucher <160623740+aliceb-nv@users.noreply.github.com> Date: Wed, 21 May 2025 21:11:36 +0200 Subject: [PATCH 07/15] Fix bug on consecutive runs caused by static lp_state_t object (#24) This PR fixes occasional crashes seen in the regression tests caused by accesses to a global `lp_state_t` object across consecutive runs, becoming stale in later runs. The object has been moved to `mip_solver_context_t`. Authors: - Alice Boucher (https://github.com/aliceb-nv) Approvers: - Rajesh Gandham (https://github.com/rg20) URL: https://github.com/NVIDIA/cuopt/pull/24 --- cpp/src/mip/diversity/diversity_manager.cu | 3 +- .../diversity/recombiners/fp_recombiner.cuh | 2 +- .../feasibility_pump/feasibility_pump.cu | 1 + cpp/src/mip/local_search/local_search.cu | 1 + .../local_search/rounding/constraint_prop.cu | 1 + .../rounding/lb_constraint_prop.cu | 1 + cpp/src/mip/relaxed_lp/lp_state.cuh | 41 ++++++------------- cpp/src/mip/relaxed_lp/relaxed_lp.cu | 3 +- cpp/src/mip/relaxed_lp/relaxed_lp.cuh | 1 + cpp/src/mip/solver_context.cuh | 9 +++- 10 files changed, 30 insertions(+), 33 deletions(-) diff --git a/cpp/src/mip/diversity/diversity_manager.cu b/cpp/src/mip/diversity/diversity_manager.cu index 153175fc0..d2efc9941 100644 --- a/cpp/src/mip/diversity/diversity_manager.cu +++ b/cpp/src/mip/diversity/diversity_manager.cu @@ -337,7 +337,7 @@ solution_t diversity_manager_t::run_solver() ls.constraint_prop.bounds_update.probing_cache.probing_cache; if (check_b_b_preemption()) { return population.best_feasible(); } - lp_state_t& lp_state = lp_state_t::get_default_lp_state(*problem_ptr); + lp_state_t& lp_state = context.lp_state; // resize because some constructor might be called before the presolve lp_state.resize(*problem_ptr, problem_ptr->handle_ptr->get_stream()); auto lp_result = get_relaxed_lp_solution(*problem_ptr, @@ -546,6 +546,7 @@ diversity_manager_t::recombine_and_local_search(solution_t& lp_offspring, lp_offspring.problem_ptr->integer_indices, context.settings.get_tolerances(), + context.lp_state, lp_run_time); cuopt_assert(population.test_invariant(), ""); cuopt_assert(lp_offspring.test_number_all_integer(), "All must be integers after LP"); diff --git a/cpp/src/mip/diversity/recombiners/fp_recombiner.cuh b/cpp/src/mip/diversity/recombiners/fp_recombiner.cuh index 9693f01fb..aa6206ff0 100644 --- a/cpp/src/mip/diversity/recombiners/fp_recombiner.cuh +++ b/cpp/src/mip/diversity/recombiners/fp_recombiner.cuh @@ -99,7 +99,7 @@ class fp_recombiner_t : public recombiner_t { const bool return_first_feasible = false; const bool save_state = false; // every sub problem is different,so it is very hard to find a valid initial solution - lp_state_t lp_state = lp_state_t::get_default_lp_state(fixed_problem); + lp_state_t lp_state = this->context.lp_state; auto solver_response = get_relaxed_lp_solution(fixed_problem, fixed_assignment, lp_state, diff --git a/cpp/src/mip/local_search/feasibility_pump/feasibility_pump.cu b/cpp/src/mip/local_search/feasibility_pump/feasibility_pump.cu index 86f8a3e28..c15a5d2f4 100644 --- a/cpp/src/mip/local_search/feasibility_pump/feasibility_pump.cu +++ b/cpp/src/mip/local_search/feasibility_pump/feasibility_pump.cu @@ -667,6 +667,7 @@ bool feasibility_pump_t::run_single_fp_descent(solution_t& s solution, solution.problem_ptr->integer_indices, context.settings.get_tolerances(), + context.lp_state, lp_verify_time_limit, return_first_feasible, &constraint_prop.bounds_update); diff --git a/cpp/src/mip/local_search/local_search.cu b/cpp/src/mip/local_search/local_search.cu index 847d7d7d5..8e3ef2e11 100644 --- a/cpp/src/mip/local_search/local_search.cu +++ b/cpp/src/mip/local_search/local_search.cu @@ -198,6 +198,7 @@ bool local_search_t::check_fj_on_lp_optimal(solution_t& solu solution, solution.problem_ptr->integer_indices, solution.problem_ptr->tolerances, + context.lp_state, lp_run_time); } else { return is_feasible; diff --git a/cpp/src/mip/local_search/rounding/constraint_prop.cu b/cpp/src/mip/local_search/rounding/constraint_prop.cu index a922ccec5..93770ef7b 100644 --- a/cpp/src/mip/local_search/rounding/constraint_prop.cu +++ b/cpp/src/mip/local_search/rounding/constraint_prop.cu @@ -896,6 +896,7 @@ bool constraint_prop_t::find_integer( orig_sol, orig_sol.problem_ptr->integer_indices, context.settings.get_tolerances(), + context.lp_state, lp_run_time_after_feasible, true); } diff --git a/cpp/src/mip/local_search/rounding/lb_constraint_prop.cu b/cpp/src/mip/local_search/rounding/lb_constraint_prop.cu index a0719ea5e..e414aac33 100644 --- a/cpp/src/mip/local_search/rounding/lb_constraint_prop.cu +++ b/cpp/src/mip/local_search/rounding/lb_constraint_prop.cu @@ -949,6 +949,7 @@ bool lb_constraint_prop_t::find_integer( orig_sol, orig_sol.problem_ptr->integer_indices, context.settings.get_tolerances(), + context.lp_state, lp_run_time_after_feasible, true); } diff --git a/cpp/src/mip/relaxed_lp/lp_state.cuh b/cpp/src/mip/relaxed_lp/lp_state.cuh index 41a078cdc..e43c342be 100644 --- a/cpp/src/mip/relaxed_lp/lp_state.cuh +++ b/cpp/src/mip/relaxed_lp/lp_state.cuh @@ -24,15 +24,23 @@ namespace cuopt::linear_programming::detail { template class lp_state_t { - // this constructor should be used only once by get_default_lp_state - private: + public: lp_state_t(problem_t& problem, rmm::cuda_stream_view stream) : prev_primal(problem.n_variables, stream), prev_dual(problem.n_constraints, stream) { + thrust::fill(problem.handle_ptr->get_thrust_policy(), + prev_primal.data(), + prev_primal.data() + problem.n_variables, + 0); + thrust::fill(problem.handle_ptr->get_thrust_policy(), + prev_dual.data(), + prev_dual.data() + problem.n_constraints, + 0); } - public: - lp_state_t(problem_t& problem) : lp_state_t(get_default_lp_state(problem)) {} + lp_state_t(problem_t& problem) : lp_state_t(problem, problem.handle_ptr->get_stream()) + { + } lp_state_t(const lp_state_t& other) : prev_primal(other.prev_primal, other.prev_primal.stream()), @@ -43,23 +51,6 @@ class lp_state_t { lp_state_t(lp_state_t&& other) noexcept = default; lp_state_t& operator=(lp_state_t&& other) noexcept = default; - static lp_state_t& get_default_lp_state(problem_t& problem) - { - if (!default_lp_state) { - default_lp_state.reset(new lp_state_t(problem, problem.handle_ptr->get_stream())); - thrust::fill(problem.handle_ptr->get_thrust_policy(), - default_lp_state->prev_primal.data(), - default_lp_state->prev_primal.data() + problem.n_variables, - 0); - thrust::fill(problem.handle_ptr->get_thrust_policy(), - default_lp_state->prev_dual.data(), - default_lp_state->prev_dual.data() + problem.n_constraints, - 0); - } - if (!root_is_initialized) { root_is_initialized = true; } - return *default_lp_state; - } - void resize(problem_t& problem, rmm::cuda_stream_view stream) { prev_primal.resize(problem.n_variables, stream); @@ -79,14 +70,6 @@ class lp_state_t { } rmm::device_uvector prev_primal; rmm::device_uvector prev_dual; - static std::unique_ptr> default_lp_state; - static bool root_is_initialized; }; -template -std::unique_ptr> lp_state_t::default_lp_state = nullptr; - -template -bool lp_state_t::root_is_initialized = false; - } // namespace cuopt::linear_programming::detail diff --git a/cpp/src/mip/relaxed_lp/relaxed_lp.cu b/cpp/src/mip/relaxed_lp/relaxed_lp.cu index 20fda2fca..05fcf3205 100644 --- a/cpp/src/mip/relaxed_lp/relaxed_lp.cu +++ b/cpp/src/mip/relaxed_lp/relaxed_lp.cu @@ -135,6 +135,7 @@ bool run_lp_with_vars_fixed(problem_t& op_problem, solution_t& solution, const rmm::device_uvector& variables_to_fix, typename mip_solver_settings_t::tolerances_t tols, + lp_state_t& lp_state, f_t time_limit, bool return_first_feasible, bound_presolve_t* bound_presolve) @@ -160,7 +161,6 @@ bool run_lp_with_vars_fixed(problem_t& op_problem, // if we are on the original problem and fixing the integers, save the state // if we are in recombiners and on a smaller problem, don't update the state with integers fixed bool save_state = false; - auto& lp_state = lp_state_t::get_default_lp_state(fixed_problem); auto solver_response = get_relaxed_lp_solution(fixed_problem, fixed_assignment, lp_state, @@ -197,6 +197,7 @@ bool run_lp_with_vars_fixed(problem_t& op_problem, solution_t & solution, \ const rmm::device_uvector& variables_to_fix, \ typename mip_solver_settings_t::tolerances_t tols, \ + lp_state_t& lp_state, \ F_TYPE time_limit, \ bool return_first_feasible, \ bound_presolve_t* bound_presolve); diff --git a/cpp/src/mip/relaxed_lp/relaxed_lp.cuh b/cpp/src/mip/relaxed_lp/relaxed_lp.cuh index 713e93d60..39ccc7ef5 100644 --- a/cpp/src/mip/relaxed_lp/relaxed_lp.cuh +++ b/cpp/src/mip/relaxed_lp/relaxed_lp.cuh @@ -51,6 +51,7 @@ bool run_lp_with_vars_fixed(problem_t& op_problem, solution_t& solution, const rmm::device_uvector& variables_to_fix, typename mip_solver_settings_t::tolerances_t tols, + lp_state_t& lp_state, f_t time_limit = 20., bool return_first_feasible = false, bound_presolve_t* bound_presolve = nullptr); diff --git a/cpp/src/mip/solver_context.cuh b/cpp/src/mip/solver_context.cuh index c78ecc9e8..a714a25b4 100644 --- a/cpp/src/mip/solver_context.cuh +++ b/cpp/src/mip/solver_context.cuh @@ -17,6 +17,7 @@ #include #include +#include #include #pragma once @@ -31,14 +32,20 @@ struct mip_solver_context_t { problem_t* problem_ptr_, mip_solver_settings_t settings_, pdlp_initial_scaling_strategy_t& scaling) - : handle_ptr(handle_ptr_), problem_ptr(problem_ptr_), settings(settings_), scaling(scaling) + : handle_ptr(handle_ptr_), + problem_ptr(problem_ptr_), + settings(settings_), + scaling(scaling), + lp_state(*problem_ptr) { + cuopt_assert(problem_ptr != nullptr, "problem_ptr is nullptr"); stats.solution_bound = problem_ptr->maximize ? std::numeric_limits::infinity() : -std::numeric_limits::infinity(); } raft::handle_t const* const handle_ptr; problem_t* problem_ptr; + lp_state_t lp_state; const mip_solver_settings_t settings; pdlp_initial_scaling_strategy_t& scaling; solver_stats_t stats; From 0686073d4fe3e8aa2226d0875cfc4b74ba88d094 Mon Sep 17 00:00:00 2001 From: Chris Maes Date: Wed, 21 May 2025 17:02:28 -0700 Subject: [PATCH 08/15] Fix bug in C API for bool parameters. Fix bug on irish-electricty (#25) Since C does not have a boolean type, we need to allow `cuOptGetIntParameter` and `cuOptSetIntParameter` to work for boolean parameters as well. On irish-electricity we had a bug where we were stopping PDLP early, due to a numerical error inside dual simplex. In concurrent mode we should only stop the other solver when we have reached a definitive conclusion on the problem. Fix a bug in the Python docstrings found by Flora. Also log whenever we change settings. And set the log pattern to `%v` outside the solve as well. Authors: - Chris Maes (https://github.com/chris-maes) Approvers: - Trevor McKay (https://github.com/tmckayus) - Rajesh Gandham (https://github.com/rg20) URL: https://github.com/NVIDIA/cuopt/pull/25 --- cpp/include/cuopt/logger.hpp | 8 +++ cpp/src/linear_programming/cuopt_c.cpp | 16 ++++++ cpp/src/linear_programming/solve.cu | 19 ++++--- cpp/src/math_optimization/solver_settings.cu | 49 ++++++++++++++++--- cpp/src/mip/solve.cu | 3 -- .../cuopt/linear_programming/solver/solver.py | 4 +- 6 files changed, 81 insertions(+), 18 deletions(-) diff --git a/cpp/include/cuopt/logger.hpp b/cpp/include/cuopt/logger.hpp index 0d1cc353c..5fb42b62d 100644 --- a/cpp/include/cuopt/logger.hpp +++ b/cpp/include/cuopt/logger.hpp @@ -72,7 +72,11 @@ inline rapids_logger::logger& default_logger() { static rapids_logger::logger logger_ = [] { rapids_logger::logger logger_{"CUOPT", {default_sink()}}; +#if CUOPT_LOG_ACTIVE_LEVEL >= RAPIDS_LOGGER_LOG_LEVEL_INFO + logger_.set_pattern("%v"); +#else logger_.set_pattern(default_pattern()); +#endif logger_.set_level(default_level()); logger_.flush_on(rapids_logger::level_enum::info); @@ -90,7 +94,11 @@ inline void reset_default_logger() { default_logger().sinks().clear(); default_logger().sinks().push_back(default_sink()); +#if CUOPT_LOG_ACTIVE_LEVEL >= RAPIDS_LOGGER_LOG_LEVEL_INFO + default_logger().set_pattern("%v"); +#else default_logger().set_pattern(default_pattern()); +#endif default_logger().set_level(default_level()); default_logger().flush_on(rapids_logger::level_enum::info); } diff --git a/cpp/src/linear_programming/cuopt_c.cpp b/cpp/src/linear_programming/cuopt_c.cpp index eaa934ca5..074566ba7 100644 --- a/cpp/src/linear_programming/cuopt_c.cpp +++ b/cpp/src/linear_programming/cuopt_c.cpp @@ -492,6 +492,14 @@ cuopt_int_t cuOptSetIntegerParameter(cuOptSolverSettings settings, static_cast*>(settings); try { solver_settings->set_parameter(parameter_name, parameter_value); + } catch (const std::invalid_argument& e) { + // We could be trying to set a boolean parameter. Try that + try { + bool value = static_cast(parameter_value); + solver_settings->set_parameter(parameter_name, value); + } catch (const std::exception& e) { + return CUOPT_INVALID_ARGUMENT; + } } catch (const std::exception& e) { return CUOPT_INVALID_ARGUMENT; } @@ -509,6 +517,14 @@ cuopt_int_t cuOptGetIntegerParameter(cuOptSolverSettings settings, static_cast*>(settings); try { *parameter_value_ptr = solver_settings->get_parameter(parameter_name); + } catch (const std::invalid_argument& e) { + // We could be trying to get a boolean parameter. Try that + try { + *parameter_value_ptr = + static_cast(solver_settings->get_parameter(parameter_name)); + } catch (const std::exception& e) { + return CUOPT_INVALID_ARGUMENT; + } } catch (const std::exception& e) { return CUOPT_INVALID_ARGUMENT; } diff --git a/cpp/src/linear_programming/solve.cu b/cpp/src/linear_programming/solve.cu index 84cc4ce0c..7677d28d1 100644 --- a/cpp/src/linear_programming/solve.cu +++ b/cpp/src/linear_programming/solve.cu @@ -257,6 +257,7 @@ optimization_problem_solution_t convert_dual_simplex_sol( info.solve_time = duration; info.number_of_steps_taken = solution.iterations; + pdlp_termination_status_t termination_status = to_termination_status(status); auto sol = optimization_problem_solution_t(final_primal_solution, final_dual_solution, final_reduced_cost, @@ -264,7 +265,13 @@ optimization_problem_solution_t convert_dual_simplex_sol( problem.var_names, problem.row_names, info, - to_termination_status(status)); + termination_status); + + if (termination_status != pdlp_termination_status_t::Optimal && + termination_status != pdlp_termination_status_t::TimeLimit && + termination_status != pdlp_termination_status_t::ConcurrentLimit) { + CUOPT_LOG_INFO("Dual simplex status %s", sol.get_termination_status_string().c_str()); + } problem.handle_ptr->sync_stream(); return sol; @@ -295,7 +302,9 @@ std::tuple, dual_simplex::lp_status_t, f_t CUOPT_LOG_INFO("Dual simplex finished in %.2f seconds", duration.count() / 1000.0); - if (settings.concurrent_halt != nullptr) { + if (settings.concurrent_halt != nullptr && (status == dual_simplex::lp_status_t::OPTIMAL || + status == dual_simplex::lp_status_t::UNBOUNDED || + status == dual_simplex::lp_status_t::INFEASIBLE)) { // We finished. Tell PDLP to stop if it is still running. settings.concurrent_halt->store(1, std::memory_order_release); } @@ -398,7 +407,8 @@ optimization_problem_solution_t run_pdlp(detail::problem_t& sol.copy_from(problem.handle_ptr, sol_crossover); CUOPT_LOG_INFO("Crossover status %s", sol.get_termination_status_string().c_str()); } - if (crossover_info == 0 && settings.concurrent_halt != nullptr) { + if (settings.concurrent_halt != nullptr && crossover_info == 0 && + sol.get_termination_status() == pdlp_termination_status_t::Optimal) { // We finished. Tell dual simplex to stop if it is still running. settings.concurrent_halt->store(1, std::memory_order_release); } @@ -511,9 +521,6 @@ optimization_problem_solution_t solve_lp(optimization_problem_t= RAPIDS_LOGGER_LOG_LEVEL_INFO - cuopt::default_logger().set_pattern("%v"); -#endif // Init libraies before to not include it in solve time // This needs to be called before pdlp is initialized diff --git a/cpp/src/math_optimization/solver_settings.cu b/cpp/src/math_optimization/solver_settings.cu index 0eef789be..2666e7bd5 100644 --- a/cpp/src/math_optimization/solver_settings.cu +++ b/cpp/src/math_optimization/solver_settings.cu @@ -16,6 +16,7 @@ */ #include +#include #include namespace cuopt::linear_programming { @@ -119,7 +120,8 @@ template void solver_settings_t::set_parameter_from_string(const std::string& name, const std::string& value) { - bool found = false; + bool found = false; + bool output = false; for (auto& param : int_parameters) { if (param.param_name == name) { i_t value_int; @@ -129,6 +131,10 @@ void solver_settings_t::set_parameter_from_string(const std::string& n } *param.value_ptr = value_int; found = true; + if (!output) { + CUOPT_LOG_INFO("Setting parameter %s to %d", name.c_str(), value_int); + output = true; + } } else { throw std::invalid_argument("Parameter " + name + " value " + value + " is not an integer"); } @@ -143,6 +149,10 @@ void solver_settings_t::set_parameter_from_string(const std::string& n } *param.value_ptr = value_float; found = true; + if (!output) { + CUOPT_LOG_INFO("Setting parameter %s to %e", name.c_str(), value_float); + output = true; + } } else { throw std::invalid_argument("Parameter " + name + " value " + value + " is not a float"); } @@ -154,6 +164,10 @@ void solver_settings_t::set_parameter_from_string(const std::string& n if (string_to_bool(value, value_bool)) { *param.value_ptr = value_bool; found = true; + if (!output) { + CUOPT_LOG_INFO("Setting parameter %s to %s", name.c_str(), value_bool ? "true" : "false"); + output = true; + } } else { throw std::invalid_argument("Parameter " + name + " value " + value + " must be true or false"); @@ -164,7 +178,11 @@ void solver_settings_t::set_parameter_from_string(const std::string& n for (auto& param : string_parameters) { if (param.param_name == name) { *param.value_ptr = value; - found = true; + if (!output) { + CUOPT_LOG_INFO("Setting parameter %s to %s", name.c_str(), value.c_str()); + output = true; + } + found = true; } } if (!found) { throw std::invalid_argument("Parameter " + name + " not found"); } @@ -174,7 +192,8 @@ template template void solver_settings_t::set_parameter(const std::string& name, T value) { - bool found = false; + bool found = false; + bool output = false; if constexpr (std::is_same_v) { for (auto& param : int_parameters) { if (param.param_name == name) { @@ -182,7 +201,11 @@ void solver_settings_t::set_parameter(const std::string& name, T value throw std::invalid_argument("Parameter " + name + " out of range"); } *param.value_ptr = value; - found = true; + if (!output) { + CUOPT_LOG_INFO("Setting parameter %s to %d", name.c_str(), value); + output = true; + } + found = true; } } } @@ -193,7 +216,11 @@ void solver_settings_t::set_parameter(const std::string& name, T value throw std::invalid_argument("Parameter " + name + " out of range"); } *param.value_ptr = value; - found = true; + if (!output) { + CUOPT_LOG_INFO("Setting parameter %s to %e", name.c_str(), value); + output = true; + } + found = true; } } } @@ -201,7 +228,11 @@ void solver_settings_t::set_parameter(const std::string& name, T value for (auto& param : bool_parameters) { if (param.param_name == name) { *param.value_ptr = value; - found = true; + if (!output) { + CUOPT_LOG_INFO("Setting parameter %s to %s", name.c_str(), value ? "true" : "false"); + output = true; + } + found = true; } } } @@ -209,7 +240,11 @@ void solver_settings_t::set_parameter(const std::string& name, T value for (auto& param : string_parameters) { if (param.param_name == name) { *param.value_ptr = value; - found = true; + if (!output) { + CUOPT_LOG_INFO("Setting parameter %s to %s", name.c_str(), value.c_str()); + output = true; + } + found = true; } } } diff --git a/cpp/src/mip/solve.cu b/cpp/src/mip/solve.cu index a2547ef27..d8fbd03e9 100644 --- a/cpp/src/mip/solve.cu +++ b/cpp/src/mip/solve.cu @@ -159,9 +159,6 @@ mip_solution_t solve_mip(optimization_problem_t& op_problem, try { // Create log stream for file logging and add it to default logger init_logger_t log(settings.log_file, settings.log_to_console); -#if CUOPT_LOG_ACTIVE_LEVEL >= RAPIDS_LOGGER_LOG_LEVEL_INFO - cuopt::default_logger().set_pattern("%v"); -#endif // Init libraies before to not include it in solve time // This needs to be called before pdlp is initialized init_handler(op_problem.get_handle_ptr()); diff --git a/python/cuopt/cuopt/linear_programming/solver/solver.py b/python/cuopt/cuopt/linear_programming/solver/solver.py index 94b4904f3..24812e70c 100644 --- a/python/cuopt/cuopt/linear_programming/solver/solver.py +++ b/python/cuopt/cuopt/linear_programming/solver/solver.py @@ -54,7 +54,7 @@ def Solve(data_model, solver_settings=None, log_file=""): -------- >>> from cuopt import linear_programming >>> from cuopt.linear_programming.solver_settings import PDLPSolverMode - >>> from cuopt.linear_programming.solver_parameters import * + >>> from cuopt.linear_programming.solver.solver_parameters import * >>> >>> data_model = linear_programming.DataModel() >>> @@ -140,7 +140,7 @@ def BatchSolve(data_model_list, solver_settings=None, log_file=""): -------- >>> from cuopt import linear_programming >>> from cuopt.linear_programming.solver_settings import PDLPSolverMode - >>> from cuopt.linear_programming.solver_parameters import * + >>> from cuopt.linear_programming.solver.solver_parameters import * >>> import cuopt_mps_parser >>> >>> data_models = [] From 6975e1c36ff274d84b207447c7fd104b8aba9d4c Mon Sep 17 00:00:00 2001 From: Nicolas Blin <31096601+Kh4ster@users.noreply.github.com> Date: Thu, 22 May 2025 07:48:14 +0200 Subject: [PATCH 09/15] PDLP solution file generation and binary fix (#21) This PR fixes two issues: 1. Solution file generated by PDLP presented several JSON issues, was still mentioning ms for the solve time and was not handling the potential missing fields from Dual Simplex. To handle the last and so that user can know, a bool was added to know which solver solved the LP problem 2. The default value for binary time limit was an int resulting in a bad any cast in case it was not set Authors: - Nicolas Blin (https://github.com/Kh4ster) - https://github.com/Iroy30 Approvers: - Alice Boucher (https://github.com/aliceb-nv) - https://github.com/Iroy30 URL: https://github.com/NVIDIA/cuopt/pull/21 --- .../linear_programming/cuopt/run_pdlp.cu | 9 +-- .../pdlp/solver_solution.hpp | 33 +++++----- .../utilities/cython_solve.hpp | 1 + cpp/src/linear_programming/solve.cu | 1 + cpp/src/linear_programming/solver_solution.cu | 66 ++++++++++--------- .../termination_strategy.cu | 1 + .../utilities/cython_solve.cu | 3 +- .../linear_programming/solution/solution.py | 12 +++- .../linear_programming/solver/solver.pxd | 1 + .../solver/solver_wrapper.pyx | 3 + .../linear_programming/test_lp_solver.py | 14 ++-- .../cuopt_sh_client/cuopt_self_host_client.py | 12 +++- .../linear_programming/data_definition.py | 6 ++ .../utils/linear_programming/solver.py | 1 + 14 files changed, 101 insertions(+), 62 deletions(-) diff --git a/benchmarks/linear_programming/cuopt/run_pdlp.cu b/benchmarks/linear_programming/cuopt/run_pdlp.cu index b69a87466..e4fad3c26 100644 --- a/benchmarks/linear_programming/cuopt/run_pdlp.cu +++ b/benchmarks/linear_programming/cuopt/run_pdlp.cu @@ -41,8 +41,8 @@ static void parse_arguments(argparse::ArgumentParser& program) program.add_argument("--time-limit") .help("Time limit in seconds") - .default_value(3600) - .scan<'f', double>(); + .default_value(3600.0) + .scan<'g', double>(); program.add_argument("--iteration-limit") .help("Iteration limit") @@ -52,7 +52,7 @@ static void parse_arguments(argparse::ArgumentParser& program) program.add_argument("--optimality-tolerance") .help("Optimality tolerance") .default_value(1e-4) - .scan<'f', double>(); + .scan<'g', double>(); program.add_argument("--pdlp-solver-mode") .help("Solver mode for PDLP. Possible values: Stable2 (default), Methodical1, Fast1") @@ -102,7 +102,8 @@ static cuopt::linear_programming::pdlp_solver_settings_t create_sol settings.time_limit = program.get("--time-limit"); settings.iteration_limit = program.get("--iteration-limit"); settings.set_optimality_tolerance(program.get("--optimality-tolerance")); - settings.solver_mode = string_to_pdlp_solver_mode(program.get("--pdlp-solver-mode")); + settings.pdlp_solver_mode = + string_to_pdlp_solver_mode(program.get("--pdlp-solver-mode")); settings.method = static_cast(program.get("--method")); settings.crossover = program.get("--crossover"); diff --git a/cpp/include/cuopt/linear_programming/pdlp/solver_solution.hpp b/cpp/include/cuopt/linear_programming/pdlp/solver_solution.hpp index bb80250c9..197d60b32 100644 --- a/cpp/include/cuopt/linear_programming/pdlp/solver_solution.hpp +++ b/cpp/include/cuopt/linear_programming/pdlp/solver_solution.hpp @@ -62,41 +62,44 @@ class optimization_problem_solution_t : public base_solution_t { */ struct additional_termination_information_t { /** Number of pdlp steps taken before termination */ - i_t number_of_steps_taken; + i_t number_of_steps_taken{-1}; /** Number of pdhg steps taken before termination */ - i_t total_number_of_attempted_steps; + i_t total_number_of_attempted_steps{-1}; /** L2 norm of the primal residual (absolute primal residual) */ - f_t l2_primal_residual; + f_t l2_primal_residual{std::numeric_limits::signaling_NaN()}; /** L2 norm of the primal residual divided by the L2 norm of the right hand side (b) */ - f_t l2_relative_primal_residual; + f_t l2_relative_primal_residual{std::numeric_limits::signaling_NaN()}; /** L2 norm of the dual residual */ - f_t l2_dual_residual; + f_t l2_dual_residual{std::numeric_limits::signaling_NaN()}; /** L2 norm of the dual residual divided by the L2 norm of the objective coefficient (c) */ - f_t l2_relative_dual_residual; + f_t l2_relative_dual_residual{std::numeric_limits::signaling_NaN()}; /** Primal Objective */ - f_t primal_objective; + f_t primal_objective{std::numeric_limits::signaling_NaN()}; /** Dual Objective */ - f_t dual_objective; + f_t dual_objective{std::numeric_limits::signaling_NaN()}; /** Gap between primal and dual objective value */ - f_t gap; + f_t gap{std::numeric_limits::signaling_NaN()}; /** Gap divided by the absolute sum of the primal and dual objective values */ - f_t relative_gap; + f_t relative_gap{std::numeric_limits::signaling_NaN()}; /** Maximum error for the linear constraints and sign constraints */ - f_t max_primal_ray_infeasibility; + f_t max_primal_ray_infeasibility{std::numeric_limits::signaling_NaN()}; /** Objective value for the extreme primal ray */ - f_t primal_ray_linear_objective; + f_t primal_ray_linear_objective{std::numeric_limits::signaling_NaN()}; /** Maximum constraint error */ - f_t max_dual_ray_infeasibility; + f_t max_dual_ray_infeasibility{std::numeric_limits::signaling_NaN()}; /** Objective value for the extreme dual ray */ - f_t dual_ray_linear_objective; + f_t dual_ray_linear_objective{std::numeric_limits::signaling_NaN()}; /** Solve time in seconds */ - double solve_time; + double solve_time{std::numeric_limits::signaling_NaN()}; + + /** Whether the problem was solved by PDLP or Dual Simplex */ + bool solved_by_pdlp{false}; }; /** diff --git a/cpp/include/cuopt/linear_programming/utilities/cython_solve.hpp b/cpp/include/cuopt/linear_programming/utilities/cython_solve.hpp index 15bc9ed94..de4d9cf66 100644 --- a/cpp/include/cuopt/linear_programming/utilities/cython_solve.hpp +++ b/cpp/include/cuopt/linear_programming/utilities/cython_solve.hpp @@ -70,6 +70,7 @@ struct linear_programming_ret_t { double gap_; int nb_iterations_; double solve_time_; + bool solved_by_pdlp_; }; struct mip_ret_t { diff --git a/cpp/src/linear_programming/solve.cu b/cpp/src/linear_programming/solve.cu index 7677d28d1..a070d1239 100644 --- a/cpp/src/linear_programming/solve.cu +++ b/cpp/src/linear_programming/solve.cu @@ -256,6 +256,7 @@ optimization_problem_solution_t convert_dual_simplex_sol( info.primal_objective = solution.user_objective; info.solve_time = duration; info.number_of_steps_taken = solution.iterations; + info.solved_by_pdlp = false; pdlp_termination_status_t termination_status = to_termination_status(status); auto sol = optimization_problem_solution_t(final_primal_solution, diff --git a/cpp/src/linear_programming/solver_solution.cu b/cpp/src/linear_programming/solver_solution.cu index f59d47493..41cb9b47a 100644 --- a/cpp/src/linear_programming/solver_solution.cu +++ b/cpp/src/linear_programming/solver_solution.cu @@ -152,37 +152,41 @@ void optimization_problem_solution_t::write_additional_termination_sta myfile << "\t\"Additional termination information\" : { " << std::endl; myfile << "\t\"Number of steps taken\" : " << termination_stats_.number_of_steps_taken << "," << std::endl; - myfile << "\t\"Total number of attempted steps\" : " - << termination_stats_.total_number_of_attempted_steps << "," << std::endl; - myfile << "\t\"Total solve time (ms)\" : " << termination_stats_.solve_time << "," << std::endl; - - myfile << "\t\t\"Convergence measures\" : { " << std::endl; - myfile << "\t\t\t\"Absolute primal residual\" : " << termination_stats_.l2_primal_residual << "," - << std::endl; - myfile << "\t\t\t\"Relative primal residual\" : " - << termination_stats_.l2_relative_primal_residual << "," << std::endl; - myfile << "\t\t\t\"Absolute dual residual\" : " << termination_stats_.l2_dual_residual << "," - << std::endl; - myfile << "\t\t\t\"Relative dual residual\" : " << termination_stats_.l2_relative_dual_residual - << "," << std::endl; - myfile << "\t\t\t\"Primal objective value\" : " << termination_stats_.primal_objective << "," - << std::endl; - myfile << "\t\t\t\"Dual objective value\" : " << termination_stats_.dual_objective << "," - << std::endl; - myfile << "\t\t\t\"Gap\" : " << termination_stats_.gap << std::endl; - myfile << "\t\t\t\"Relative gap\" : " << termination_stats_.relative_gap << "," << std::endl; - myfile << "\t\t}, " << std::endl; - - myfile << "\t\t\"Infeasibility measures\" : {" << std::endl; - myfile << "\t\t\t\"Maximum error for the linear constraints and sign constraints\" : " - << termination_stats_.max_primal_ray_infeasibility << "," << std::endl; - myfile << "\t\t\t\"Objective value for the extreme primal ray\" : " - << termination_stats_.primal_ray_linear_objective << "," << std::endl; - myfile << "\t\t\t\"Maximum constraint error\" : " << termination_stats_.max_dual_ray_infeasibility - << "," << std::endl; - myfile << "\t\t\t\"Objective value for the extreme dual ray\" : " - << termination_stats_.dual_ray_linear_objective << std::endl; - myfile << "\t\t} " << std::endl; + if (termination_stats_.solved_by_pdlp) { + myfile << "\t\"Total number of attempted steps\" : " + << termination_stats_.total_number_of_attempted_steps << "," << std::endl; + } + myfile << "\t\"Total solve time\" : " << termination_stats_.solve_time; + if (termination_stats_.solved_by_pdlp) { + myfile << "," << std::endl; + myfile << "\t\t\"Convergence measures\" : { " << std::endl; + myfile << "\t\t\t\"Absolute primal residual\" : " << termination_stats_.l2_primal_residual + << "," << std::endl; + myfile << "\t\t\t\"Relative primal residual\" : " + << termination_stats_.l2_relative_primal_residual << "," << std::endl; + myfile << "\t\t\t\"Absolute dual residual\" : " << termination_stats_.l2_dual_residual << "," + << std::endl; + myfile << "\t\t\t\"Relative dual residual\" : " << termination_stats_.l2_relative_dual_residual + << "," << std::endl; + myfile << "\t\t\t\"Primal objective value\" : " << termination_stats_.primal_objective << "," + << std::endl; + myfile << "\t\t\t\"Dual objective value\" : " << termination_stats_.dual_objective << "," + << std::endl; + myfile << "\t\t\t\"Gap\" : " << termination_stats_.gap << "," << std::endl; + myfile << "\t\t\t\"Relative gap\" : " << termination_stats_.relative_gap << std::endl; + myfile << "\t\t}, " << std::endl; + myfile << "\t\t\"Infeasibility measures\" : {" << std::endl; + myfile << "\t\t\t\"Maximum error for the linear constraints and sign constraints\" : " + << termination_stats_.max_primal_ray_infeasibility << "," << std::endl; + myfile << "\t\t\t\"Objective value for the extreme primal ray\" : " + << termination_stats_.primal_ray_linear_objective << "," << std::endl; + myfile << "\t\t\t\"Maximum constraint error\" : " + << termination_stats_.max_dual_ray_infeasibility << "," << std::endl; + myfile << "\t\t\t\"Objective value for the extreme dual ray\" : " + << termination_stats_.dual_ray_linear_objective << std::endl; + myfile << "\t\t} " << std::endl; + } else + myfile << std::endl; myfile << "\t} " << std::endl; } diff --git a/cpp/src/linear_programming/termination_strategy/termination_strategy.cu b/cpp/src/linear_programming/termination_strategy/termination_strategy.cu index 254fdd6b2..fcb66cdd0 100644 --- a/cpp/src/linear_programming/termination_strategy/termination_strategy.cu +++ b/cpp/src/linear_programming/termination_strategy/termination_strategy.cu @@ -324,6 +324,7 @@ pdlp_termination_strategy_t::fill_return_problem_solution( infeasibility_information_view.dual_ray_linear_objective, 1, stream_view_); + term_stats.solved_by_pdlp = (termination_status != pdlp_termination_status_t::ConcurrentLimit); RAFT_CUDA_TRY(cudaStreamSynchronize(stream_view_)); diff --git a/cpp/src/linear_programming/utilities/cython_solve.cu b/cpp/src/linear_programming/utilities/cython_solve.cu index f176db781..b333e99a4 100644 --- a/cpp/src/linear_programming/utilities/cython_solve.cu +++ b/cpp/src/linear_programming/utilities/cython_solve.cu @@ -165,7 +165,8 @@ linear_programming_ret_t call_solve_lp( solution.get_additional_termination_information().dual_objective, solution.get_additional_termination_information().gap, solution.get_additional_termination_information().number_of_steps_taken, - solution.get_additional_termination_information().solve_time}; + solution.get_additional_termination_information().solve_time, + solution.get_additional_termination_information().solved_by_pdlp}; return lp_ret; } diff --git a/python/cuopt/cuopt/linear_programming/solution/solution.py b/python/cuopt/cuopt/linear_programming/solution/solution.py index d84561c4c..952ecb73b 100644 --- a/python/cuopt/cuopt/linear_programming/solution/solution.py +++ b/python/cuopt/cuopt/linear_programming/solution/solution.py @@ -127,7 +127,9 @@ class Solution: Note: Applicable to only MILP Time used for pre-solve solve_time: Float64 - Solve time in milliseconds + Solve time in seconds + solved_by_pdlp: bool + Whether the problem was solved by PDLP or Dual Simplex """ def __init__( @@ -164,6 +166,7 @@ def __init__( dual_objective=0.0, gap=0.0, nb_iterations=0, + solved_by_pdlp=None, mip_gap=0.0, solution_bound=0.0, presolve_time=0.0, @@ -202,6 +205,7 @@ def __init__( self.primal_objective = primal_objective self.dual_objective = dual_objective self.solve_time = solve_time + self.solved_by_pdlp = solved_by_pdlp self.vars = vars self.lp_stats = { "primal_residual": primal_residual, @@ -297,6 +301,12 @@ def get_solve_time(self): """ return self.solve_time + def get_solved_by_pdlp(self): + """ + Returns whether the problem was solved by PDLP or Dual Simplex + """ + return self.solved_by_pdlp + def get_vars(self): """ Returns the dictionnary mapping each variable (name) to its value. diff --git a/python/cuopt/cuopt/linear_programming/solver/solver.pxd b/python/cuopt/cuopt/linear_programming/solver/solver.pxd index 202e8a3bf..3982e2ff8 100644 --- a/python/cuopt/cuopt/linear_programming/solver/solver.pxd +++ b/python/cuopt/cuopt/linear_programming/solver/solver.pxd @@ -163,6 +163,7 @@ cdef extern from "cuopt/linear_programming/utilities/cython_solve.hpp" namespace double gap_ int nb_iterations_ double solve_time_ + bool solved_by_pdlp_ cdef cppclass mip_ret_t: unique_ptr[device_buffer] solution_ diff --git a/python/cuopt/cuopt/linear_programming/solver/solver_wrapper.pyx b/python/cuopt/cuopt/linear_programming/solver/solver_wrapper.pyx index 238fef8a4..9ba65bbc0 100644 --- a/python/cuopt/cuopt/linear_programming/solver/solver_wrapper.pyx +++ b/python/cuopt/cuopt/linear_programming/solver/solver_wrapper.pyx @@ -520,6 +520,7 @@ cdef create_solution(unique_ptr[solver_ret_t] sol_ret_ptr, gap = sol_ret.lp_ret.gap_ nb_iterations = sol_ret.lp_ret.nb_iterations_ solve_time = sol_ret.lp_ret.solve_time_ + solved_by_pdlp = sol_ret.lp_ret.solved_by_pdlp_ # In BatchSolve, we don't get the warm start data if not is_batch: @@ -647,6 +648,7 @@ cdef create_solution(unique_ptr[solver_ret_t] sol_ret_ptr, dual_objective, gap, nb_iterations, + solved_by_pdlp, ) return Solution( problem_category=ProblemCategory(sol_ret.problem_type), @@ -664,6 +666,7 @@ cdef create_solution(unique_ptr[solver_ret_t] sol_ret_ptr, dual_objective=dual_objective, gap=gap, nb_iterations=nb_iterations, + solved_by_pdlp=solved_by_pdlp, ) diff --git a/python/cuopt/cuopt/tests/linear_programming/test_lp_solver.py b/python/cuopt/cuopt/tests/linear_programming/test_lp_solver.py index fac9c7747..81bae6e03 100644 --- a/python/cuopt/cuopt/tests/linear_programming/test_lp_solver.py +++ b/python/cuopt/cuopt/tests/linear_programming/test_lp_solver.py @@ -72,6 +72,7 @@ def test_solver(): settings = solver_settings.SolverSettings() settings.set_optimality_tolerance(1e-2) + settings.set_parameter(CUOPT_METHOD, SolverMethod.PDLP) solution = solver.Solve(data_model_obj, settings) assert solution.get_termination_reason() == "Optimal" @@ -81,6 +82,7 @@ def test_solver(): assert solution.get_primal_objective() == pytest.approx(0.0) assert solution.get_dual_objective() == pytest.approx(0.0) assert solution.get_lp_stats()["gap"] == pytest.approx(0.0) + assert solution.get_solved_by_pdlp() def test_parser_and_solver(): @@ -379,9 +381,6 @@ def test_check_data_model_validity(): solver.Solve(data_model_obj) -@pytest.mark.skip( - reason="skip until with can pick Method=PDLP on the Python side" -) # noqa def test_parse_var_names(): file_path = ( RAPIDS_DATASET_ROOT_DIR + "/linear_programming/afiro_original.mps" @@ -426,7 +425,9 @@ def test_parse_var_names(): for i, name in enumerate(data_model_obj.get_variable_names()): assert expected_names[i] == name - solution = solver.Solve(data_model_obj) + settings = solver_settings.SolverSettings() + settings.set_parameter(CUOPT_METHOD, SolverMethod.PDLP) + solution = solver.Solve(data_model_obj, settings) expected_dict = { "X01": 80.00603991232295, @@ -472,9 +473,6 @@ def test_parse_var_names(): ) -@pytest.mark.skip( - reason="skip until with can pick Method=PDLP on the Python side" -) # noqa def test_parser_and_batch_solver(): data_model_list = [] @@ -488,6 +486,7 @@ def test_parser_and_batch_solver(): data_model_list.append(cuopt_mps_parser.ParseMps(file_path)) settings = solver_settings.SolverSettings() + settings.set_parameter(CUOPT_METHOD, SolverMethod.PDLP) settings.set_optimality_tolerance(1e-4) # Call BatchSolve @@ -602,6 +601,7 @@ def test_dual_simplex(): assert solution.get_termination_status() == LPTerminationStatus.Optimal assert solution.get_primal_objective() == pytest.approx(-464.7531) + assert not solution.get_solved_by_pdlp() def test_heuristics_only(): diff --git a/python/cuopt_self_hosted/cuopt_sh_client/cuopt_self_host_client.py b/python/cuopt_self_hosted/cuopt_sh_client/cuopt_self_host_client.py index 86d9049c0..35687e392 100644 --- a/python/cuopt_self_hosted/cuopt_sh_client/cuopt_self_host_client.py +++ b/python/cuopt_self_hosted/cuopt_sh_client/cuopt_self_host_client.py @@ -180,8 +180,8 @@ def create_solution_obj(solver_response): solve_time=sol["solver_time"], termination_status=status, primal_solution=np.array(sol["primal_solution"]), + reduced_cost=np.array(sol["reduced_cost"]), primal_objective=sol["primal_objective"], - dual_objective=sol["dual_objective"], mip_gap=sol["milp_statistics"]["mip_gap"], solution_bound=sol["milp_statistics"]["solution_bound"], presolve_time=sol["milp_statistics"]["presolve_time"], @@ -192,6 +192,10 @@ def create_solution_obj(solver_response): max_variable_bound_violation=sol["milp_statistics"][ "max_variable_bound_violation" ], + num_nodes=sol["milp_statistics"]["num_nodes"], + num_simplex_iterations=sol["milp_statistics"][ + "num_simplex_iterations" + ], ) else: solution_obj = solution.Solution( @@ -201,12 +205,14 @@ def create_solution_obj(solver_response): termination_status=status, primal_solution=np.array(sol["primal_solution"]), dual_solution=np.array(sol["dual_solution"]), - reduced_cost=np.array(sol["lp_statistics"]["reduced_cost"]), + reduced_cost=np.array(sol["reduced_cost"]), primal_residual=sol["lp_statistics"]["primal_residual"], dual_residual=sol["lp_statistics"]["dual_residual"], + gap=sol["lp_statistics"]["gap"], + nb_iterations=sol["lp_statistics"]["nb_iterations"], primal_objective=sol["primal_objective"], dual_objective=sol["dual_objective"], - gap=sol["lp_statistics"]["gap"], + solved_by_pdlp=sol["solved_by_pdlp"], ) return status, solution_obj diff --git a/python/cuopt_server/cuopt_server/utils/linear_programming/data_definition.py b/python/cuopt_server/cuopt_server/utils/linear_programming/data_definition.py index 166947f06..302c1df98 100644 --- a/python/cuopt_server/cuopt_server/utils/linear_programming/data_definition.py +++ b/python/cuopt_server/cuopt_server/utils/linear_programming/data_definition.py @@ -596,6 +596,12 @@ class SolutionData(StrictModel): default=None, description=("Returns the engine solve time in seconds"), ) + solved_by_pdlp: bool = Field( + default=None, + description=( + "Returns whether problem was solved by PDLP or Dual Simplex" + ), + ) primal_objective: float = Field( default=None, description=("Primal objective of the LP problem"), diff --git a/python/cuopt_server/cuopt_server/utils/linear_programming/solver.py b/python/cuopt_server/cuopt_server/utils/linear_programming/solver.py index deeedd29b..5d1618595 100644 --- a/python/cuopt_server/cuopt_server/utils/linear_programming/solver.py +++ b/python/cuopt_server/cuopt_server/utils/linear_programming/solver.py @@ -380,6 +380,7 @@ def create_solution(sol): sol.get_dual_objective ) solution["solver_time"] = sol.get_solve_time() + solution["solved_by_pdlp"] = sol.get_solved_by_pdlp() solution["vars"] = sol.get_vars() solution["lp_statistics"] = {} if lp_stats is None else lp_stats solution["reduced_cost"] = reduced_cost From f1ccce351f317489eb8d7d28731fcab08b829968 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Akif=20=C3=87=C3=96RD=C3=9CK?= Date: Thu, 22 May 2025 20:50:42 +0200 Subject: [PATCH 10/15] Bug fixes on preprocess, line segment returning worse solution, temporary fix add B&B solution directly (#27) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR fixes bugs in - Preprocess in set callback function, the checks were done on the original assignment before preprocess, thus rejecting almost all set_solution calls. - Line segment returning worse solutions because of bug. - A side effect of LS returning worse solutions is that B&B added solutions are not added to the population as LS makes them worse. Authors: - Akif ÇÖRDÜK (https://github.com/akifcorduk) Approvers: - Alice Boucher (https://github.com/aliceb-nv) - Hugo Linsenmaier (https://github.com/hlinsen) URL: https://github.com/NVIDIA/cuopt/pull/27 --- cpp/src/mip/diversity/diversity_manager.cu | 1 + cpp/src/mip/diversity/population.cu | 1 + .../line_segment_search.cu | 4 +-- cpp/src/mip/problem/problem.cu | 32 +++++++++---------- 4 files changed, 20 insertions(+), 18 deletions(-) diff --git a/cpp/src/mip/diversity/diversity_manager.cu b/cpp/src/mip/diversity/diversity_manager.cu index d2efc9941..4a8f56e98 100644 --- a/cpp/src/mip/diversity/diversity_manager.cu +++ b/cpp/src/mip/diversity/diversity_manager.cu @@ -451,6 +451,7 @@ void diversity_manager_t::recombine_and_ls_with_all( if (solutions.size() > 0) { CUOPT_LOG_INFO("Running recombiners on B&B solutions with size %lu", solutions.size()); for (auto& sol : solutions) { + population.add_solution(std::move(solution_t(sol))); cuopt_func_call(sol.test_feasibility(true)); solution_t ls_solution(sol); ls.run_local_search(ls_solution, population.weights, timer); diff --git a/cpp/src/mip/diversity/population.cu b/cpp/src/mip/diversity/population.cu index 0780e77ce..d82ac0f14 100644 --- a/cpp/src/mip/diversity/population.cu +++ b/cpp/src/mip/diversity/population.cu @@ -146,6 +146,7 @@ std::vector> population_t::get_external_solutions solution_t sol(*problem_ptr); sol.copy_new_assignment(h_solution_vec); sol.compute_feasibility(); + sol.handle_ptr->sync_stream(); return_vector.emplace_back(std::move(sol)); } if (external_solution_queue.size() > 0) { diff --git a/cpp/src/mip/local_search/line_segment_search/line_segment_search.cu b/cpp/src/mip/local_search/line_segment_search/line_segment_search.cu index c512714ee..1f166bdf6 100644 --- a/cpp/src/mip/local_search/line_segment_search/line_segment_search.cu +++ b/cpp/src/mip/local_search/line_segment_search/line_segment_search.cu @@ -80,7 +80,7 @@ bool line_segment_search_t::search_line_segment(solution_t& delta_vector.begin(), [n_points_to_search] __device__(const f_t& x) { return x / (n_points_to_search + 1); }); - f_t best_cost = std::numeric_limits::max(); + f_t best_cost = solution.get_quality(fj.cstr_weights, fj.objective_weight); bool initial_is_feasible = solution.get_feasible(); // TODO start from middle and increase the resolution later for (i_t i = 1; i <= n_points_to_search; ++i) { @@ -92,7 +92,7 @@ bool line_segment_search_t::search_line_segment(solution_t& const i_t index) { return point_1_ptr[index] + delta_ptr[index] * i; }); cuopt_func_call(solution.test_variable_bounds(false)); bool is_feasible = solution.round_nearest(); - if (is_feasible) { + if (is_feasibility_run && is_feasible) { CUOPT_LOG_DEBUG("Feasible found after line segment"); return true; } diff --git a/cpp/src/mip/problem/problem.cu b/cpp/src/mip/problem/problem.cu index 304b111ff..e0caf1a26 100644 --- a/cpp/src/mip/problem/problem.cu +++ b/cpp/src/mip/problem/problem.cu @@ -572,26 +572,12 @@ void problem_t::check_problem_representation(bool check_transposed, template bool problem_t::pre_process_assignment(rmm::device_uvector& assignment) { - cuopt_assert(assignment.size() == original_problem_ptr->get_n_variables(), "size mismatch"); auto has_nans = cuopt::linear_programming::detail::has_nans(handle_ptr, assignment); if (has_nans) { - CUOPT_LOG_DEBUG("Solution discared due to nans"); - return false; - } - - auto has_integrality_discrepancy = cuopt::linear_programming::detail::has_integrality_discrepancy( - handle_ptr, integer_indices, assignment, tolerances.integrality_tolerance); - if (has_integrality_discrepancy) { - CUOPT_LOG_DEBUG("Solution discared due to integrality discrepancy"); - return false; - } - - auto has_variable_bounds_violation = - cuopt::linear_programming::detail::has_variable_bounds_violation(handle_ptr, assignment, this); - if (has_variable_bounds_violation) { - CUOPT_LOG_DEBUG("Solution discared due to variable bounds violation"); + CUOPT_LOG_DEBUG("Solution discarded due to nans"); return false; } + cuopt_assert(assignment.size() == original_problem_ptr->get_n_variables(), "size mismatch"); // create a temp assignment with the var size after bounds standardization (free vars added) rmm::device_uvector temp_assignment(presolve_data.additional_var_used.size(), @@ -630,6 +616,20 @@ bool problem_t::pre_process_assignment(rmm::device_uvector& assig temp_assignment.begin(), assignment.begin()); handle_ptr->sync_stream(); + + auto has_integrality_discrepancy = cuopt::linear_programming::detail::has_integrality_discrepancy( + handle_ptr, integer_indices, assignment, tolerances.integrality_tolerance); + if (has_integrality_discrepancy) { + CUOPT_LOG_DEBUG("Solution discarded due to integrality discrepancy"); + return false; + } + + auto has_variable_bounds_violation = + cuopt::linear_programming::detail::has_variable_bounds_violation(handle_ptr, assignment, this); + if (has_variable_bounds_violation) { + CUOPT_LOG_DEBUG("Solution discarded due to variable bounds violation"); + return false; + } return true; } From 8eff7921bff50fe9986c6915ec390d62e8c5f892 Mon Sep 17 00:00:00 2001 From: Chris Maes Date: Fri, 23 May 2025 02:13:01 -0700 Subject: [PATCH 11/15] Bug fix: solution incorrect when simplex presolve removes empty columns (#29) Fixes an issue reported on the following MPS file, where `_dummy` variable does not appear in the constraints. We remove empty columns (and thus `_dummy`) in presolve for dual simplex. But do not take this into account when constructing the solution. Further work, is needed to develop an actual LP presolve. ``` *SENSE:Minimize NAME test_export_dict_LP_no_obj ROWS N OBJ G c1 E c2 L c3 G c4 COLUMNS __dummy OBJ 1.000000000000e+00 w c4 1.000000000000e+00 x c1 1.000000000000e+00 x c2 1.000000000000e+00 y c1 1.000000000000e+00 y c3 -1.000000000000e+00 z c2 1.000000000000e+00 z c3 1.000000000000e+00 RHS RHS c1 5.000000000000e+00 RHS c2 1.000000000000e+01 RHS c3 7.000000000000e+00 RHS c4 0.000000000000e+00 BOUNDS FX BND __dummy 0.000000000000e+00 FX BND w 0.000000000000e+00 UP BND x 4.000000000000e+00 LO BND y -1.000000000000e+00 UP BND y 1.000000000000e+00 ``` Fixes #13 which was caused by an issue in column scaling when the norm of a column is zero. Authors: - Chris Maes (https://github.com/chris-maes) Approvers: - Rajesh Gandham (https://github.com/rg20) - Nicolas Blin (https://github.com/Kh4ster) URL: https://github.com/NVIDIA/cuopt/pull/29 --- cpp/src/dual_simplex/presolve.cpp | 63 ++++++++++++++- cpp/src/dual_simplex/presolve.hpp | 22 +++++- cpp/src/dual_simplex/scaling.cpp | 24 +++++- cpp/src/dual_simplex/scaling.hpp | 7 ++ cpp/src/dual_simplex/solve.cpp | 13 +-- cpp/tests/dual_simplex/unit_tests/solve.cpp | 87 +++++++++++++++++++++ 6 files changed, 204 insertions(+), 12 deletions(-) diff --git a/cpp/src/dual_simplex/presolve.cpp b/cpp/src/dual_simplex/presolve.cpp index 11b86348a..e87c88b40 100644 --- a/cpp/src/dual_simplex/presolve.cpp +++ b/cpp/src/dual_simplex/presolve.cpp @@ -24,7 +24,9 @@ namespace cuopt::linear_programming::dual_simplex { template -i_t remove_empty_cols(lp_problem_t& problem, i_t& num_empty_cols) +i_t remove_empty_cols(lp_problem_t& problem, + i_t& num_empty_cols, + presolve_info_t& presolve_info) { constexpr bool verbose = false; if (verbose) { printf("Removing %d empty columns\n", num_empty_cols); } @@ -35,15 +37,22 @@ i_t remove_empty_cols(lp_problem_t& problem, i_t& num_empty_cols) // sum_{k != j} c_k * x_k + c_j * l_j if c_j > 0 // or // sum_{k != j} c_k * x_k + c_j * u_j if c_j < 0 + presolve_info.removed_variables.reserve(num_empty_cols); + presolve_info.removed_values.reserve(num_empty_cols); + presolve_info.removed_reduced_costs.reserve(num_empty_cols); std::vector col_marker(problem.num_cols); i_t new_cols = 0; for (i_t j = 0; j < problem.num_cols; ++j) { if ((problem.A.col_start[j + 1] - problem.A.col_start[j]) == 0) { col_marker[j] = 1; + presolve_info.removed_variables.push_back(j); + presolve_info.removed_reduced_costs.push_back(problem.objective[j]); if (problem.objective[j] >= 0) { + presolve_info.removed_values.push_back(problem.lower[j]); problem.obj_constant += problem.objective[j] * problem.lower[j]; assert(problem.lower[j] > -inf); } else { + presolve_info.removed_values.push_back(problem.upper[j]); problem.obj_constant += problem.objective[j] * problem.upper[j]; assert(problem.upper[j] < inf); } @@ -52,6 +61,7 @@ i_t remove_empty_cols(lp_problem_t& problem, i_t& num_empty_cols) new_cols++; } } + presolve_info.remaining_variables.reserve(new_cols); problem.A.remove_columns(col_marker); // Clean up objective, lower, upper, and col_names @@ -66,6 +76,7 @@ i_t remove_empty_cols(lp_problem_t& problem, i_t& num_empty_cols) objective[new_j] = problem.objective[j]; lower[new_j] = problem.lower[j]; upper[new_j] = problem.upper[j]; + presolve_info.remaining_variables.push_back(j); new_j++; } else { num_empty_cols--; @@ -574,7 +585,8 @@ void convert_user_problem(const user_problem_t& user_problem, template i_t presolve(const lp_problem_t& original, const simplex_solver_settings_t& settings, - lp_problem_t& problem) + lp_problem_t& problem, + presolve_info_t& presolve_info) { problem = original; std::vector row_sense(problem.num_rows, '='); @@ -595,6 +607,7 @@ i_t presolve(const lp_problem_t& original, } } if (num_empty_rows > 0) { + settings.log.printf("Presolve removing %d empty rows\n", num_empty_rows); i_t i = remove_empty_rows(problem, row_sense, num_empty_rows); if (i != 0) { return -1; } } @@ -606,7 +619,10 @@ i_t presolve(const lp_problem_t& original, if ((problem.A.col_start[j + 1] - problem.A.col_start[j]) == 0) { num_empty_cols++; } } } - if (num_empty_cols > 0) { remove_empty_cols(problem, num_empty_cols); } + if (num_empty_cols > 0) { + settings.log.printf("Presolve removing %d empty cols\n", num_empty_cols); + remove_empty_cols(problem, num_empty_cols, presolve_info); + } // Check for dependent rows constexpr bool check_dependent_rows = false; @@ -826,6 +842,38 @@ void uncrush_primal_solution(const user_problem_t& user_problem, std::copy(solution.begin(), solution.begin() + user_problem.num_cols, user_solution.data()); } +template +void uncrush_solution(const presolve_info_t& presolve_info, + const std::vector& crushed_x, + const std::vector& crushed_z, + std::vector& uncrushed_x, + std::vector& uncrushed_z) +{ + if (presolve_info.removed_variables.size() == 0) { + uncrushed_x = crushed_x; + uncrushed_z = crushed_z; + return; + } + + const i_t n = presolve_info.removed_variables.size() + presolve_info.remaining_variables.size(); + uncrushed_x.resize(n); + uncrushed_z.resize(n); + + i_t k = 0; + for (const i_t j : presolve_info.remaining_variables) { + uncrushed_x[j] = crushed_x[k]; + uncrushed_z[j] = crushed_z[k]; + k++; + } + + k = 0; + for (const i_t j : presolve_info.removed_variables) { + uncrushed_x[j] = presolve_info.removed_values[k]; + uncrushed_z[j] = presolve_info.removed_reduced_costs[k]; + k++; + } +} + #ifdef DUAL_SIMPLEX_INSTANTIATE_DOUBLE template void convert_user_problem(const user_problem_t& user_problem, @@ -841,7 +889,9 @@ template void convert_user_lp_with_guess( template int presolve(const lp_problem_t& original, const simplex_solver_settings_t& settings, - lp_problem_t& presolved); + lp_problem_t& presolved, + presolve_info_t& presolve_info); + template void crush_primal_solution(const user_problem_t& user_problem, const lp_problem_t& problem, const std::vector& user_solution, @@ -853,6 +903,11 @@ template void uncrush_primal_solution(const user_problem_t& solution, std::vector& user_solution); +template void uncrush_solution(const presolve_info_t& presolve_info, + const std::vector& crushed_x, + const std::vector& crushed_z, + std::vector& uncrushed_x, + std::vector& uncrushed_z); #endif } // namespace cuopt::linear_programming::dual_simplex diff --git a/cpp/src/dual_simplex/presolve.hpp b/cpp/src/dual_simplex/presolve.hpp index 4b877caef..e6eb542ac 100644 --- a/cpp/src/dual_simplex/presolve.hpp +++ b/cpp/src/dual_simplex/presolve.hpp @@ -49,6 +49,18 @@ struct lp_problem_t { f_t obj_scale; // 1.0 for min, -1.0 for max }; +template +struct presolve_info_t { + // indices of variables in the original problem that remain in the presolved problem + std::vector remaining_variables; + // indicies of variables in the original problem that have been removed in the presolved problem + std::vector removed_variables; + // values of the removed variables + std::vector removed_values; + // values of the removed reduced costs + std::vector removed_reduced_costs; +}; + template void convert_user_problem(const user_problem_t& user_problem, lp_problem_t& problem, @@ -70,7 +82,8 @@ void convert_user_lp_with_guess(const user_problem_t& user_problem, template i_t presolve(const lp_problem_t& original, const simplex_solver_settings_t& settings, - lp_problem_t& presolved); + lp_problem_t& presolved, + presolve_info_t& presolve_info); template void crush_primal_solution(const user_problem_t& user_problem, @@ -102,4 +115,11 @@ void uncrush_primal_solution(const user_problem_t& user_problem, const std::vector& solution, std::vector& user_solution); +template +void uncrush_solution(const presolve_info_t& presolve_info, + const std::vector& crushed_x, + const std::vector& crushed_z, + std::vector& uncrushed_x, + std::vector& uncrushed_z); + } // namespace cuopt::linear_programming::dual_simplex diff --git a/cpp/src/dual_simplex/scaling.cpp b/cpp/src/dual_simplex/scaling.cpp index bc33a58e1..3a19ec613 100644 --- a/cpp/src/dual_simplex/scaling.cpp +++ b/cpp/src/dual_simplex/scaling.cpp @@ -48,7 +48,7 @@ i_t column_scaling(const lp_problem_t& unscaled, const f_t x = scaled.A.x[p]; sum += x * x; } - f_t col_norm_j = column_scaling[j] = std::sqrt(sum); + f_t col_norm_j = column_scaling[j] = sum > 0 ? std::sqrt(sum) : 1.0; max = std::max(col_norm_j, max); } settings.log.printf("Scaling matrix. Maximum column norm %e\n", max); @@ -76,6 +76,22 @@ i_t column_scaling(const lp_problem_t& unscaled, return 0; } +template +void unscale_solution(const std::vector& column_scaling, + const std::vector& scaled_x, + const std::vector& scaled_z, + std::vector& unscaled_x, + std::vector& unscaled_z) +{ + const i_t n = scaled_x.size(); + unscaled_x.resize(n); + unscaled_z.resize(n); + for (i_t j = 0; j < n; ++j) { + unscaled_x[j] = scaled_x[j] / column_scaling[j]; + unscaled_z[j] = scaled_z[j] / column_scaling[j]; + } +} + #ifdef DUAL_SIMPLEX_INSTANTIATE_DOUBLE template int column_scaling(const lp_problem_t& unscaled, @@ -83,6 +99,12 @@ template int column_scaling(const lp_problem_t& unscal lp_problem_t& scaled, std::vector& column_scaling); +template void unscale_solution(const std::vector& column_scaling, + const std::vector& scaled_x, + const std::vector& scaled_z, + std::vector& unscaled_x, + std::vector& unscaled_z); + #endif } // namespace cuopt::linear_programming::dual_simplex diff --git a/cpp/src/dual_simplex/scaling.hpp b/cpp/src/dual_simplex/scaling.hpp index 09f463080..898a001c6 100644 --- a/cpp/src/dual_simplex/scaling.hpp +++ b/cpp/src/dual_simplex/scaling.hpp @@ -32,4 +32,11 @@ i_t column_scaling(const lp_problem_t& unscaled, lp_problem_t& scaled, std::vector& column_scaling); +template +void unscale_solution(const std::vector& column_scaling, + const std::vector& scaled_x, + const std::vector& scaled_z, + std::vector& unscaled_x, + std::vector& unscaled_z); + } // namespace cuopt::linear_programming::dual_simplex diff --git a/cpp/src/dual_simplex/solve.cpp b/cpp/src/dual_simplex/solve.cpp index 05c1512fa..11a0f6d42 100644 --- a/cpp/src/dual_simplex/solve.cpp +++ b/cpp/src/dual_simplex/solve.cpp @@ -117,7 +117,8 @@ lp_status_t solve_linear_program_advanced(const lp_problem_t& original { lp_status_t lp_status = lp_status_t::UNSET; lp_problem_t presolved_lp(1, 1, 1); - const i_t ok = presolve(original_lp, settings, presolved_lp); + presolve_info_t presolve_info; + const i_t ok = presolve(original_lp, settings, presolved_lp, presolve_info); if (ok == -1) { return lp_status_t::INFEASIBLE; } constexpr bool write_out_matlab = false; @@ -199,11 +200,11 @@ lp_status_t solve_linear_program_advanced(const lp_problem_t& original primal_phase2(2, start_time, lp, settings, vstatus, solution, iter); } if (status == dual::status_t::OPTIMAL) { - // Unscale solution - for (i_t j = 0; j < original_lp.num_cols; j++) { - original_solution.x[j] = solution.x[j] / column_scales[j]; - original_solution.z[j] = solution.z[j] / column_scales[j]; - } + std::vector unscaled_x(lp.num_cols); + std::vector unscaled_z(lp.num_cols); + unscale_solution(column_scales, solution.x, solution.z, unscaled_x, unscaled_z); + uncrush_solution( + presolve_info, unscaled_x, unscaled_z, original_solution.x, original_solution.z); original_solution.y = solution.y; original_solution.objective = solution.objective; original_solution.user_objective = solution.user_objective; diff --git a/cpp/tests/dual_simplex/unit_tests/solve.cpp b/cpp/tests/dual_simplex/unit_tests/solve.cpp index 9664e0ac7..3fbfc3766 100644 --- a/cpp/tests/dual_simplex/unit_tests/solve.cpp +++ b/cpp/tests/dual_simplex/unit_tests/solve.cpp @@ -175,4 +175,91 @@ TEST(dual_simplex, burglar) EXPECT_NEAR(solution[5], 1, 1e-6); } +TEST(dual_simplex, empty_columns) +{ + // Same as burglar problem above but with an empty column inserted + constexpr int num_items = 9; + constexpr double max_weight = 102; + + std::vector value({15, 100, 90, 0, 60, 40, 15, 10, 1}); + std::vector weight({2, 20, 20, 0, 30, 40, 30, 60, 10}); + + // maximize sum_i value[i] * take[i] + // sum_i weight[i] * take[i] <= max_weight + // take[i] binary for all i + + cuopt::linear_programming::dual_simplex::user_problem_t user_problem; + constexpr int m = 1; + constexpr int n = num_items; + constexpr int nz = num_items - 1; + + user_problem.num_rows = m; + user_problem.num_cols = n; + user_problem.objective.resize(n); + for (int j = 0; j < num_items; ++j) { + user_problem.objective[j] = -value[j]; + } + user_problem.A.m = m; + user_problem.A.n = n; + user_problem.A.nz_max = nz; + user_problem.A.reallocate(nz); + user_problem.A.col_start.resize(n + 1); + int nnz = 0; + for (int j = 0; j < num_items; ++j) { + user_problem.A.col_start[j] = nnz; + if (weight[j] > 0) { + user_problem.A.i[nnz] = 0; + user_problem.A.x[nnz] = weight[j]; + nnz++; + } + } + user_problem.A.col_start[n] = nnz; + user_problem.rhs.resize(m); + user_problem.rhs[0] = max_weight; + user_problem.row_sense.resize(m); + user_problem.row_sense[0] = 'L'; + user_problem.lower.resize(n); + user_problem.upper.resize(n); + for (int j = 0; j < num_items; ++j) { + user_problem.lower[j] = 0.0; + user_problem.upper[j] = 1.0; + } + user_problem.num_range_rows = 0; + user_problem.problem_name = "burglar"; + user_problem.row_names.resize(m); + user_problem.row_names[0] = "weight restriction"; + user_problem.col_names.resize(n); + for (int j = 0; j < num_items; ++j) { + user_problem.col_names[j] = "x"; + } + user_problem.obj_constant = 0.0; + user_problem.var_types.resize(n); + for (int j = 0; j < num_items; ++j) { + user_problem.var_types[j] = + cuopt::linear_programming::dual_simplex::variable_type_t::CONTINUOUS; + } + + cuopt::linear_programming::dual_simplex::simplex_solver_settings_t settings; + + cuopt::linear_programming::dual_simplex::lp_solution_t solution( + user_problem.num_rows, user_problem.num_cols); + EXPECT_EQ((cuopt::linear_programming::dual_simplex::solve_linear_program( + user_problem, settings, solution)), + cuopt::linear_programming::dual_simplex::lp_status_t::OPTIMAL); + double objective = 0.0; + for (int j = 0; j < num_items; ++j) { + objective += value[j] * solution.x[j]; + } + EXPECT_NEAR(objective, 295, 1e-6); + EXPECT_NEAR(solution.x[0], 1, 1e-6); + EXPECT_NEAR(solution.x[1], 1, 1e-6); + EXPECT_NEAR(solution.x[2], 1, 1e-6); + EXPECT_NEAR(solution.x[3], 0, 1e-6); + EXPECT_NEAR(solution.x[4], 1, 1e-6); + EXPECT_NEAR(solution.x[5], 0.75, 1e-6); + EXPECT_NEAR(solution.x[6], 0, 1e-6); + EXPECT_NEAR(solution.x[7], 0, 1e-6); + EXPECT_NEAR(solution.x[8], 0, 1e-6); +} + } // namespace cuopt::linear_programming::dual_simplex::test From d50c8a96ea04ab3d6031718fdb3942155eee1f9e Mon Sep 17 00:00:00 2001 From: Alice Boucher <160623740+aliceb-nv@users.noreply.github.com> Date: Fri, 23 May 2025 13:00:40 +0200 Subject: [PATCH 12/15] Fix non-trivial presolve not reporting Optimality (#26) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The non-trivial presolve did not report optimality if the problem was fully reduced. Fixed by this PR Closes https://github.com/rapidsai/cuopt/issues/2507 Authors: - Alice Boucher (https://github.com/aliceb-nv) Approvers: - Chris Maes (https://github.com/chris-maes) - Akif ÇÖRDÜK (https://github.com/akifcorduk) URL: https://github.com/NVIDIA/cuopt/pull/26 --- cpp/src/mip/solution/solution.cu | 23 +- cpp/src/mip/solution/solution.cuh | 10 +- cpp/src/mip/solve.cu | 10 - cpp/src/mip/solver.cu | 12 +- cpp/tests/mip/termination_test.cu | 15 + datasets/mip/sudoku.mps | 5848 ++++++++++++++++++ datasets/mip/trivial-presolve-optimality.mps | 16 + 7 files changed, 5906 insertions(+), 28 deletions(-) create mode 100755 datasets/mip/sudoku.mps create mode 100644 datasets/mip/trivial-presolve-optimality.mps diff --git a/cpp/src/mip/solution/solution.cu b/cpp/src/mip/solution/solution.cu index b72e67d6b..05309fb3a 100644 --- a/cpp/src/mip/solution/solution.cu +++ b/cpp/src/mip/solution/solution.cu @@ -68,7 +68,9 @@ solution_t::solution_t(const solution_t& other) h_user_obj(other.h_user_obj), h_infeasibility_cost(other.h_infeasibility_cost), is_feasible(other.is_feasible), + is_problem_fully_reduced(other.is_problem_fully_reduced), is_scaled_(other.is_scaled_), + post_process_completed(other.post_process_completed), lp_state(other.lp_state) { } @@ -94,8 +96,10 @@ void solution_t::copy_from(const solution_t& other_sol) other_sol.n_feasible_constraints.data(), 1, handle_ptr->get_stream()); - is_feasible = other_sol.is_feasible; - is_scaled_ = other_sol.is_scaled_; + is_feasible = other_sol.is_feasible; + is_problem_fully_reduced = other_sol.is_problem_fully_reduced; + is_scaled_ = other_sol.is_scaled_; + post_process_completed = other_sol.post_process_completed; expand_device_copy( lp_state.prev_primal, other_sol.lp_state.prev_primal, handle_ptr->get_stream()); expand_device_copy(lp_state.prev_dual, other_sol.lp_state.prev_dual, handle_ptr->get_stream()); @@ -183,15 +187,15 @@ bool solution_t::get_feasible() } template -bool solution_t::get_problem_infeasible() +bool solution_t::get_problem_fully_reduced() { - return is_problem_infeasible; + return is_problem_fully_reduced; } template -void solution_t::set_problem_infeasible() +void solution_t::set_problem_fully_reduced() { - is_problem_infeasible = true; + is_problem_fully_reduced = true; } template @@ -267,6 +271,8 @@ void solution_t::set_vars_to_values( template void solution_t::compute_constraints() { + if (problem_ptr->n_constraints == 0) { return; } + i_t TPB = 64; compute_constraint_values <<n_constraints, TPB, 0, handle_ptr->get_stream()>>>(view()); @@ -587,6 +593,7 @@ mip_solution_t solution_t::get_solution(bool output_feasible const double optimality_threshold = problem_ptr->tolerances.relative_mip_gap; auto term_reason = rel_mip_gap > optimality_threshold ? mip_termination_status_t::FeasibleFound : mip_termination_status_t::Optimal; + if (is_problem_fully_reduced) { term_reason = mip_termination_status_t::Optimal; } return mip_solution_t(std::move(assignment), problem_ptr->var_names, h_user_obj, @@ -601,8 +608,8 @@ mip_solution_t solution_t::get_solution(bool output_feasible num_nodes, num_simplex_iterations); } else { - return mip_solution_t{is_problem_infeasible ? mip_termination_status_t::Infeasible - : mip_termination_status_t::TimeLimit, + return mip_solution_t{is_problem_fully_reduced ? mip_termination_status_t::Infeasible + : mip_termination_status_t::TimeLimit, handle_ptr->get_stream()}; } } diff --git a/cpp/src/mip/solution/solution.cuh b/cpp/src/mip/solution/solution.cuh index f1cb930db..fc139fb31 100644 --- a/cpp/src/mip/solution/solution.cuh +++ b/cpp/src/mip/solution/solution.cuh @@ -72,10 +72,10 @@ class solution_t { void set_infeasible(); // gets the is_feasible bool get_feasible(); - // gets the is_problem_infeasible - bool get_problem_infeasible(); - // sets the is_problem_infeasible flag to 1 - void set_problem_infeasible(); + // gets the is_problem_fully_reduced + bool get_problem_fully_reduced(); + // sets the is_problem_fully_reduced flag to 1 + void set_problem_fully_reduced(); // computes the number of integral variables that have integral value i_t compute_number_of_integers(); // computes the l2 residual value from the excess values @@ -148,7 +148,7 @@ class solution_t { f_t h_user_obj = 0.; f_t h_infeasibility_cost = 0.; bool is_feasible = false; - bool is_problem_infeasible{false}; + bool is_problem_fully_reduced{false}; bool is_scaled_{false}; bool post_process_completed{false}; lp_state_t lp_state; diff --git a/cpp/src/mip/solve.cu b/cpp/src/mip/solve.cu index d8fbd03e9..ca1045a19 100644 --- a/cpp/src/mip/solve.cu +++ b/cpp/src/mip/solve.cu @@ -136,16 +136,6 @@ mip_solution_t run_mip(detail::problem_t& problem, "please provide a more numerically stable problem."); } - // If the trivial presolve fully reduced the problem: - if (scaled_problem.empty) { - detail::solution_t fixed_assignment_solution(problem); - if (fixed_assignment_solution.compute_feasibility()) { - solver.get_solver_stats().solution_bound = scaled_sol.get_user_objective(); - } else { - scaled_sol.set_problem_infeasible(); - } - } - auto sol = scaled_sol.get_solution(is_feasible_before_scaling || is_feasible_after_unscaling, solver.get_solver_stats()); detail::print_solution(scaled_problem.handle_ptr, sol.get_solution()); diff --git a/cpp/src/mip/solver.cu b/cpp/src/mip/solver.cu index 24cdc7d1d..13690423e 100644 --- a/cpp/src/mip/solver.cu +++ b/cpp/src/mip/solver.cu @@ -96,8 +96,9 @@ solution_t mip_solver_t::run_solver() "preprocess_problem should be called before running the solver"); if (context.problem_ptr->empty) { - CUOPT_LOG_INFO("Problem fully reduced at trivial presolve"); + CUOPT_LOG_INFO("Problem fully reduced in presolve"); solution_t sol(*context.problem_ptr); + sol.set_problem_fully_reduced(); context.problem_ptr->post_process_solution(sol); return sol; } @@ -106,15 +107,16 @@ solution_t mip_solver_t::run_solver() dm.timer = timer_; bool presolve_success = dm.run_presolve(timer_.remaining_time()); if (!presolve_success) { - CUOPT_LOG_INFO("Presolve is infeasible, returning infeasible solution!"); + CUOPT_LOG_INFO("Problem proven infeasible in presolve"); solution_t sol(*context.problem_ptr); - sol.set_problem_infeasible(); + sol.set_problem_fully_reduced(); context.problem_ptr->post_process_solution(sol); return sol; } if (context.problem_ptr->empty) { - CUOPT_LOG_INFO("Problem fully reduced at presolve"); + CUOPT_LOG_INFO("Problem full reduced in presolve"); solution_t sol(*context.problem_ptr); + sol.set_problem_fully_reduced(); context.problem_ptr->post_process_solution(sol); return sol; } @@ -182,7 +184,7 @@ solution_t mip_solver_t::run_solver() context.stats.solution_bound = context.problem_ptr->get_user_obj_from_solver_obj(branch_and_bound_solution.lower_bound); } - if (bb_status == dual_simplex::mip_status_t::INFEASIBLE) { sol.set_problem_infeasible(); } + if (bb_status == dual_simplex::mip_status_t::INFEASIBLE) { sol.set_problem_fully_reduced(); } context.stats.num_nodes = branch_and_bound_solution.nodes_explored; context.stats.num_simplex_iterations = branch_and_bound_solution.simplex_iterations; } diff --git a/cpp/tests/mip/termination_test.cu b/cpp/tests/mip/termination_test.cu index f69eaa535..6a8c4b6fd 100644 --- a/cpp/tests/mip/termination_test.cu +++ b/cpp/tests/mip/termination_test.cu @@ -62,6 +62,20 @@ static std::pair test_mps_file(std::string tes return std::make_pair(solution.get_termination_status(), solution.get_objective_value()); } +TEST(termination_status, trivial_presolve_optimality_test) +{ + auto [termination_status, obj_val] = test_mps_file("mip/trivial-presolve-optimality.mps"); + EXPECT_EQ(termination_status, mip_termination_status_t::Optimal); + EXPECT_EQ(obj_val, -1); +} + +TEST(termination_status, presolve_optimality_test) +{ + auto [termination_status, obj_val] = test_mps_file("mip/sudoku.mps"); + EXPECT_EQ(termination_status, mip_termination_status_t::Optimal); + EXPECT_EQ(obj_val, 0); +} + TEST(termination_status, presolve_infeasible_test) { auto [termination_status, obj_val] = test_mps_file("mip/presolve-infeasible.mps"); @@ -84,6 +98,7 @@ TEST(termination_status, optimality_test) { auto [termination_status, obj_val] = test_mps_file("mip/bb_optimality.mps", false); EXPECT_EQ(termination_status, mip_termination_status_t::Optimal); + EXPECT_EQ(obj_val, 2); } TEST(termination_status, bb_infeasible_test) diff --git a/datasets/mip/sudoku.mps b/datasets/mip/sudoku.mps new file mode 100755 index 000000000..b8a0ed3a3 --- /dev/null +++ b/datasets/mip/sudoku.mps @@ -0,0 +1,5848 @@ +*SENSE:Minimize +NAME Sudoku_Problem +ROWS + N OBJ + E _C1 + E _C2 + E _C3 + E _C4 + E _C5 + E _C6 + E _C7 + E _C8 + E _C9 + E _C10 + E _C11 + E _C12 + E _C13 + E _C14 + E _C15 + E _C16 + E _C17 + E _C18 + E _C19 + E _C20 + E _C21 + E _C22 + E _C23 + E _C24 + E _C25 + E _C26 + E _C27 + E _C28 + E _C29 + E _C30 + E _C31 + E _C32 + E _C33 + E _C34 + E _C35 + E _C36 + E _C37 + E _C38 + E _C39 + E _C40 + E _C41 + E _C42 + E _C43 + E _C44 + E _C45 + E _C46 + E _C47 + E _C48 + E _C49 + E _C50 + E _C51 + E _C52 + E _C53 + E _C54 + E _C55 + E _C56 + E _C57 + E _C58 + E _C59 + E _C60 + E _C61 + E _C62 + E _C63 + E _C64 + E _C65 + E _C66 + E _C67 + E _C68 + E _C69 + E _C70 + E _C71 + E _C72 + E _C73 + E _C74 + E _C75 + E _C76 + E _C77 + E _C78 + E _C79 + E _C80 + E _C81 + E _C82 + E _C83 + E _C84 + E _C85 + E _C86 + E _C87 + E _C88 + E _C89 + E _C90 + E _C91 + E _C92 + E _C93 + E _C94 + E _C95 + E _C96 + E _C97 + E _C98 + E _C99 + E _C100 + E _C101 + E _C102 + E _C103 + E _C104 + E _C105 + E _C106 + E _C107 + E _C108 + E _C109 + E _C110 + E _C111 + E _C112 + E _C113 + E _C114 + E _C115 + E _C116 + E _C117 + E _C118 + E _C119 + E _C120 + E _C121 + E _C122 + E _C123 + E _C124 + E _C125 + E _C126 + E _C127 + E _C128 + E _C129 + E _C130 + E _C131 + E _C132 + E _C133 + E _C134 + E _C135 + E _C136 + E _C137 + E _C138 + E _C139 + E _C140 + E _C141 + E _C142 + E _C143 + E _C144 + E _C145 + E _C146 + E _C147 + E _C148 + E _C149 + E _C150 + E _C151 + E _C152 + E _C153 + E _C154 + E _C155 + E _C156 + E _C157 + E _C158 + E _C159 + E _C160 + E _C161 + E _C162 + E _C163 + E _C164 + E _C165 + E _C166 + E _C167 + E _C168 + E _C169 + E _C170 + E _C171 + E _C172 + E _C173 + E _C174 + E _C175 + E _C176 + E _C177 + E _C178 + E _C179 + E _C180 + E _C181 + E _C182 + E _C183 + E _C184 + E _C185 + E _C186 + E _C187 + E _C188 + E _C189 + E _C190 + E _C191 + E _C192 + E _C193 + E _C194 + E _C195 + E _C196 + E _C197 + E _C198 + E _C199 + E _C200 + E _C201 + E _C202 + E _C203 + E _C204 + E _C205 + E _C206 + E _C207 + E _C208 + E _C209 + E _C210 + E _C211 + E _C212 + E _C213 + E _C214 + E _C215 + E _C216 + E _C217 + E _C218 + E _C219 + E _C220 + E _C221 + E _C222 + E _C223 + E _C224 + E _C225 + E _C226 + E _C227 + E _C228 + E _C229 + E _C230 + E _C231 + E _C232 + E _C233 + E _C234 + E _C235 + E _C236 + E _C237 + E _C238 + E _C239 + E _C240 + E _C241 + E _C242 + E _C243 + E _C244 + E _C245 + E _C246 + E _C247 + E _C248 + E _C249 + E _C250 + E _C251 + E _C252 + E _C253 + E _C254 + E _C255 + E _C256 + E _C257 + E _C258 + E _C259 + E _C260 + E _C261 + E _C262 + E _C263 + E _C264 + E _C265 + E _C266 + E _C267 + E _C268 + E _C269 + E _C270 + E _C271 + E _C272 + E _C273 + E _C274 + E _C275 + E _C276 + E _C277 + E _C278 + E _C279 + E _C280 + E _C281 + E _C282 + E _C283 + E _C284 + E _C285 + E _C286 + E _C287 + E _C288 + E _C289 + E _C290 + E _C291 + E _C292 + E _C293 + E _C294 + E _C295 + E _C296 + E _C297 + E _C298 + E _C299 + E _C300 + E _C301 + E _C302 + E _C303 + E _C304 + E _C305 + E _C306 + E _C307 + E _C308 + E _C309 + E _C310 + E _C311 + E _C312 + E _C313 + E _C314 + E _C315 + E _C316 + E _C317 + E _C318 + E _C319 + E _C320 + E _C321 + E _C322 + E _C323 + E _C324 + E _C325 + E _C326 + E _C327 + E _C328 + E _C329 + E _C330 + E _C331 + E _C332 + E _C333 + E _C334 + E _C335 + E _C336 + E _C337 + E _C338 + E _C339 + E _C340 + E _C341 + E _C342 + E _C343 + E _C344 + E _C345 + E _C346 + E _C347 + E _C348 + E _C349 + E _C350 + E _C351 + E _C352 + E _C353 +COLUMNS + MARK 'MARKER' 'INTORG' + Choice_1_1_1 _C1 1.000000000000e+00 + Choice_1_1_1 _C82 1.000000000000e+00 + Choice_1_1_1 _C91 1.000000000000e+00 + Choice_1_1_1 _C100 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_1_1_2 _C2 1.000000000000e+00 + Choice_1_1_2 _C82 1.000000000000e+00 + Choice_1_1_2 _C92 1.000000000000e+00 + Choice_1_1_2 _C100 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_1_1_3 _C3 1.000000000000e+00 + Choice_1_1_3 _C82 1.000000000000e+00 + Choice_1_1_3 _C93 1.000000000000e+00 + Choice_1_1_3 _C100 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_1_1_4 _C4 1.000000000000e+00 + Choice_1_1_4 _C82 1.000000000000e+00 + Choice_1_1_4 _C94 1.000000000000e+00 + Choice_1_1_4 _C101 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_1_1_5 _C5 1.000000000000e+00 + Choice_1_1_5 _C82 1.000000000000e+00 + Choice_1_1_5 _C95 1.000000000000e+00 + Choice_1_1_5 _C101 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_1_1_6 _C6 1.000000000000e+00 + Choice_1_1_6 _C82 1.000000000000e+00 + Choice_1_1_6 _C96 1.000000000000e+00 + Choice_1_1_6 _C101 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_1_1_7 _C7 1.000000000000e+00 + Choice_1_1_7 _C82 1.000000000000e+00 + Choice_1_1_7 _C97 1.000000000000e+00 + Choice_1_1_7 _C102 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_1_1_8 _C8 1.000000000000e+00 + Choice_1_1_8 _C82 1.000000000000e+00 + Choice_1_1_8 _C98 1.000000000000e+00 + Choice_1_1_8 _C102 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_1_1_9 _C9 1.000000000000e+00 + Choice_1_1_9 _C82 1.000000000000e+00 + Choice_1_1_9 _C99 1.000000000000e+00 + Choice_1_1_9 _C102 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_1_2_1 _C10 1.000000000000e+00 + Choice_1_2_1 _C83 1.000000000000e+00 + Choice_1_2_1 _C91 1.000000000000e+00 + Choice_1_2_1 _C100 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_1_2_2 _C11 1.000000000000e+00 + Choice_1_2_2 _C83 1.000000000000e+00 + Choice_1_2_2 _C92 1.000000000000e+00 + Choice_1_2_2 _C100 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_1_2_3 _C12 1.000000000000e+00 + Choice_1_2_3 _C83 1.000000000000e+00 + Choice_1_2_3 _C93 1.000000000000e+00 + Choice_1_2_3 _C100 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_1_2_4 _C13 1.000000000000e+00 + Choice_1_2_4 _C83 1.000000000000e+00 + Choice_1_2_4 _C94 1.000000000000e+00 + Choice_1_2_4 _C101 1.000000000000e+00 + Choice_1_2_4 _C334 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_1_2_5 _C14 1.000000000000e+00 + Choice_1_2_5 _C83 1.000000000000e+00 + Choice_1_2_5 _C95 1.000000000000e+00 + Choice_1_2_5 _C101 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_1_2_6 _C15 1.000000000000e+00 + Choice_1_2_6 _C83 1.000000000000e+00 + Choice_1_2_6 _C96 1.000000000000e+00 + Choice_1_2_6 _C101 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_1_2_7 _C16 1.000000000000e+00 + Choice_1_2_7 _C83 1.000000000000e+00 + Choice_1_2_7 _C97 1.000000000000e+00 + Choice_1_2_7 _C102 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_1_2_8 _C17 1.000000000000e+00 + Choice_1_2_8 _C83 1.000000000000e+00 + Choice_1_2_8 _C98 1.000000000000e+00 + Choice_1_2_8 _C102 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_1_2_9 _C18 1.000000000000e+00 + Choice_1_2_9 _C83 1.000000000000e+00 + Choice_1_2_9 _C99 1.000000000000e+00 + Choice_1_2_9 _C102 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_1_3_1 _C19 1.000000000000e+00 + Choice_1_3_1 _C84 1.000000000000e+00 + Choice_1_3_1 _C91 1.000000000000e+00 + Choice_1_3_1 _C100 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_1_3_2 _C20 1.000000000000e+00 + Choice_1_3_2 _C84 1.000000000000e+00 + Choice_1_3_2 _C92 1.000000000000e+00 + Choice_1_3_2 _C100 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_1_3_3 _C21 1.000000000000e+00 + Choice_1_3_3 _C84 1.000000000000e+00 + Choice_1_3_3 _C93 1.000000000000e+00 + Choice_1_3_3 _C100 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_1_3_4 _C22 1.000000000000e+00 + Choice_1_3_4 _C84 1.000000000000e+00 + Choice_1_3_4 _C94 1.000000000000e+00 + Choice_1_3_4 _C101 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_1_3_5 _C23 1.000000000000e+00 + Choice_1_3_5 _C84 1.000000000000e+00 + Choice_1_3_5 _C95 1.000000000000e+00 + Choice_1_3_5 _C101 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_1_3_6 _C24 1.000000000000e+00 + Choice_1_3_6 _C84 1.000000000000e+00 + Choice_1_3_6 _C96 1.000000000000e+00 + Choice_1_3_6 _C101 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_1_3_7 _C25 1.000000000000e+00 + Choice_1_3_7 _C84 1.000000000000e+00 + Choice_1_3_7 _C97 1.000000000000e+00 + Choice_1_3_7 _C102 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_1_3_8 _C26 1.000000000000e+00 + Choice_1_3_8 _C84 1.000000000000e+00 + Choice_1_3_8 _C98 1.000000000000e+00 + Choice_1_3_8 _C102 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_1_3_9 _C27 1.000000000000e+00 + Choice_1_3_9 _C84 1.000000000000e+00 + Choice_1_3_9 _C99 1.000000000000e+00 + Choice_1_3_9 _C102 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_1_4_1 _C28 1.000000000000e+00 + Choice_1_4_1 _C85 1.000000000000e+00 + Choice_1_4_1 _C91 1.000000000000e+00 + Choice_1_4_1 _C103 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_1_4_2 _C29 1.000000000000e+00 + Choice_1_4_2 _C85 1.000000000000e+00 + Choice_1_4_2 _C92 1.000000000000e+00 + Choice_1_4_2 _C103 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_1_4_3 _C30 1.000000000000e+00 + Choice_1_4_3 _C85 1.000000000000e+00 + Choice_1_4_3 _C93 1.000000000000e+00 + Choice_1_4_3 _C103 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_1_4_4 _C31 1.000000000000e+00 + Choice_1_4_4 _C85 1.000000000000e+00 + Choice_1_4_4 _C94 1.000000000000e+00 + Choice_1_4_4 _C104 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_1_4_5 _C32 1.000000000000e+00 + Choice_1_4_5 _C85 1.000000000000e+00 + Choice_1_4_5 _C95 1.000000000000e+00 + Choice_1_4_5 _C104 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_1_4_6 _C33 1.000000000000e+00 + Choice_1_4_6 _C85 1.000000000000e+00 + Choice_1_4_6 _C96 1.000000000000e+00 + Choice_1_4_6 _C104 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_1_4_7 _C34 1.000000000000e+00 + Choice_1_4_7 _C85 1.000000000000e+00 + Choice_1_4_7 _C97 1.000000000000e+00 + Choice_1_4_7 _C105 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_1_4_8 _C35 1.000000000000e+00 + Choice_1_4_8 _C85 1.000000000000e+00 + Choice_1_4_8 _C98 1.000000000000e+00 + Choice_1_4_8 _C105 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_1_4_9 _C36 1.000000000000e+00 + Choice_1_4_9 _C85 1.000000000000e+00 + Choice_1_4_9 _C99 1.000000000000e+00 + Choice_1_4_9 _C105 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_1_5_1 _C37 1.000000000000e+00 + Choice_1_5_1 _C86 1.000000000000e+00 + Choice_1_5_1 _C91 1.000000000000e+00 + Choice_1_5_1 _C103 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_1_5_2 _C38 1.000000000000e+00 + Choice_1_5_2 _C86 1.000000000000e+00 + Choice_1_5_2 _C92 1.000000000000e+00 + Choice_1_5_2 _C103 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_1_5_3 _C39 1.000000000000e+00 + Choice_1_5_3 _C86 1.000000000000e+00 + Choice_1_5_3 _C93 1.000000000000e+00 + Choice_1_5_3 _C103 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_1_5_4 _C40 1.000000000000e+00 + Choice_1_5_4 _C86 1.000000000000e+00 + Choice_1_5_4 _C94 1.000000000000e+00 + Choice_1_5_4 _C104 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_1_5_5 _C41 1.000000000000e+00 + Choice_1_5_5 _C86 1.000000000000e+00 + Choice_1_5_5 _C95 1.000000000000e+00 + Choice_1_5_5 _C104 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_1_5_6 _C42 1.000000000000e+00 + Choice_1_5_6 _C86 1.000000000000e+00 + Choice_1_5_6 _C96 1.000000000000e+00 + Choice_1_5_6 _C104 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_1_5_7 _C43 1.000000000000e+00 + Choice_1_5_7 _C86 1.000000000000e+00 + Choice_1_5_7 _C97 1.000000000000e+00 + Choice_1_5_7 _C105 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_1_5_8 _C44 1.000000000000e+00 + Choice_1_5_8 _C86 1.000000000000e+00 + Choice_1_5_8 _C98 1.000000000000e+00 + Choice_1_5_8 _C105 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_1_5_9 _C45 1.000000000000e+00 + Choice_1_5_9 _C86 1.000000000000e+00 + Choice_1_5_9 _C99 1.000000000000e+00 + Choice_1_5_9 _C105 1.000000000000e+00 + Choice_1_5_9 _C351 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_1_6_1 _C46 1.000000000000e+00 + Choice_1_6_1 _C87 1.000000000000e+00 + Choice_1_6_1 _C91 1.000000000000e+00 + Choice_1_6_1 _C103 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_1_6_2 _C47 1.000000000000e+00 + Choice_1_6_2 _C87 1.000000000000e+00 + Choice_1_6_2 _C92 1.000000000000e+00 + Choice_1_6_2 _C103 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_1_6_3 _C48 1.000000000000e+00 + Choice_1_6_3 _C87 1.000000000000e+00 + Choice_1_6_3 _C93 1.000000000000e+00 + Choice_1_6_3 _C103 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_1_6_4 _C49 1.000000000000e+00 + Choice_1_6_4 _C87 1.000000000000e+00 + Choice_1_6_4 _C94 1.000000000000e+00 + Choice_1_6_4 _C104 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_1_6_5 _C50 1.000000000000e+00 + Choice_1_6_5 _C87 1.000000000000e+00 + Choice_1_6_5 _C95 1.000000000000e+00 + Choice_1_6_5 _C104 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_1_6_6 _C51 1.000000000000e+00 + Choice_1_6_6 _C87 1.000000000000e+00 + Choice_1_6_6 _C96 1.000000000000e+00 + Choice_1_6_6 _C104 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_1_6_7 _C52 1.000000000000e+00 + Choice_1_6_7 _C87 1.000000000000e+00 + Choice_1_6_7 _C97 1.000000000000e+00 + Choice_1_6_7 _C105 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_1_6_8 _C53 1.000000000000e+00 + Choice_1_6_8 _C87 1.000000000000e+00 + Choice_1_6_8 _C98 1.000000000000e+00 + Choice_1_6_8 _C105 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_1_6_9 _C54 1.000000000000e+00 + Choice_1_6_9 _C87 1.000000000000e+00 + Choice_1_6_9 _C99 1.000000000000e+00 + Choice_1_6_9 _C105 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_1_7_1 _C55 1.000000000000e+00 + Choice_1_7_1 _C88 1.000000000000e+00 + Choice_1_7_1 _C91 1.000000000000e+00 + Choice_1_7_1 _C106 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_1_7_2 _C56 1.000000000000e+00 + Choice_1_7_2 _C88 1.000000000000e+00 + Choice_1_7_2 _C92 1.000000000000e+00 + Choice_1_7_2 _C106 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_1_7_3 _C57 1.000000000000e+00 + Choice_1_7_3 _C88 1.000000000000e+00 + Choice_1_7_3 _C93 1.000000000000e+00 + Choice_1_7_3 _C106 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_1_7_4 _C58 1.000000000000e+00 + Choice_1_7_4 _C88 1.000000000000e+00 + Choice_1_7_4 _C94 1.000000000000e+00 + Choice_1_7_4 _C107 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_1_7_5 _C59 1.000000000000e+00 + Choice_1_7_5 _C88 1.000000000000e+00 + Choice_1_7_5 _C95 1.000000000000e+00 + Choice_1_7_5 _C107 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_1_7_6 _C60 1.000000000000e+00 + Choice_1_7_6 _C88 1.000000000000e+00 + Choice_1_7_6 _C96 1.000000000000e+00 + Choice_1_7_6 _C107 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_1_7_7 _C61 1.000000000000e+00 + Choice_1_7_7 _C88 1.000000000000e+00 + Choice_1_7_7 _C97 1.000000000000e+00 + Choice_1_7_7 _C108 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_1_7_8 _C62 1.000000000000e+00 + Choice_1_7_8 _C88 1.000000000000e+00 + Choice_1_7_8 _C98 1.000000000000e+00 + Choice_1_7_8 _C108 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_1_7_9 _C63 1.000000000000e+00 + Choice_1_7_9 _C88 1.000000000000e+00 + Choice_1_7_9 _C99 1.000000000000e+00 + Choice_1_7_9 _C108 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_1_8_1 _C64 1.000000000000e+00 + Choice_1_8_1 _C89 1.000000000000e+00 + Choice_1_8_1 _C91 1.000000000000e+00 + Choice_1_8_1 _C106 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_1_8_2 _C65 1.000000000000e+00 + Choice_1_8_2 _C89 1.000000000000e+00 + Choice_1_8_2 _C92 1.000000000000e+00 + Choice_1_8_2 _C106 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_1_8_3 _C66 1.000000000000e+00 + Choice_1_8_3 _C89 1.000000000000e+00 + Choice_1_8_3 _C93 1.000000000000e+00 + Choice_1_8_3 _C106 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_1_8_4 _C67 1.000000000000e+00 + Choice_1_8_4 _C89 1.000000000000e+00 + Choice_1_8_4 _C94 1.000000000000e+00 + Choice_1_8_4 _C107 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_1_8_5 _C68 1.000000000000e+00 + Choice_1_8_5 _C89 1.000000000000e+00 + Choice_1_8_5 _C95 1.000000000000e+00 + Choice_1_8_5 _C107 1.000000000000e+00 + Choice_1_8_5 _C341 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_1_8_6 _C69 1.000000000000e+00 + Choice_1_8_6 _C89 1.000000000000e+00 + Choice_1_8_6 _C96 1.000000000000e+00 + Choice_1_8_6 _C107 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_1_8_7 _C70 1.000000000000e+00 + Choice_1_8_7 _C89 1.000000000000e+00 + Choice_1_8_7 _C97 1.000000000000e+00 + Choice_1_8_7 _C108 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_1_8_8 _C71 1.000000000000e+00 + Choice_1_8_8 _C89 1.000000000000e+00 + Choice_1_8_8 _C98 1.000000000000e+00 + Choice_1_8_8 _C108 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_1_8_9 _C72 1.000000000000e+00 + Choice_1_8_9 _C89 1.000000000000e+00 + Choice_1_8_9 _C99 1.000000000000e+00 + Choice_1_8_9 _C108 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_1_9_1 _C73 1.000000000000e+00 + Choice_1_9_1 _C90 1.000000000000e+00 + Choice_1_9_1 _C91 1.000000000000e+00 + Choice_1_9_1 _C106 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_1_9_2 _C74 1.000000000000e+00 + Choice_1_9_2 _C90 1.000000000000e+00 + Choice_1_9_2 _C92 1.000000000000e+00 + Choice_1_9_2 _C106 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_1_9_3 _C75 1.000000000000e+00 + Choice_1_9_3 _C90 1.000000000000e+00 + Choice_1_9_3 _C93 1.000000000000e+00 + Choice_1_9_3 _C106 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_1_9_4 _C76 1.000000000000e+00 + Choice_1_9_4 _C90 1.000000000000e+00 + Choice_1_9_4 _C94 1.000000000000e+00 + Choice_1_9_4 _C107 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_1_9_5 _C77 1.000000000000e+00 + Choice_1_9_5 _C90 1.000000000000e+00 + Choice_1_9_5 _C95 1.000000000000e+00 + Choice_1_9_5 _C107 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_1_9_6 _C78 1.000000000000e+00 + Choice_1_9_6 _C90 1.000000000000e+00 + Choice_1_9_6 _C96 1.000000000000e+00 + Choice_1_9_6 _C107 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_1_9_7 _C79 1.000000000000e+00 + Choice_1_9_7 _C90 1.000000000000e+00 + Choice_1_9_7 _C97 1.000000000000e+00 + Choice_1_9_7 _C108 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_1_9_8 _C80 1.000000000000e+00 + Choice_1_9_8 _C90 1.000000000000e+00 + Choice_1_9_8 _C98 1.000000000000e+00 + Choice_1_9_8 _C108 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_1_9_9 _C81 1.000000000000e+00 + Choice_1_9_9 _C90 1.000000000000e+00 + Choice_1_9_9 _C99 1.000000000000e+00 + Choice_1_9_9 _C108 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_2_1_1 _C1 1.000000000000e+00 + Choice_2_1_1 _C109 1.000000000000e+00 + Choice_2_1_1 _C118 1.000000000000e+00 + Choice_2_1_1 _C127 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_2_1_2 _C2 1.000000000000e+00 + Choice_2_1_2 _C109 1.000000000000e+00 + Choice_2_1_2 _C119 1.000000000000e+00 + Choice_2_1_2 _C127 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_2_1_3 _C3 1.000000000000e+00 + Choice_2_1_3 _C109 1.000000000000e+00 + Choice_2_1_3 _C120 1.000000000000e+00 + Choice_2_1_3 _C127 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_2_1_4 _C4 1.000000000000e+00 + Choice_2_1_4 _C109 1.000000000000e+00 + Choice_2_1_4 _C121 1.000000000000e+00 + Choice_2_1_4 _C128 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_2_1_5 _C5 1.000000000000e+00 + Choice_2_1_5 _C109 1.000000000000e+00 + Choice_2_1_5 _C122 1.000000000000e+00 + Choice_2_1_5 _C128 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_2_1_6 _C6 1.000000000000e+00 + Choice_2_1_6 _C109 1.000000000000e+00 + Choice_2_1_6 _C123 1.000000000000e+00 + Choice_2_1_6 _C128 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_2_1_7 _C7 1.000000000000e+00 + Choice_2_1_7 _C109 1.000000000000e+00 + Choice_2_1_7 _C124 1.000000000000e+00 + Choice_2_1_7 _C129 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_2_1_8 _C8 1.000000000000e+00 + Choice_2_1_8 _C109 1.000000000000e+00 + Choice_2_1_8 _C125 1.000000000000e+00 + Choice_2_1_8 _C129 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_2_1_9 _C9 1.000000000000e+00 + Choice_2_1_9 _C109 1.000000000000e+00 + Choice_2_1_9 _C126 1.000000000000e+00 + Choice_2_1_9 _C129 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_2_2_1 _C10 1.000000000000e+00 + Choice_2_2_1 _C110 1.000000000000e+00 + Choice_2_2_1 _C118 1.000000000000e+00 + Choice_2_2_1 _C127 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_2_2_2 _C11 1.000000000000e+00 + Choice_2_2_2 _C110 1.000000000000e+00 + Choice_2_2_2 _C119 1.000000000000e+00 + Choice_2_2_2 _C127 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_2_2_3 _C12 1.000000000000e+00 + Choice_2_2_3 _C110 1.000000000000e+00 + Choice_2_2_3 _C120 1.000000000000e+00 + Choice_2_2_3 _C127 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_2_2_4 _C13 1.000000000000e+00 + Choice_2_2_4 _C110 1.000000000000e+00 + Choice_2_2_4 _C121 1.000000000000e+00 + Choice_2_2_4 _C128 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_2_2_5 _C14 1.000000000000e+00 + Choice_2_2_5 _C110 1.000000000000e+00 + Choice_2_2_5 _C122 1.000000000000e+00 + Choice_2_2_5 _C128 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_2_2_6 _C15 1.000000000000e+00 + Choice_2_2_6 _C110 1.000000000000e+00 + Choice_2_2_6 _C123 1.000000000000e+00 + Choice_2_2_6 _C128 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_2_2_7 _C16 1.000000000000e+00 + Choice_2_2_7 _C110 1.000000000000e+00 + Choice_2_2_7 _C124 1.000000000000e+00 + Choice_2_2_7 _C129 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_2_2_8 _C17 1.000000000000e+00 + Choice_2_2_8 _C110 1.000000000000e+00 + Choice_2_2_8 _C125 1.000000000000e+00 + Choice_2_2_8 _C129 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_2_2_9 _C18 1.000000000000e+00 + Choice_2_2_9 _C110 1.000000000000e+00 + Choice_2_2_9 _C126 1.000000000000e+00 + Choice_2_2_9 _C129 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_2_3_1 _C19 1.000000000000e+00 + Choice_2_3_1 _C111 1.000000000000e+00 + Choice_2_3_1 _C118 1.000000000000e+00 + Choice_2_3_1 _C127 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_2_3_2 _C20 1.000000000000e+00 + Choice_2_3_2 _C111 1.000000000000e+00 + Choice_2_3_2 _C119 1.000000000000e+00 + Choice_2_3_2 _C127 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_2_3_3 _C21 1.000000000000e+00 + Choice_2_3_3 _C111 1.000000000000e+00 + Choice_2_3_3 _C120 1.000000000000e+00 + Choice_2_3_3 _C127 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_2_3_4 _C22 1.000000000000e+00 + Choice_2_3_4 _C111 1.000000000000e+00 + Choice_2_3_4 _C121 1.000000000000e+00 + Choice_2_3_4 _C128 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_2_3_5 _C23 1.000000000000e+00 + Choice_2_3_5 _C111 1.000000000000e+00 + Choice_2_3_5 _C122 1.000000000000e+00 + Choice_2_3_5 _C128 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_2_3_6 _C24 1.000000000000e+00 + Choice_2_3_6 _C111 1.000000000000e+00 + Choice_2_3_6 _C123 1.000000000000e+00 + Choice_2_3_6 _C128 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_2_3_7 _C25 1.000000000000e+00 + Choice_2_3_7 _C111 1.000000000000e+00 + Choice_2_3_7 _C124 1.000000000000e+00 + Choice_2_3_7 _C129 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_2_3_8 _C26 1.000000000000e+00 + Choice_2_3_8 _C111 1.000000000000e+00 + Choice_2_3_8 _C125 1.000000000000e+00 + Choice_2_3_8 _C129 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_2_3_9 _C27 1.000000000000e+00 + Choice_2_3_9 _C111 1.000000000000e+00 + Choice_2_3_9 _C126 1.000000000000e+00 + Choice_2_3_9 _C129 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_2_4_1 _C28 1.000000000000e+00 + Choice_2_4_1 _C112 1.000000000000e+00 + Choice_2_4_1 _C118 1.000000000000e+00 + Choice_2_4_1 _C130 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_2_4_2 _C29 1.000000000000e+00 + Choice_2_4_2 _C112 1.000000000000e+00 + Choice_2_4_2 _C119 1.000000000000e+00 + Choice_2_4_2 _C130 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_2_4_3 _C30 1.000000000000e+00 + Choice_2_4_3 _C112 1.000000000000e+00 + Choice_2_4_3 _C120 1.000000000000e+00 + Choice_2_4_3 _C130 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_2_4_4 _C31 1.000000000000e+00 + Choice_2_4_4 _C112 1.000000000000e+00 + Choice_2_4_4 _C121 1.000000000000e+00 + Choice_2_4_4 _C131 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_2_4_5 _C32 1.000000000000e+00 + Choice_2_4_5 _C112 1.000000000000e+00 + Choice_2_4_5 _C122 1.000000000000e+00 + Choice_2_4_5 _C131 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_2_4_6 _C33 1.000000000000e+00 + Choice_2_4_6 _C112 1.000000000000e+00 + Choice_2_4_6 _C123 1.000000000000e+00 + Choice_2_4_6 _C131 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_2_4_7 _C34 1.000000000000e+00 + Choice_2_4_7 _C112 1.000000000000e+00 + Choice_2_4_7 _C124 1.000000000000e+00 + Choice_2_4_7 _C132 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_2_4_8 _C35 1.000000000000e+00 + Choice_2_4_8 _C112 1.000000000000e+00 + Choice_2_4_8 _C125 1.000000000000e+00 + Choice_2_4_8 _C132 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_2_4_9 _C36 1.000000000000e+00 + Choice_2_4_9 _C112 1.000000000000e+00 + Choice_2_4_9 _C126 1.000000000000e+00 + Choice_2_4_9 _C132 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_2_5_1 _C37 1.000000000000e+00 + Choice_2_5_1 _C113 1.000000000000e+00 + Choice_2_5_1 _C118 1.000000000000e+00 + Choice_2_5_1 _C130 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_2_5_2 _C38 1.000000000000e+00 + Choice_2_5_2 _C113 1.000000000000e+00 + Choice_2_5_2 _C119 1.000000000000e+00 + Choice_2_5_2 _C130 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_2_5_3 _C39 1.000000000000e+00 + Choice_2_5_3 _C113 1.000000000000e+00 + Choice_2_5_3 _C120 1.000000000000e+00 + Choice_2_5_3 _C130 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_2_5_4 _C40 1.000000000000e+00 + Choice_2_5_4 _C113 1.000000000000e+00 + Choice_2_5_4 _C121 1.000000000000e+00 + Choice_2_5_4 _C131 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_2_5_5 _C41 1.000000000000e+00 + Choice_2_5_5 _C113 1.000000000000e+00 + Choice_2_5_5 _C122 1.000000000000e+00 + Choice_2_5_5 _C131 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_2_5_6 _C42 1.000000000000e+00 + Choice_2_5_6 _C113 1.000000000000e+00 + Choice_2_5_6 _C123 1.000000000000e+00 + Choice_2_5_6 _C131 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_2_5_7 _C43 1.000000000000e+00 + Choice_2_5_7 _C113 1.000000000000e+00 + Choice_2_5_7 _C124 1.000000000000e+00 + Choice_2_5_7 _C132 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_2_5_8 _C44 1.000000000000e+00 + Choice_2_5_8 _C113 1.000000000000e+00 + Choice_2_5_8 _C125 1.000000000000e+00 + Choice_2_5_8 _C132 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_2_5_9 _C45 1.000000000000e+00 + Choice_2_5_9 _C113 1.000000000000e+00 + Choice_2_5_9 _C126 1.000000000000e+00 + Choice_2_5_9 _C132 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_2_6_1 _C46 1.000000000000e+00 + Choice_2_6_1 _C114 1.000000000000e+00 + Choice_2_6_1 _C118 1.000000000000e+00 + Choice_2_6_1 _C130 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_2_6_2 _C47 1.000000000000e+00 + Choice_2_6_2 _C114 1.000000000000e+00 + Choice_2_6_2 _C119 1.000000000000e+00 + Choice_2_6_2 _C130 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_2_6_3 _C48 1.000000000000e+00 + Choice_2_6_3 _C114 1.000000000000e+00 + Choice_2_6_3 _C120 1.000000000000e+00 + Choice_2_6_3 _C130 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_2_6_4 _C49 1.000000000000e+00 + Choice_2_6_4 _C114 1.000000000000e+00 + Choice_2_6_4 _C121 1.000000000000e+00 + Choice_2_6_4 _C131 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_2_6_5 _C50 1.000000000000e+00 + Choice_2_6_5 _C114 1.000000000000e+00 + Choice_2_6_5 _C122 1.000000000000e+00 + Choice_2_6_5 _C131 1.000000000000e+00 + Choice_2_6_5 _C340 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_2_6_6 _C51 1.000000000000e+00 + Choice_2_6_6 _C114 1.000000000000e+00 + Choice_2_6_6 _C123 1.000000000000e+00 + Choice_2_6_6 _C131 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_2_6_7 _C52 1.000000000000e+00 + Choice_2_6_7 _C114 1.000000000000e+00 + Choice_2_6_7 _C124 1.000000000000e+00 + Choice_2_6_7 _C132 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_2_6_8 _C53 1.000000000000e+00 + Choice_2_6_8 _C114 1.000000000000e+00 + Choice_2_6_8 _C125 1.000000000000e+00 + Choice_2_6_8 _C132 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_2_6_9 _C54 1.000000000000e+00 + Choice_2_6_9 _C114 1.000000000000e+00 + Choice_2_6_9 _C126 1.000000000000e+00 + Choice_2_6_9 _C132 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_2_7_1 _C55 1.000000000000e+00 + Choice_2_7_1 _C115 1.000000000000e+00 + Choice_2_7_1 _C118 1.000000000000e+00 + Choice_2_7_1 _C133 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_2_7_2 _C56 1.000000000000e+00 + Choice_2_7_2 _C115 1.000000000000e+00 + Choice_2_7_2 _C119 1.000000000000e+00 + Choice_2_7_2 _C133 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_2_7_3 _C57 1.000000000000e+00 + Choice_2_7_3 _C115 1.000000000000e+00 + Choice_2_7_3 _C120 1.000000000000e+00 + Choice_2_7_3 _C133 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_2_7_4 _C58 1.000000000000e+00 + Choice_2_7_4 _C115 1.000000000000e+00 + Choice_2_7_4 _C121 1.000000000000e+00 + Choice_2_7_4 _C134 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_2_7_5 _C59 1.000000000000e+00 + Choice_2_7_5 _C115 1.000000000000e+00 + Choice_2_7_5 _C122 1.000000000000e+00 + Choice_2_7_5 _C134 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_2_7_6 _C60 1.000000000000e+00 + Choice_2_7_6 _C115 1.000000000000e+00 + Choice_2_7_6 _C123 1.000000000000e+00 + Choice_2_7_6 _C134 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_2_7_7 _C61 1.000000000000e+00 + Choice_2_7_7 _C115 1.000000000000e+00 + Choice_2_7_7 _C124 1.000000000000e+00 + Choice_2_7_7 _C135 1.000000000000e+00 + Choice_2_7_7 _C346 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_2_7_8 _C62 1.000000000000e+00 + Choice_2_7_8 _C115 1.000000000000e+00 + Choice_2_7_8 _C125 1.000000000000e+00 + Choice_2_7_8 _C135 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_2_7_9 _C63 1.000000000000e+00 + Choice_2_7_9 _C115 1.000000000000e+00 + Choice_2_7_9 _C126 1.000000000000e+00 + Choice_2_7_9 _C135 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_2_8_1 _C64 1.000000000000e+00 + Choice_2_8_1 _C116 1.000000000000e+00 + Choice_2_8_1 _C118 1.000000000000e+00 + Choice_2_8_1 _C133 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_2_8_2 _C65 1.000000000000e+00 + Choice_2_8_2 _C116 1.000000000000e+00 + Choice_2_8_2 _C119 1.000000000000e+00 + Choice_2_8_2 _C133 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_2_8_3 _C66 1.000000000000e+00 + Choice_2_8_3 _C116 1.000000000000e+00 + Choice_2_8_3 _C120 1.000000000000e+00 + Choice_2_8_3 _C133 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_2_8_4 _C67 1.000000000000e+00 + Choice_2_8_4 _C116 1.000000000000e+00 + Choice_2_8_4 _C121 1.000000000000e+00 + Choice_2_8_4 _C134 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_2_8_5 _C68 1.000000000000e+00 + Choice_2_8_5 _C116 1.000000000000e+00 + Choice_2_8_5 _C122 1.000000000000e+00 + Choice_2_8_5 _C134 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_2_8_6 _C69 1.000000000000e+00 + Choice_2_8_6 _C116 1.000000000000e+00 + Choice_2_8_6 _C123 1.000000000000e+00 + Choice_2_8_6 _C134 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_2_8_7 _C70 1.000000000000e+00 + Choice_2_8_7 _C116 1.000000000000e+00 + Choice_2_8_7 _C124 1.000000000000e+00 + Choice_2_8_7 _C135 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_2_8_8 _C71 1.000000000000e+00 + Choice_2_8_8 _C116 1.000000000000e+00 + Choice_2_8_8 _C125 1.000000000000e+00 + Choice_2_8_8 _C135 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_2_8_9 _C72 1.000000000000e+00 + Choice_2_8_9 _C116 1.000000000000e+00 + Choice_2_8_9 _C126 1.000000000000e+00 + Choice_2_8_9 _C135 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_2_9_1 _C73 1.000000000000e+00 + Choice_2_9_1 _C117 1.000000000000e+00 + Choice_2_9_1 _C118 1.000000000000e+00 + Choice_2_9_1 _C133 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_2_9_2 _C74 1.000000000000e+00 + Choice_2_9_2 _C117 1.000000000000e+00 + Choice_2_9_2 _C119 1.000000000000e+00 + Choice_2_9_2 _C133 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_2_9_3 _C75 1.000000000000e+00 + Choice_2_9_3 _C117 1.000000000000e+00 + Choice_2_9_3 _C120 1.000000000000e+00 + Choice_2_9_3 _C133 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_2_9_4 _C76 1.000000000000e+00 + Choice_2_9_4 _C117 1.000000000000e+00 + Choice_2_9_4 _C121 1.000000000000e+00 + Choice_2_9_4 _C134 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_2_9_5 _C77 1.000000000000e+00 + Choice_2_9_5 _C117 1.000000000000e+00 + Choice_2_9_5 _C122 1.000000000000e+00 + Choice_2_9_5 _C134 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_2_9_6 _C78 1.000000000000e+00 + Choice_2_9_6 _C117 1.000000000000e+00 + Choice_2_9_6 _C123 1.000000000000e+00 + Choice_2_9_6 _C134 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_2_9_7 _C79 1.000000000000e+00 + Choice_2_9_7 _C117 1.000000000000e+00 + Choice_2_9_7 _C124 1.000000000000e+00 + Choice_2_9_7 _C135 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_2_9_8 _C80 1.000000000000e+00 + Choice_2_9_8 _C117 1.000000000000e+00 + Choice_2_9_8 _C125 1.000000000000e+00 + Choice_2_9_8 _C135 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_2_9_9 _C81 1.000000000000e+00 + Choice_2_9_9 _C117 1.000000000000e+00 + Choice_2_9_9 _C126 1.000000000000e+00 + Choice_2_9_9 _C135 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_3_1_1 _C1 1.000000000000e+00 + Choice_3_1_1 _C136 1.000000000000e+00 + Choice_3_1_1 _C145 1.000000000000e+00 + Choice_3_1_1 _C154 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_3_1_2 _C2 1.000000000000e+00 + Choice_3_1_2 _C136 1.000000000000e+00 + Choice_3_1_2 _C146 1.000000000000e+00 + Choice_3_1_2 _C154 1.000000000000e+00 + Choice_3_1_2 _C330 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_3_1_3 _C3 1.000000000000e+00 + Choice_3_1_3 _C136 1.000000000000e+00 + Choice_3_1_3 _C147 1.000000000000e+00 + Choice_3_1_3 _C154 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_3_1_4 _C4 1.000000000000e+00 + Choice_3_1_4 _C136 1.000000000000e+00 + Choice_3_1_4 _C148 1.000000000000e+00 + Choice_3_1_4 _C155 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_3_1_5 _C5 1.000000000000e+00 + Choice_3_1_5 _C136 1.000000000000e+00 + Choice_3_1_5 _C149 1.000000000000e+00 + Choice_3_1_5 _C155 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_3_1_6 _C6 1.000000000000e+00 + Choice_3_1_6 _C136 1.000000000000e+00 + Choice_3_1_6 _C150 1.000000000000e+00 + Choice_3_1_6 _C155 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_3_1_7 _C7 1.000000000000e+00 + Choice_3_1_7 _C136 1.000000000000e+00 + Choice_3_1_7 _C151 1.000000000000e+00 + Choice_3_1_7 _C156 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_3_1_8 _C8 1.000000000000e+00 + Choice_3_1_8 _C136 1.000000000000e+00 + Choice_3_1_8 _C152 1.000000000000e+00 + Choice_3_1_8 _C156 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_3_1_9 _C9 1.000000000000e+00 + Choice_3_1_9 _C136 1.000000000000e+00 + Choice_3_1_9 _C153 1.000000000000e+00 + Choice_3_1_9 _C156 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_3_2_1 _C10 1.000000000000e+00 + Choice_3_2_1 _C137 1.000000000000e+00 + Choice_3_2_1 _C145 1.000000000000e+00 + Choice_3_2_1 _C154 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_3_2_2 _C11 1.000000000000e+00 + Choice_3_2_2 _C137 1.000000000000e+00 + Choice_3_2_2 _C146 1.000000000000e+00 + Choice_3_2_2 _C154 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_3_2_3 _C12 1.000000000000e+00 + Choice_3_2_3 _C137 1.000000000000e+00 + Choice_3_2_3 _C147 1.000000000000e+00 + Choice_3_2_3 _C154 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_3_2_4 _C13 1.000000000000e+00 + Choice_3_2_4 _C137 1.000000000000e+00 + Choice_3_2_4 _C148 1.000000000000e+00 + Choice_3_2_4 _C155 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_3_2_5 _C14 1.000000000000e+00 + Choice_3_2_5 _C137 1.000000000000e+00 + Choice_3_2_5 _C149 1.000000000000e+00 + Choice_3_2_5 _C155 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_3_2_6 _C15 1.000000000000e+00 + Choice_3_2_6 _C137 1.000000000000e+00 + Choice_3_2_6 _C150 1.000000000000e+00 + Choice_3_2_6 _C155 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_3_2_7 _C16 1.000000000000e+00 + Choice_3_2_7 _C137 1.000000000000e+00 + Choice_3_2_7 _C151 1.000000000000e+00 + Choice_3_2_7 _C156 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_3_2_8 _C17 1.000000000000e+00 + Choice_3_2_8 _C137 1.000000000000e+00 + Choice_3_2_8 _C152 1.000000000000e+00 + Choice_3_2_8 _C156 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_3_2_9 _C18 1.000000000000e+00 + Choice_3_2_9 _C137 1.000000000000e+00 + Choice_3_2_9 _C153 1.000000000000e+00 + Choice_3_2_9 _C156 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_3_3_1 _C19 1.000000000000e+00 + Choice_3_3_1 _C138 1.000000000000e+00 + Choice_3_3_1 _C145 1.000000000000e+00 + Choice_3_3_1 _C154 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_3_3_2 _C20 1.000000000000e+00 + Choice_3_3_2 _C138 1.000000000000e+00 + Choice_3_3_2 _C146 1.000000000000e+00 + Choice_3_3_2 _C154 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_3_3_3 _C21 1.000000000000e+00 + Choice_3_3_3 _C138 1.000000000000e+00 + Choice_3_3_3 _C147 1.000000000000e+00 + Choice_3_3_3 _C154 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_3_3_4 _C22 1.000000000000e+00 + Choice_3_3_4 _C138 1.000000000000e+00 + Choice_3_3_4 _C148 1.000000000000e+00 + Choice_3_3_4 _C155 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_3_3_5 _C23 1.000000000000e+00 + Choice_3_3_5 _C138 1.000000000000e+00 + Choice_3_3_5 _C149 1.000000000000e+00 + Choice_3_3_5 _C155 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_3_3_6 _C24 1.000000000000e+00 + Choice_3_3_6 _C138 1.000000000000e+00 + Choice_3_3_6 _C150 1.000000000000e+00 + Choice_3_3_6 _C155 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_3_3_7 _C25 1.000000000000e+00 + Choice_3_3_7 _C138 1.000000000000e+00 + Choice_3_3_7 _C151 1.000000000000e+00 + Choice_3_3_7 _C156 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_3_3_8 _C26 1.000000000000e+00 + Choice_3_3_8 _C138 1.000000000000e+00 + Choice_3_3_8 _C152 1.000000000000e+00 + Choice_3_3_8 _C156 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_3_3_9 _C27 1.000000000000e+00 + Choice_3_3_9 _C138 1.000000000000e+00 + Choice_3_3_9 _C153 1.000000000000e+00 + Choice_3_3_9 _C156 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_3_4_1 _C28 1.000000000000e+00 + Choice_3_4_1 _C139 1.000000000000e+00 + Choice_3_4_1 _C145 1.000000000000e+00 + Choice_3_4_1 _C157 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_3_4_2 _C29 1.000000000000e+00 + Choice_3_4_2 _C139 1.000000000000e+00 + Choice_3_4_2 _C146 1.000000000000e+00 + Choice_3_4_2 _C157 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_3_4_3 _C30 1.000000000000e+00 + Choice_3_4_3 _C139 1.000000000000e+00 + Choice_3_4_3 _C147 1.000000000000e+00 + Choice_3_4_3 _C157 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_3_4_4 _C31 1.000000000000e+00 + Choice_3_4_4 _C139 1.000000000000e+00 + Choice_3_4_4 _C148 1.000000000000e+00 + Choice_3_4_4 _C158 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_3_4_5 _C32 1.000000000000e+00 + Choice_3_4_5 _C139 1.000000000000e+00 + Choice_3_4_5 _C149 1.000000000000e+00 + Choice_3_4_5 _C158 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_3_4_6 _C33 1.000000000000e+00 + Choice_3_4_6 _C139 1.000000000000e+00 + Choice_3_4_6 _C150 1.000000000000e+00 + Choice_3_4_6 _C158 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_3_4_7 _C34 1.000000000000e+00 + Choice_3_4_7 _C139 1.000000000000e+00 + Choice_3_4_7 _C151 1.000000000000e+00 + Choice_3_4_7 _C159 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_3_4_8 _C35 1.000000000000e+00 + Choice_3_4_8 _C139 1.000000000000e+00 + Choice_3_4_8 _C152 1.000000000000e+00 + Choice_3_4_8 _C159 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_3_4_9 _C36 1.000000000000e+00 + Choice_3_4_9 _C139 1.000000000000e+00 + Choice_3_4_9 _C153 1.000000000000e+00 + Choice_3_4_9 _C159 1.000000000000e+00 + Choice_3_4_9 _C350 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_3_5_1 _C37 1.000000000000e+00 + Choice_3_5_1 _C140 1.000000000000e+00 + Choice_3_5_1 _C145 1.000000000000e+00 + Choice_3_5_1 _C157 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_3_5_2 _C38 1.000000000000e+00 + Choice_3_5_2 _C140 1.000000000000e+00 + Choice_3_5_2 _C146 1.000000000000e+00 + Choice_3_5_2 _C157 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_3_5_3 _C39 1.000000000000e+00 + Choice_3_5_3 _C140 1.000000000000e+00 + Choice_3_5_3 _C147 1.000000000000e+00 + Choice_3_5_3 _C157 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_3_5_4 _C40 1.000000000000e+00 + Choice_3_5_4 _C140 1.000000000000e+00 + Choice_3_5_4 _C148 1.000000000000e+00 + Choice_3_5_4 _C158 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_3_5_5 _C41 1.000000000000e+00 + Choice_3_5_5 _C140 1.000000000000e+00 + Choice_3_5_5 _C149 1.000000000000e+00 + Choice_3_5_5 _C158 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_3_5_6 _C42 1.000000000000e+00 + Choice_3_5_6 _C140 1.000000000000e+00 + Choice_3_5_6 _C150 1.000000000000e+00 + Choice_3_5_6 _C158 1.000000000000e+00 + Choice_3_5_6 _C344 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_3_5_7 _C43 1.000000000000e+00 + Choice_3_5_7 _C140 1.000000000000e+00 + Choice_3_5_7 _C151 1.000000000000e+00 + Choice_3_5_7 _C159 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_3_5_8 _C44 1.000000000000e+00 + Choice_3_5_8 _C140 1.000000000000e+00 + Choice_3_5_8 _C152 1.000000000000e+00 + Choice_3_5_8 _C159 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_3_5_9 _C45 1.000000000000e+00 + Choice_3_5_9 _C140 1.000000000000e+00 + Choice_3_5_9 _C153 1.000000000000e+00 + Choice_3_5_9 _C159 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_3_6_1 _C46 1.000000000000e+00 + Choice_3_6_1 _C141 1.000000000000e+00 + Choice_3_6_1 _C145 1.000000000000e+00 + Choice_3_6_1 _C157 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_3_6_2 _C47 1.000000000000e+00 + Choice_3_6_2 _C141 1.000000000000e+00 + Choice_3_6_2 _C146 1.000000000000e+00 + Choice_3_6_2 _C157 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_3_6_3 _C48 1.000000000000e+00 + Choice_3_6_3 _C141 1.000000000000e+00 + Choice_3_6_3 _C147 1.000000000000e+00 + Choice_3_6_3 _C157 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_3_6_4 _C49 1.000000000000e+00 + Choice_3_6_4 _C141 1.000000000000e+00 + Choice_3_6_4 _C148 1.000000000000e+00 + Choice_3_6_4 _C158 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_3_6_5 _C50 1.000000000000e+00 + Choice_3_6_5 _C141 1.000000000000e+00 + Choice_3_6_5 _C149 1.000000000000e+00 + Choice_3_6_5 _C158 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_3_6_6 _C51 1.000000000000e+00 + Choice_3_6_6 _C141 1.000000000000e+00 + Choice_3_6_6 _C150 1.000000000000e+00 + Choice_3_6_6 _C158 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_3_6_7 _C52 1.000000000000e+00 + Choice_3_6_7 _C141 1.000000000000e+00 + Choice_3_6_7 _C151 1.000000000000e+00 + Choice_3_6_7 _C159 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_3_6_8 _C53 1.000000000000e+00 + Choice_3_6_8 _C141 1.000000000000e+00 + Choice_3_6_8 _C152 1.000000000000e+00 + Choice_3_6_8 _C159 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_3_6_9 _C54 1.000000000000e+00 + Choice_3_6_9 _C141 1.000000000000e+00 + Choice_3_6_9 _C153 1.000000000000e+00 + Choice_3_6_9 _C159 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_3_7_1 _C55 1.000000000000e+00 + Choice_3_7_1 _C142 1.000000000000e+00 + Choice_3_7_1 _C145 1.000000000000e+00 + Choice_3_7_1 _C160 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_3_7_2 _C56 1.000000000000e+00 + Choice_3_7_2 _C142 1.000000000000e+00 + Choice_3_7_2 _C146 1.000000000000e+00 + Choice_3_7_2 _C160 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_3_7_3 _C57 1.000000000000e+00 + Choice_3_7_3 _C142 1.000000000000e+00 + Choice_3_7_3 _C147 1.000000000000e+00 + Choice_3_7_3 _C160 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_3_7_4 _C58 1.000000000000e+00 + Choice_3_7_4 _C142 1.000000000000e+00 + Choice_3_7_4 _C148 1.000000000000e+00 + Choice_3_7_4 _C161 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_3_7_5 _C59 1.000000000000e+00 + Choice_3_7_5 _C142 1.000000000000e+00 + Choice_3_7_5 _C149 1.000000000000e+00 + Choice_3_7_5 _C161 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_3_7_6 _C60 1.000000000000e+00 + Choice_3_7_6 _C142 1.000000000000e+00 + Choice_3_7_6 _C150 1.000000000000e+00 + Choice_3_7_6 _C161 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_3_7_7 _C61 1.000000000000e+00 + Choice_3_7_7 _C142 1.000000000000e+00 + Choice_3_7_7 _C151 1.000000000000e+00 + Choice_3_7_7 _C162 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_3_7_8 _C62 1.000000000000e+00 + Choice_3_7_8 _C142 1.000000000000e+00 + Choice_3_7_8 _C152 1.000000000000e+00 + Choice_3_7_8 _C162 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_3_7_9 _C63 1.000000000000e+00 + Choice_3_7_9 _C142 1.000000000000e+00 + Choice_3_7_9 _C153 1.000000000000e+00 + Choice_3_7_9 _C162 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_3_8_1 _C64 1.000000000000e+00 + Choice_3_8_1 _C143 1.000000000000e+00 + Choice_3_8_1 _C145 1.000000000000e+00 + Choice_3_8_1 _C160 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_3_8_2 _C65 1.000000000000e+00 + Choice_3_8_2 _C143 1.000000000000e+00 + Choice_3_8_2 _C146 1.000000000000e+00 + Choice_3_8_2 _C160 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_3_8_3 _C66 1.000000000000e+00 + Choice_3_8_3 _C143 1.000000000000e+00 + Choice_3_8_3 _C147 1.000000000000e+00 + Choice_3_8_3 _C160 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_3_8_4 _C67 1.000000000000e+00 + Choice_3_8_4 _C143 1.000000000000e+00 + Choice_3_8_4 _C148 1.000000000000e+00 + Choice_3_8_4 _C161 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_3_8_5 _C68 1.000000000000e+00 + Choice_3_8_5 _C143 1.000000000000e+00 + Choice_3_8_5 _C149 1.000000000000e+00 + Choice_3_8_5 _C161 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_3_8_6 _C69 1.000000000000e+00 + Choice_3_8_6 _C143 1.000000000000e+00 + Choice_3_8_6 _C150 1.000000000000e+00 + Choice_3_8_6 _C161 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_3_8_7 _C70 1.000000000000e+00 + Choice_3_8_7 _C143 1.000000000000e+00 + Choice_3_8_7 _C151 1.000000000000e+00 + Choice_3_8_7 _C162 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_3_8_8 _C71 1.000000000000e+00 + Choice_3_8_8 _C143 1.000000000000e+00 + Choice_3_8_8 _C152 1.000000000000e+00 + Choice_3_8_8 _C162 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_3_8_9 _C72 1.000000000000e+00 + Choice_3_8_9 _C143 1.000000000000e+00 + Choice_3_8_9 _C153 1.000000000000e+00 + Choice_3_8_9 _C162 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_3_9_1 _C73 1.000000000000e+00 + Choice_3_9_1 _C144 1.000000000000e+00 + Choice_3_9_1 _C145 1.000000000000e+00 + Choice_3_9_1 _C160 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_3_9_2 _C74 1.000000000000e+00 + Choice_3_9_2 _C144 1.000000000000e+00 + Choice_3_9_2 _C146 1.000000000000e+00 + Choice_3_9_2 _C160 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_3_9_3 _C75 1.000000000000e+00 + Choice_3_9_3 _C144 1.000000000000e+00 + Choice_3_9_3 _C147 1.000000000000e+00 + Choice_3_9_3 _C160 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_3_9_4 _C76 1.000000000000e+00 + Choice_3_9_4 _C144 1.000000000000e+00 + Choice_3_9_4 _C148 1.000000000000e+00 + Choice_3_9_4 _C161 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_3_9_5 _C77 1.000000000000e+00 + Choice_3_9_5 _C144 1.000000000000e+00 + Choice_3_9_5 _C149 1.000000000000e+00 + Choice_3_9_5 _C161 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_3_9_6 _C78 1.000000000000e+00 + Choice_3_9_6 _C144 1.000000000000e+00 + Choice_3_9_6 _C150 1.000000000000e+00 + Choice_3_9_6 _C161 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_3_9_7 _C79 1.000000000000e+00 + Choice_3_9_7 _C144 1.000000000000e+00 + Choice_3_9_7 _C151 1.000000000000e+00 + Choice_3_9_7 _C162 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_3_9_8 _C80 1.000000000000e+00 + Choice_3_9_8 _C144 1.000000000000e+00 + Choice_3_9_8 _C152 1.000000000000e+00 + Choice_3_9_8 _C162 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_3_9_9 _C81 1.000000000000e+00 + Choice_3_9_9 _C144 1.000000000000e+00 + Choice_3_9_9 _C153 1.000000000000e+00 + Choice_3_9_9 _C162 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_4_1_1 _C1 1.000000000000e+00 + Choice_4_1_1 _C163 1.000000000000e+00 + Choice_4_1_1 _C172 1.000000000000e+00 + Choice_4_1_1 _C181 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_4_1_2 _C2 1.000000000000e+00 + Choice_4_1_2 _C163 1.000000000000e+00 + Choice_4_1_2 _C173 1.000000000000e+00 + Choice_4_1_2 _C181 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_4_1_3 _C3 1.000000000000e+00 + Choice_4_1_3 _C163 1.000000000000e+00 + Choice_4_1_3 _C174 1.000000000000e+00 + Choice_4_1_3 _C181 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_4_1_4 _C4 1.000000000000e+00 + Choice_4_1_4 _C163 1.000000000000e+00 + Choice_4_1_4 _C175 1.000000000000e+00 + Choice_4_1_4 _C182 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_4_1_5 _C5 1.000000000000e+00 + Choice_4_1_5 _C163 1.000000000000e+00 + Choice_4_1_5 _C176 1.000000000000e+00 + Choice_4_1_5 _C182 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_4_1_6 _C6 1.000000000000e+00 + Choice_4_1_6 _C163 1.000000000000e+00 + Choice_4_1_6 _C177 1.000000000000e+00 + Choice_4_1_6 _C182 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_4_1_7 _C7 1.000000000000e+00 + Choice_4_1_7 _C163 1.000000000000e+00 + Choice_4_1_7 _C178 1.000000000000e+00 + Choice_4_1_7 _C183 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_4_1_8 _C8 1.000000000000e+00 + Choice_4_1_8 _C163 1.000000000000e+00 + Choice_4_1_8 _C179 1.000000000000e+00 + Choice_4_1_8 _C183 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_4_1_9 _C9 1.000000000000e+00 + Choice_4_1_9 _C163 1.000000000000e+00 + Choice_4_1_9 _C180 1.000000000000e+00 + Choice_4_1_9 _C183 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_4_2_1 _C10 1.000000000000e+00 + Choice_4_2_1 _C164 1.000000000000e+00 + Choice_4_2_1 _C172 1.000000000000e+00 + Choice_4_2_1 _C181 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_4_2_2 _C11 1.000000000000e+00 + Choice_4_2_2 _C164 1.000000000000e+00 + Choice_4_2_2 _C173 1.000000000000e+00 + Choice_4_2_2 _C181 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_4_2_3 _C12 1.000000000000e+00 + Choice_4_2_3 _C164 1.000000000000e+00 + Choice_4_2_3 _C174 1.000000000000e+00 + Choice_4_2_3 _C181 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_4_2_4 _C13 1.000000000000e+00 + Choice_4_2_4 _C164 1.000000000000e+00 + Choice_4_2_4 _C175 1.000000000000e+00 + Choice_4_2_4 _C182 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_4_2_5 _C14 1.000000000000e+00 + Choice_4_2_5 _C164 1.000000000000e+00 + Choice_4_2_5 _C176 1.000000000000e+00 + Choice_4_2_5 _C182 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_4_2_6 _C15 1.000000000000e+00 + Choice_4_2_6 _C164 1.000000000000e+00 + Choice_4_2_6 _C177 1.000000000000e+00 + Choice_4_2_6 _C182 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_4_2_7 _C16 1.000000000000e+00 + Choice_4_2_7 _C164 1.000000000000e+00 + Choice_4_2_7 _C178 1.000000000000e+00 + Choice_4_2_7 _C183 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_4_2_8 _C17 1.000000000000e+00 + Choice_4_2_8 _C164 1.000000000000e+00 + Choice_4_2_8 _C179 1.000000000000e+00 + Choice_4_2_8 _C183 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_4_2_9 _C18 1.000000000000e+00 + Choice_4_2_9 _C164 1.000000000000e+00 + Choice_4_2_9 _C180 1.000000000000e+00 + Choice_4_2_9 _C183 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_4_3_1 _C19 1.000000000000e+00 + Choice_4_3_1 _C165 1.000000000000e+00 + Choice_4_3_1 _C172 1.000000000000e+00 + Choice_4_3_1 _C181 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_4_3_2 _C20 1.000000000000e+00 + Choice_4_3_2 _C165 1.000000000000e+00 + Choice_4_3_2 _C173 1.000000000000e+00 + Choice_4_3_2 _C181 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_4_3_3 _C21 1.000000000000e+00 + Choice_4_3_3 _C165 1.000000000000e+00 + Choice_4_3_3 _C174 1.000000000000e+00 + Choice_4_3_3 _C181 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_4_3_4 _C22 1.000000000000e+00 + Choice_4_3_4 _C165 1.000000000000e+00 + Choice_4_3_4 _C175 1.000000000000e+00 + Choice_4_3_4 _C182 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_4_3_5 _C23 1.000000000000e+00 + Choice_4_3_5 _C165 1.000000000000e+00 + Choice_4_3_5 _C176 1.000000000000e+00 + Choice_4_3_5 _C182 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_4_3_6 _C24 1.000000000000e+00 + Choice_4_3_6 _C165 1.000000000000e+00 + Choice_4_3_6 _C177 1.000000000000e+00 + Choice_4_3_6 _C182 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_4_3_7 _C25 1.000000000000e+00 + Choice_4_3_7 _C165 1.000000000000e+00 + Choice_4_3_7 _C178 1.000000000000e+00 + Choice_4_3_7 _C183 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_4_3_8 _C26 1.000000000000e+00 + Choice_4_3_8 _C165 1.000000000000e+00 + Choice_4_3_8 _C179 1.000000000000e+00 + Choice_4_3_8 _C183 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_4_3_9 _C27 1.000000000000e+00 + Choice_4_3_9 _C165 1.000000000000e+00 + Choice_4_3_9 _C180 1.000000000000e+00 + Choice_4_3_9 _C183 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_4_4_1 _C28 1.000000000000e+00 + Choice_4_4_1 _C166 1.000000000000e+00 + Choice_4_4_1 _C172 1.000000000000e+00 + Choice_4_4_1 _C184 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_4_4_2 _C29 1.000000000000e+00 + Choice_4_4_2 _C166 1.000000000000e+00 + Choice_4_4_2 _C173 1.000000000000e+00 + Choice_4_4_2 _C184 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_4_4_3 _C30 1.000000000000e+00 + Choice_4_4_3 _C166 1.000000000000e+00 + Choice_4_4_3 _C174 1.000000000000e+00 + Choice_4_4_3 _C184 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_4_4_4 _C31 1.000000000000e+00 + Choice_4_4_4 _C166 1.000000000000e+00 + Choice_4_4_4 _C175 1.000000000000e+00 + Choice_4_4_4 _C185 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_4_4_5 _C32 1.000000000000e+00 + Choice_4_4_5 _C166 1.000000000000e+00 + Choice_4_4_5 _C176 1.000000000000e+00 + Choice_4_4_5 _C185 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_4_4_6 _C33 1.000000000000e+00 + Choice_4_4_6 _C166 1.000000000000e+00 + Choice_4_4_6 _C177 1.000000000000e+00 + Choice_4_4_6 _C185 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_4_4_7 _C34 1.000000000000e+00 + Choice_4_4_7 _C166 1.000000000000e+00 + Choice_4_4_7 _C178 1.000000000000e+00 + Choice_4_4_7 _C186 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_4_4_8 _C35 1.000000000000e+00 + Choice_4_4_8 _C166 1.000000000000e+00 + Choice_4_4_8 _C179 1.000000000000e+00 + Choice_4_4_8 _C186 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_4_4_9 _C36 1.000000000000e+00 + Choice_4_4_9 _C166 1.000000000000e+00 + Choice_4_4_9 _C180 1.000000000000e+00 + Choice_4_4_9 _C186 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_4_5_1 _C37 1.000000000000e+00 + Choice_4_5_1 _C167 1.000000000000e+00 + Choice_4_5_1 _C172 1.000000000000e+00 + Choice_4_5_1 _C184 1.000000000000e+00 + Choice_4_5_1 _C328 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_4_5_2 _C38 1.000000000000e+00 + Choice_4_5_2 _C167 1.000000000000e+00 + Choice_4_5_2 _C173 1.000000000000e+00 + Choice_4_5_2 _C184 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_4_5_3 _C39 1.000000000000e+00 + Choice_4_5_3 _C167 1.000000000000e+00 + Choice_4_5_3 _C174 1.000000000000e+00 + Choice_4_5_3 _C184 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_4_5_4 _C40 1.000000000000e+00 + Choice_4_5_4 _C167 1.000000000000e+00 + Choice_4_5_4 _C175 1.000000000000e+00 + Choice_4_5_4 _C185 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_4_5_5 _C41 1.000000000000e+00 + Choice_4_5_5 _C167 1.000000000000e+00 + Choice_4_5_5 _C176 1.000000000000e+00 + Choice_4_5_5 _C185 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_4_5_6 _C42 1.000000000000e+00 + Choice_4_5_6 _C167 1.000000000000e+00 + Choice_4_5_6 _C177 1.000000000000e+00 + Choice_4_5_6 _C185 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_4_5_7 _C43 1.000000000000e+00 + Choice_4_5_7 _C167 1.000000000000e+00 + Choice_4_5_7 _C178 1.000000000000e+00 + Choice_4_5_7 _C186 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_4_5_8 _C44 1.000000000000e+00 + Choice_4_5_8 _C167 1.000000000000e+00 + Choice_4_5_8 _C179 1.000000000000e+00 + Choice_4_5_8 _C186 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_4_5_9 _C45 1.000000000000e+00 + Choice_4_5_9 _C167 1.000000000000e+00 + Choice_4_5_9 _C180 1.000000000000e+00 + Choice_4_5_9 _C186 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_4_6_1 _C46 1.000000000000e+00 + Choice_4_6_1 _C168 1.000000000000e+00 + Choice_4_6_1 _C172 1.000000000000e+00 + Choice_4_6_1 _C184 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_4_6_2 _C47 1.000000000000e+00 + Choice_4_6_2 _C168 1.000000000000e+00 + Choice_4_6_2 _C173 1.000000000000e+00 + Choice_4_6_2 _C184 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_4_6_3 _C48 1.000000000000e+00 + Choice_4_6_3 _C168 1.000000000000e+00 + Choice_4_6_3 _C174 1.000000000000e+00 + Choice_4_6_3 _C184 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_4_6_4 _C49 1.000000000000e+00 + Choice_4_6_4 _C168 1.000000000000e+00 + Choice_4_6_4 _C175 1.000000000000e+00 + Choice_4_6_4 _C185 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_4_6_5 _C50 1.000000000000e+00 + Choice_4_6_5 _C168 1.000000000000e+00 + Choice_4_6_5 _C176 1.000000000000e+00 + Choice_4_6_5 _C185 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_4_6_6 _C51 1.000000000000e+00 + Choice_4_6_6 _C168 1.000000000000e+00 + Choice_4_6_6 _C177 1.000000000000e+00 + Choice_4_6_6 _C185 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_4_6_7 _C52 1.000000000000e+00 + Choice_4_6_7 _C168 1.000000000000e+00 + Choice_4_6_7 _C178 1.000000000000e+00 + Choice_4_6_7 _C186 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_4_6_8 _C53 1.000000000000e+00 + Choice_4_6_8 _C168 1.000000000000e+00 + Choice_4_6_8 _C179 1.000000000000e+00 + Choice_4_6_8 _C186 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_4_6_9 _C54 1.000000000000e+00 + Choice_4_6_9 _C168 1.000000000000e+00 + Choice_4_6_9 _C180 1.000000000000e+00 + Choice_4_6_9 _C186 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_4_7_1 _C55 1.000000000000e+00 + Choice_4_7_1 _C169 1.000000000000e+00 + Choice_4_7_1 _C172 1.000000000000e+00 + Choice_4_7_1 _C187 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_4_7_2 _C56 1.000000000000e+00 + Choice_4_7_2 _C169 1.000000000000e+00 + Choice_4_7_2 _C173 1.000000000000e+00 + Choice_4_7_2 _C187 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_4_7_3 _C57 1.000000000000e+00 + Choice_4_7_3 _C169 1.000000000000e+00 + Choice_4_7_3 _C174 1.000000000000e+00 + Choice_4_7_3 _C187 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_4_7_4 _C58 1.000000000000e+00 + Choice_4_7_4 _C169 1.000000000000e+00 + Choice_4_7_4 _C175 1.000000000000e+00 + Choice_4_7_4 _C188 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_4_7_5 _C59 1.000000000000e+00 + Choice_4_7_5 _C169 1.000000000000e+00 + Choice_4_7_5 _C176 1.000000000000e+00 + Choice_4_7_5 _C188 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_4_7_6 _C60 1.000000000000e+00 + Choice_4_7_6 _C169 1.000000000000e+00 + Choice_4_7_6 _C177 1.000000000000e+00 + Choice_4_7_6 _C188 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_4_7_7 _C61 1.000000000000e+00 + Choice_4_7_7 _C169 1.000000000000e+00 + Choice_4_7_7 _C178 1.000000000000e+00 + Choice_4_7_7 _C189 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_4_7_8 _C62 1.000000000000e+00 + Choice_4_7_8 _C169 1.000000000000e+00 + Choice_4_7_8 _C179 1.000000000000e+00 + Choice_4_7_8 _C189 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_4_7_9 _C63 1.000000000000e+00 + Choice_4_7_9 _C169 1.000000000000e+00 + Choice_4_7_9 _C180 1.000000000000e+00 + Choice_4_7_9 _C189 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_4_8_1 _C64 1.000000000000e+00 + Choice_4_8_1 _C170 1.000000000000e+00 + Choice_4_8_1 _C172 1.000000000000e+00 + Choice_4_8_1 _C187 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_4_8_2 _C65 1.000000000000e+00 + Choice_4_8_2 _C170 1.000000000000e+00 + Choice_4_8_2 _C173 1.000000000000e+00 + Choice_4_8_2 _C187 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_4_8_3 _C66 1.000000000000e+00 + Choice_4_8_3 _C170 1.000000000000e+00 + Choice_4_8_3 _C174 1.000000000000e+00 + Choice_4_8_3 _C187 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_4_8_4 _C67 1.000000000000e+00 + Choice_4_8_4 _C170 1.000000000000e+00 + Choice_4_8_4 _C175 1.000000000000e+00 + Choice_4_8_4 _C188 1.000000000000e+00 + Choice_4_8_4 _C336 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_4_8_5 _C68 1.000000000000e+00 + Choice_4_8_5 _C170 1.000000000000e+00 + Choice_4_8_5 _C176 1.000000000000e+00 + Choice_4_8_5 _C188 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_4_8_6 _C69 1.000000000000e+00 + Choice_4_8_6 _C170 1.000000000000e+00 + Choice_4_8_6 _C177 1.000000000000e+00 + Choice_4_8_6 _C188 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_4_8_7 _C70 1.000000000000e+00 + Choice_4_8_7 _C170 1.000000000000e+00 + Choice_4_8_7 _C178 1.000000000000e+00 + Choice_4_8_7 _C189 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_4_8_8 _C71 1.000000000000e+00 + Choice_4_8_8 _C170 1.000000000000e+00 + Choice_4_8_8 _C179 1.000000000000e+00 + Choice_4_8_8 _C189 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_4_8_9 _C72 1.000000000000e+00 + Choice_4_8_9 _C170 1.000000000000e+00 + Choice_4_8_9 _C180 1.000000000000e+00 + Choice_4_8_9 _C189 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_4_9_1 _C73 1.000000000000e+00 + Choice_4_9_1 _C171 1.000000000000e+00 + Choice_4_9_1 _C172 1.000000000000e+00 + Choice_4_9_1 _C187 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_4_9_2 _C74 1.000000000000e+00 + Choice_4_9_2 _C171 1.000000000000e+00 + Choice_4_9_2 _C173 1.000000000000e+00 + Choice_4_9_2 _C187 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_4_9_3 _C75 1.000000000000e+00 + Choice_4_9_3 _C171 1.000000000000e+00 + Choice_4_9_3 _C174 1.000000000000e+00 + Choice_4_9_3 _C187 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_4_9_4 _C76 1.000000000000e+00 + Choice_4_9_4 _C171 1.000000000000e+00 + Choice_4_9_4 _C175 1.000000000000e+00 + Choice_4_9_4 _C188 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_4_9_5 _C77 1.000000000000e+00 + Choice_4_9_5 _C171 1.000000000000e+00 + Choice_4_9_5 _C176 1.000000000000e+00 + Choice_4_9_5 _C188 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_4_9_6 _C78 1.000000000000e+00 + Choice_4_9_6 _C171 1.000000000000e+00 + Choice_4_9_6 _C177 1.000000000000e+00 + Choice_4_9_6 _C188 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_4_9_7 _C79 1.000000000000e+00 + Choice_4_9_7 _C171 1.000000000000e+00 + Choice_4_9_7 _C178 1.000000000000e+00 + Choice_4_9_7 _C189 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_4_9_8 _C80 1.000000000000e+00 + Choice_4_9_8 _C171 1.000000000000e+00 + Choice_4_9_8 _C179 1.000000000000e+00 + Choice_4_9_8 _C189 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_4_9_9 _C81 1.000000000000e+00 + Choice_4_9_9 _C171 1.000000000000e+00 + Choice_4_9_9 _C180 1.000000000000e+00 + Choice_4_9_9 _C189 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_5_1_1 _C1 1.000000000000e+00 + Choice_5_1_1 _C190 1.000000000000e+00 + Choice_5_1_1 _C199 1.000000000000e+00 + Choice_5_1_1 _C208 1.000000000000e+00 + Choice_5_1_1 _C325 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_5_1_2 _C2 1.000000000000e+00 + Choice_5_1_2 _C190 1.000000000000e+00 + Choice_5_1_2 _C200 1.000000000000e+00 + Choice_5_1_2 _C208 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_5_1_3 _C3 1.000000000000e+00 + Choice_5_1_3 _C190 1.000000000000e+00 + Choice_5_1_3 _C201 1.000000000000e+00 + Choice_5_1_3 _C208 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_5_1_4 _C4 1.000000000000e+00 + Choice_5_1_4 _C190 1.000000000000e+00 + Choice_5_1_4 _C202 1.000000000000e+00 + Choice_5_1_4 _C209 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_5_1_5 _C5 1.000000000000e+00 + Choice_5_1_5 _C190 1.000000000000e+00 + Choice_5_1_5 _C203 1.000000000000e+00 + Choice_5_1_5 _C209 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_5_1_6 _C6 1.000000000000e+00 + Choice_5_1_6 _C190 1.000000000000e+00 + Choice_5_1_6 _C204 1.000000000000e+00 + Choice_5_1_6 _C209 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_5_1_7 _C7 1.000000000000e+00 + Choice_5_1_7 _C190 1.000000000000e+00 + Choice_5_1_7 _C205 1.000000000000e+00 + Choice_5_1_7 _C210 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_5_1_8 _C8 1.000000000000e+00 + Choice_5_1_8 _C190 1.000000000000e+00 + Choice_5_1_8 _C206 1.000000000000e+00 + Choice_5_1_8 _C210 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_5_1_9 _C9 1.000000000000e+00 + Choice_5_1_9 _C190 1.000000000000e+00 + Choice_5_1_9 _C207 1.000000000000e+00 + Choice_5_1_9 _C210 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_5_2_1 _C10 1.000000000000e+00 + Choice_5_2_1 _C191 1.000000000000e+00 + Choice_5_2_1 _C199 1.000000000000e+00 + Choice_5_2_1 _C208 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_5_2_2 _C11 1.000000000000e+00 + Choice_5_2_2 _C191 1.000000000000e+00 + Choice_5_2_2 _C200 1.000000000000e+00 + Choice_5_2_2 _C208 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_5_2_3 _C12 1.000000000000e+00 + Choice_5_2_3 _C191 1.000000000000e+00 + Choice_5_2_3 _C201 1.000000000000e+00 + Choice_5_2_3 _C208 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_5_2_4 _C13 1.000000000000e+00 + Choice_5_2_4 _C191 1.000000000000e+00 + Choice_5_2_4 _C202 1.000000000000e+00 + Choice_5_2_4 _C209 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_5_2_5 _C14 1.000000000000e+00 + Choice_5_2_5 _C191 1.000000000000e+00 + Choice_5_2_5 _C203 1.000000000000e+00 + Choice_5_2_5 _C209 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_5_2_6 _C15 1.000000000000e+00 + Choice_5_2_6 _C191 1.000000000000e+00 + Choice_5_2_6 _C204 1.000000000000e+00 + Choice_5_2_6 _C209 1.000000000000e+00 + Choice_5_2_6 _C343 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_5_2_7 _C16 1.000000000000e+00 + Choice_5_2_7 _C191 1.000000000000e+00 + Choice_5_2_7 _C205 1.000000000000e+00 + Choice_5_2_7 _C210 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_5_2_8 _C17 1.000000000000e+00 + Choice_5_2_8 _C191 1.000000000000e+00 + Choice_5_2_8 _C206 1.000000000000e+00 + Choice_5_2_8 _C210 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_5_2_9 _C18 1.000000000000e+00 + Choice_5_2_9 _C191 1.000000000000e+00 + Choice_5_2_9 _C207 1.000000000000e+00 + Choice_5_2_9 _C210 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_5_3_1 _C19 1.000000000000e+00 + Choice_5_3_1 _C192 1.000000000000e+00 + Choice_5_3_1 _C199 1.000000000000e+00 + Choice_5_3_1 _C208 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_5_3_2 _C20 1.000000000000e+00 + Choice_5_3_2 _C192 1.000000000000e+00 + Choice_5_3_2 _C200 1.000000000000e+00 + Choice_5_3_2 _C208 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_5_3_3 _C21 1.000000000000e+00 + Choice_5_3_3 _C192 1.000000000000e+00 + Choice_5_3_3 _C201 1.000000000000e+00 + Choice_5_3_3 _C208 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_5_3_4 _C22 1.000000000000e+00 + Choice_5_3_4 _C192 1.000000000000e+00 + Choice_5_3_4 _C202 1.000000000000e+00 + Choice_5_3_4 _C209 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_5_3_5 _C23 1.000000000000e+00 + Choice_5_3_5 _C192 1.000000000000e+00 + Choice_5_3_5 _C203 1.000000000000e+00 + Choice_5_3_5 _C209 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_5_3_6 _C24 1.000000000000e+00 + Choice_5_3_6 _C192 1.000000000000e+00 + Choice_5_3_6 _C204 1.000000000000e+00 + Choice_5_3_6 _C209 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_5_3_7 _C25 1.000000000000e+00 + Choice_5_3_7 _C192 1.000000000000e+00 + Choice_5_3_7 _C205 1.000000000000e+00 + Choice_5_3_7 _C210 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_5_3_8 _C26 1.000000000000e+00 + Choice_5_3_8 _C192 1.000000000000e+00 + Choice_5_3_8 _C206 1.000000000000e+00 + Choice_5_3_8 _C210 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_5_3_9 _C27 1.000000000000e+00 + Choice_5_3_9 _C192 1.000000000000e+00 + Choice_5_3_9 _C207 1.000000000000e+00 + Choice_5_3_9 _C210 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_5_4_1 _C28 1.000000000000e+00 + Choice_5_4_1 _C193 1.000000000000e+00 + Choice_5_4_1 _C199 1.000000000000e+00 + Choice_5_4_1 _C211 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_5_4_2 _C29 1.000000000000e+00 + Choice_5_4_2 _C193 1.000000000000e+00 + Choice_5_4_2 _C200 1.000000000000e+00 + Choice_5_4_2 _C211 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_5_4_3 _C30 1.000000000000e+00 + Choice_5_4_3 _C193 1.000000000000e+00 + Choice_5_4_3 _C201 1.000000000000e+00 + Choice_5_4_3 _C211 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_5_4_4 _C31 1.000000000000e+00 + Choice_5_4_4 _C193 1.000000000000e+00 + Choice_5_4_4 _C202 1.000000000000e+00 + Choice_5_4_4 _C212 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_5_4_5 _C32 1.000000000000e+00 + Choice_5_4_5 _C193 1.000000000000e+00 + Choice_5_4_5 _C203 1.000000000000e+00 + Choice_5_4_5 _C212 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_5_4_6 _C33 1.000000000000e+00 + Choice_5_4_6 _C193 1.000000000000e+00 + Choice_5_4_6 _C204 1.000000000000e+00 + Choice_5_4_6 _C212 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_5_4_7 _C34 1.000000000000e+00 + Choice_5_4_7 _C193 1.000000000000e+00 + Choice_5_4_7 _C205 1.000000000000e+00 + Choice_5_4_7 _C213 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_5_4_8 _C35 1.000000000000e+00 + Choice_5_4_8 _C193 1.000000000000e+00 + Choice_5_4_8 _C206 1.000000000000e+00 + Choice_5_4_8 _C213 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_5_4_9 _C36 1.000000000000e+00 + Choice_5_4_9 _C193 1.000000000000e+00 + Choice_5_4_9 _C207 1.000000000000e+00 + Choice_5_4_9 _C213 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_5_5_1 _C37 1.000000000000e+00 + Choice_5_5_1 _C194 1.000000000000e+00 + Choice_5_5_1 _C199 1.000000000000e+00 + Choice_5_5_1 _C211 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_5_5_2 _C38 1.000000000000e+00 + Choice_5_5_2 _C194 1.000000000000e+00 + Choice_5_5_2 _C200 1.000000000000e+00 + Choice_5_5_2 _C211 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_5_5_3 _C39 1.000000000000e+00 + Choice_5_5_3 _C194 1.000000000000e+00 + Choice_5_5_3 _C201 1.000000000000e+00 + Choice_5_5_3 _C211 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_5_5_4 _C40 1.000000000000e+00 + Choice_5_5_4 _C194 1.000000000000e+00 + Choice_5_5_4 _C202 1.000000000000e+00 + Choice_5_5_4 _C212 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_5_5_5 _C41 1.000000000000e+00 + Choice_5_5_5 _C194 1.000000000000e+00 + Choice_5_5_5 _C203 1.000000000000e+00 + Choice_5_5_5 _C212 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_5_5_6 _C42 1.000000000000e+00 + Choice_5_5_6 _C194 1.000000000000e+00 + Choice_5_5_6 _C204 1.000000000000e+00 + Choice_5_5_6 _C212 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_5_5_7 _C43 1.000000000000e+00 + Choice_5_5_7 _C194 1.000000000000e+00 + Choice_5_5_7 _C205 1.000000000000e+00 + Choice_5_5_7 _C213 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_5_5_8 _C44 1.000000000000e+00 + Choice_5_5_8 _C194 1.000000000000e+00 + Choice_5_5_8 _C206 1.000000000000e+00 + Choice_5_5_8 _C213 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_5_5_9 _C45 1.000000000000e+00 + Choice_5_5_9 _C194 1.000000000000e+00 + Choice_5_5_9 _C207 1.000000000000e+00 + Choice_5_5_9 _C213 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_5_6_1 _C46 1.000000000000e+00 + Choice_5_6_1 _C195 1.000000000000e+00 + Choice_5_6_1 _C199 1.000000000000e+00 + Choice_5_6_1 _C211 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_5_6_2 _C47 1.000000000000e+00 + Choice_5_6_2 _C195 1.000000000000e+00 + Choice_5_6_2 _C200 1.000000000000e+00 + Choice_5_6_2 _C211 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_5_6_3 _C48 1.000000000000e+00 + Choice_5_6_3 _C195 1.000000000000e+00 + Choice_5_6_3 _C201 1.000000000000e+00 + Choice_5_6_3 _C211 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_5_6_4 _C49 1.000000000000e+00 + Choice_5_6_4 _C195 1.000000000000e+00 + Choice_5_6_4 _C202 1.000000000000e+00 + Choice_5_6_4 _C212 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_5_6_5 _C50 1.000000000000e+00 + Choice_5_6_5 _C195 1.000000000000e+00 + Choice_5_6_5 _C203 1.000000000000e+00 + Choice_5_6_5 _C212 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_5_6_6 _C51 1.000000000000e+00 + Choice_5_6_6 _C195 1.000000000000e+00 + Choice_5_6_6 _C204 1.000000000000e+00 + Choice_5_6_6 _C212 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_5_6_7 _C52 1.000000000000e+00 + Choice_5_6_7 _C195 1.000000000000e+00 + Choice_5_6_7 _C205 1.000000000000e+00 + Choice_5_6_7 _C213 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_5_6_8 _C53 1.000000000000e+00 + Choice_5_6_8 _C195 1.000000000000e+00 + Choice_5_6_8 _C206 1.000000000000e+00 + Choice_5_6_8 _C213 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_5_6_9 _C54 1.000000000000e+00 + Choice_5_6_9 _C195 1.000000000000e+00 + Choice_5_6_9 _C207 1.000000000000e+00 + Choice_5_6_9 _C213 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_5_7_1 _C55 1.000000000000e+00 + Choice_5_7_1 _C196 1.000000000000e+00 + Choice_5_7_1 _C199 1.000000000000e+00 + Choice_5_7_1 _C214 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_5_7_2 _C56 1.000000000000e+00 + Choice_5_7_2 _C196 1.000000000000e+00 + Choice_5_7_2 _C200 1.000000000000e+00 + Choice_5_7_2 _C214 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_5_7_3 _C57 1.000000000000e+00 + Choice_5_7_3 _C196 1.000000000000e+00 + Choice_5_7_3 _C201 1.000000000000e+00 + Choice_5_7_3 _C214 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_5_7_4 _C58 1.000000000000e+00 + Choice_5_7_4 _C196 1.000000000000e+00 + Choice_5_7_4 _C202 1.000000000000e+00 + Choice_5_7_4 _C215 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_5_7_5 _C59 1.000000000000e+00 + Choice_5_7_5 _C196 1.000000000000e+00 + Choice_5_7_5 _C203 1.000000000000e+00 + Choice_5_7_5 _C215 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_5_7_6 _C60 1.000000000000e+00 + Choice_5_7_6 _C196 1.000000000000e+00 + Choice_5_7_6 _C204 1.000000000000e+00 + Choice_5_7_6 _C215 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_5_7_7 _C61 1.000000000000e+00 + Choice_5_7_7 _C196 1.000000000000e+00 + Choice_5_7_7 _C205 1.000000000000e+00 + Choice_5_7_7 _C216 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_5_7_8 _C62 1.000000000000e+00 + Choice_5_7_8 _C196 1.000000000000e+00 + Choice_5_7_8 _C206 1.000000000000e+00 + Choice_5_7_8 _C216 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_5_7_9 _C63 1.000000000000e+00 + Choice_5_7_9 _C196 1.000000000000e+00 + Choice_5_7_9 _C207 1.000000000000e+00 + Choice_5_7_9 _C216 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_5_8_1 _C64 1.000000000000e+00 + Choice_5_8_1 _C197 1.000000000000e+00 + Choice_5_8_1 _C199 1.000000000000e+00 + Choice_5_8_1 _C214 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_5_8_2 _C65 1.000000000000e+00 + Choice_5_8_2 _C197 1.000000000000e+00 + Choice_5_8_2 _C200 1.000000000000e+00 + Choice_5_8_2 _C214 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_5_8_3 _C66 1.000000000000e+00 + Choice_5_8_3 _C197 1.000000000000e+00 + Choice_5_8_3 _C201 1.000000000000e+00 + Choice_5_8_3 _C214 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_5_8_4 _C67 1.000000000000e+00 + Choice_5_8_4 _C197 1.000000000000e+00 + Choice_5_8_4 _C202 1.000000000000e+00 + Choice_5_8_4 _C215 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_5_8_5 _C68 1.000000000000e+00 + Choice_5_8_5 _C197 1.000000000000e+00 + Choice_5_8_5 _C203 1.000000000000e+00 + Choice_5_8_5 _C215 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_5_8_6 _C69 1.000000000000e+00 + Choice_5_8_6 _C197 1.000000000000e+00 + Choice_5_8_6 _C204 1.000000000000e+00 + Choice_5_8_6 _C215 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_5_8_7 _C70 1.000000000000e+00 + Choice_5_8_7 _C197 1.000000000000e+00 + Choice_5_8_7 _C205 1.000000000000e+00 + Choice_5_8_7 _C216 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_5_8_8 _C71 1.000000000000e+00 + Choice_5_8_8 _C197 1.000000000000e+00 + Choice_5_8_8 _C206 1.000000000000e+00 + Choice_5_8_8 _C216 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_5_8_9 _C72 1.000000000000e+00 + Choice_5_8_9 _C197 1.000000000000e+00 + Choice_5_8_9 _C207 1.000000000000e+00 + Choice_5_8_9 _C216 1.000000000000e+00 + Choice_5_8_9 _C353 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_5_9_1 _C73 1.000000000000e+00 + Choice_5_9_1 _C198 1.000000000000e+00 + Choice_5_9_1 _C199 1.000000000000e+00 + Choice_5_9_1 _C214 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_5_9_2 _C74 1.000000000000e+00 + Choice_5_9_2 _C198 1.000000000000e+00 + Choice_5_9_2 _C200 1.000000000000e+00 + Choice_5_9_2 _C214 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_5_9_3 _C75 1.000000000000e+00 + Choice_5_9_3 _C198 1.000000000000e+00 + Choice_5_9_3 _C201 1.000000000000e+00 + Choice_5_9_3 _C214 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_5_9_4 _C76 1.000000000000e+00 + Choice_5_9_4 _C198 1.000000000000e+00 + Choice_5_9_4 _C202 1.000000000000e+00 + Choice_5_9_4 _C215 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_5_9_5 _C77 1.000000000000e+00 + Choice_5_9_5 _C198 1.000000000000e+00 + Choice_5_9_5 _C203 1.000000000000e+00 + Choice_5_9_5 _C215 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_5_9_6 _C78 1.000000000000e+00 + Choice_5_9_6 _C198 1.000000000000e+00 + Choice_5_9_6 _C204 1.000000000000e+00 + Choice_5_9_6 _C215 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_5_9_7 _C79 1.000000000000e+00 + Choice_5_9_7 _C198 1.000000000000e+00 + Choice_5_9_7 _C205 1.000000000000e+00 + Choice_5_9_7 _C216 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_5_9_8 _C80 1.000000000000e+00 + Choice_5_9_8 _C198 1.000000000000e+00 + Choice_5_9_8 _C206 1.000000000000e+00 + Choice_5_9_8 _C216 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_5_9_9 _C81 1.000000000000e+00 + Choice_5_9_9 _C198 1.000000000000e+00 + Choice_5_9_9 _C207 1.000000000000e+00 + Choice_5_9_9 _C216 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_6_1_1 _C1 1.000000000000e+00 + Choice_6_1_1 _C217 1.000000000000e+00 + Choice_6_1_1 _C226 1.000000000000e+00 + Choice_6_1_1 _C235 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_6_1_2 _C2 1.000000000000e+00 + Choice_6_1_2 _C217 1.000000000000e+00 + Choice_6_1_2 _C227 1.000000000000e+00 + Choice_6_1_2 _C235 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_6_1_3 _C3 1.000000000000e+00 + Choice_6_1_3 _C217 1.000000000000e+00 + Choice_6_1_3 _C228 1.000000000000e+00 + Choice_6_1_3 _C235 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_6_1_4 _C4 1.000000000000e+00 + Choice_6_1_4 _C217 1.000000000000e+00 + Choice_6_1_4 _C229 1.000000000000e+00 + Choice_6_1_4 _C236 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_6_1_5 _C5 1.000000000000e+00 + Choice_6_1_5 _C217 1.000000000000e+00 + Choice_6_1_5 _C230 1.000000000000e+00 + Choice_6_1_5 _C236 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_6_1_6 _C6 1.000000000000e+00 + Choice_6_1_6 _C217 1.000000000000e+00 + Choice_6_1_6 _C231 1.000000000000e+00 + Choice_6_1_6 _C236 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_6_1_7 _C7 1.000000000000e+00 + Choice_6_1_7 _C217 1.000000000000e+00 + Choice_6_1_7 _C232 1.000000000000e+00 + Choice_6_1_7 _C237 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_6_1_8 _C8 1.000000000000e+00 + Choice_6_1_8 _C217 1.000000000000e+00 + Choice_6_1_8 _C233 1.000000000000e+00 + Choice_6_1_8 _C237 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_6_1_9 _C9 1.000000000000e+00 + Choice_6_1_9 _C217 1.000000000000e+00 + Choice_6_1_9 _C234 1.000000000000e+00 + Choice_6_1_9 _C237 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_6_2_1 _C10 1.000000000000e+00 + Choice_6_2_1 _C218 1.000000000000e+00 + Choice_6_2_1 _C226 1.000000000000e+00 + Choice_6_2_1 _C235 1.000000000000e+00 + Choice_6_2_1 _C326 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_6_2_2 _C11 1.000000000000e+00 + Choice_6_2_2 _C218 1.000000000000e+00 + Choice_6_2_2 _C227 1.000000000000e+00 + Choice_6_2_2 _C235 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_6_2_3 _C12 1.000000000000e+00 + Choice_6_2_3 _C218 1.000000000000e+00 + Choice_6_2_3 _C228 1.000000000000e+00 + Choice_6_2_3 _C235 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_6_2_4 _C13 1.000000000000e+00 + Choice_6_2_4 _C218 1.000000000000e+00 + Choice_6_2_4 _C229 1.000000000000e+00 + Choice_6_2_4 _C236 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_6_2_5 _C14 1.000000000000e+00 + Choice_6_2_5 _C218 1.000000000000e+00 + Choice_6_2_5 _C230 1.000000000000e+00 + Choice_6_2_5 _C236 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_6_2_6 _C15 1.000000000000e+00 + Choice_6_2_6 _C218 1.000000000000e+00 + Choice_6_2_6 _C231 1.000000000000e+00 + Choice_6_2_6 _C236 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_6_2_7 _C16 1.000000000000e+00 + Choice_6_2_7 _C218 1.000000000000e+00 + Choice_6_2_7 _C232 1.000000000000e+00 + Choice_6_2_7 _C237 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_6_2_8 _C17 1.000000000000e+00 + Choice_6_2_8 _C218 1.000000000000e+00 + Choice_6_2_8 _C233 1.000000000000e+00 + Choice_6_2_8 _C237 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_6_2_9 _C18 1.000000000000e+00 + Choice_6_2_9 _C218 1.000000000000e+00 + Choice_6_2_9 _C234 1.000000000000e+00 + Choice_6_2_9 _C237 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_6_3_1 _C19 1.000000000000e+00 + Choice_6_3_1 _C219 1.000000000000e+00 + Choice_6_3_1 _C226 1.000000000000e+00 + Choice_6_3_1 _C235 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_6_3_2 _C20 1.000000000000e+00 + Choice_6_3_2 _C219 1.000000000000e+00 + Choice_6_3_2 _C227 1.000000000000e+00 + Choice_6_3_2 _C235 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_6_3_3 _C21 1.000000000000e+00 + Choice_6_3_3 _C219 1.000000000000e+00 + Choice_6_3_3 _C228 1.000000000000e+00 + Choice_6_3_3 _C235 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_6_3_4 _C22 1.000000000000e+00 + Choice_6_3_4 _C219 1.000000000000e+00 + Choice_6_3_4 _C229 1.000000000000e+00 + Choice_6_3_4 _C236 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_6_3_5 _C23 1.000000000000e+00 + Choice_6_3_5 _C219 1.000000000000e+00 + Choice_6_3_5 _C230 1.000000000000e+00 + Choice_6_3_5 _C236 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_6_3_6 _C24 1.000000000000e+00 + Choice_6_3_6 _C219 1.000000000000e+00 + Choice_6_3_6 _C231 1.000000000000e+00 + Choice_6_3_6 _C236 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_6_3_7 _C25 1.000000000000e+00 + Choice_6_3_7 _C219 1.000000000000e+00 + Choice_6_3_7 _C232 1.000000000000e+00 + Choice_6_3_7 _C237 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_6_3_8 _C26 1.000000000000e+00 + Choice_6_3_8 _C219 1.000000000000e+00 + Choice_6_3_8 _C233 1.000000000000e+00 + Choice_6_3_8 _C237 1.000000000000e+00 + Choice_6_3_8 _C347 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_6_3_9 _C27 1.000000000000e+00 + Choice_6_3_9 _C219 1.000000000000e+00 + Choice_6_3_9 _C234 1.000000000000e+00 + Choice_6_3_9 _C237 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_6_4_1 _C28 1.000000000000e+00 + Choice_6_4_1 _C220 1.000000000000e+00 + Choice_6_4_1 _C226 1.000000000000e+00 + Choice_6_4_1 _C238 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_6_4_2 _C29 1.000000000000e+00 + Choice_6_4_2 _C220 1.000000000000e+00 + Choice_6_4_2 _C227 1.000000000000e+00 + Choice_6_4_2 _C238 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_6_4_3 _C30 1.000000000000e+00 + Choice_6_4_3 _C220 1.000000000000e+00 + Choice_6_4_3 _C228 1.000000000000e+00 + Choice_6_4_3 _C238 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_6_4_4 _C31 1.000000000000e+00 + Choice_6_4_4 _C220 1.000000000000e+00 + Choice_6_4_4 _C229 1.000000000000e+00 + Choice_6_4_4 _C239 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_6_4_5 _C32 1.000000000000e+00 + Choice_6_4_5 _C220 1.000000000000e+00 + Choice_6_4_5 _C230 1.000000000000e+00 + Choice_6_4_5 _C239 1.000000000000e+00 + Choice_6_4_5 _C339 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_6_4_6 _C33 1.000000000000e+00 + Choice_6_4_6 _C220 1.000000000000e+00 + Choice_6_4_6 _C231 1.000000000000e+00 + Choice_6_4_6 _C239 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_6_4_7 _C34 1.000000000000e+00 + Choice_6_4_7 _C220 1.000000000000e+00 + Choice_6_4_7 _C232 1.000000000000e+00 + Choice_6_4_7 _C240 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_6_4_8 _C35 1.000000000000e+00 + Choice_6_4_8 _C220 1.000000000000e+00 + Choice_6_4_8 _C233 1.000000000000e+00 + Choice_6_4_8 _C240 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_6_4_9 _C36 1.000000000000e+00 + Choice_6_4_9 _C220 1.000000000000e+00 + Choice_6_4_9 _C234 1.000000000000e+00 + Choice_6_4_9 _C240 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_6_5_1 _C37 1.000000000000e+00 + Choice_6_5_1 _C221 1.000000000000e+00 + Choice_6_5_1 _C226 1.000000000000e+00 + Choice_6_5_1 _C238 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_6_5_2 _C38 1.000000000000e+00 + Choice_6_5_2 _C221 1.000000000000e+00 + Choice_6_5_2 _C227 1.000000000000e+00 + Choice_6_5_2 _C238 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_6_5_3 _C39 1.000000000000e+00 + Choice_6_5_3 _C221 1.000000000000e+00 + Choice_6_5_3 _C228 1.000000000000e+00 + Choice_6_5_3 _C238 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_6_5_4 _C40 1.000000000000e+00 + Choice_6_5_4 _C221 1.000000000000e+00 + Choice_6_5_4 _C229 1.000000000000e+00 + Choice_6_5_4 _C239 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_6_5_5 _C41 1.000000000000e+00 + Choice_6_5_5 _C221 1.000000000000e+00 + Choice_6_5_5 _C230 1.000000000000e+00 + Choice_6_5_5 _C239 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_6_5_6 _C42 1.000000000000e+00 + Choice_6_5_6 _C221 1.000000000000e+00 + Choice_6_5_6 _C231 1.000000000000e+00 + Choice_6_5_6 _C239 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_6_5_7 _C43 1.000000000000e+00 + Choice_6_5_7 _C221 1.000000000000e+00 + Choice_6_5_7 _C232 1.000000000000e+00 + Choice_6_5_7 _C240 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_6_5_8 _C44 1.000000000000e+00 + Choice_6_5_8 _C221 1.000000000000e+00 + Choice_6_5_8 _C233 1.000000000000e+00 + Choice_6_5_8 _C240 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_6_5_9 _C45 1.000000000000e+00 + Choice_6_5_9 _C221 1.000000000000e+00 + Choice_6_5_9 _C234 1.000000000000e+00 + Choice_6_5_9 _C240 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_6_6_1 _C46 1.000000000000e+00 + Choice_6_6_1 _C222 1.000000000000e+00 + Choice_6_6_1 _C226 1.000000000000e+00 + Choice_6_6_1 _C238 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_6_6_2 _C47 1.000000000000e+00 + Choice_6_6_2 _C222 1.000000000000e+00 + Choice_6_6_2 _C227 1.000000000000e+00 + Choice_6_6_2 _C238 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_6_6_3 _C48 1.000000000000e+00 + Choice_6_6_3 _C222 1.000000000000e+00 + Choice_6_6_3 _C228 1.000000000000e+00 + Choice_6_6_3 _C238 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_6_6_4 _C49 1.000000000000e+00 + Choice_6_6_4 _C222 1.000000000000e+00 + Choice_6_6_4 _C229 1.000000000000e+00 + Choice_6_6_4 _C239 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_6_6_5 _C50 1.000000000000e+00 + Choice_6_6_5 _C222 1.000000000000e+00 + Choice_6_6_5 _C230 1.000000000000e+00 + Choice_6_6_5 _C239 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_6_6_6 _C51 1.000000000000e+00 + Choice_6_6_6 _C222 1.000000000000e+00 + Choice_6_6_6 _C231 1.000000000000e+00 + Choice_6_6_6 _C239 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_6_6_7 _C52 1.000000000000e+00 + Choice_6_6_7 _C222 1.000000000000e+00 + Choice_6_6_7 _C232 1.000000000000e+00 + Choice_6_6_7 _C240 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_6_6_8 _C53 1.000000000000e+00 + Choice_6_6_8 _C222 1.000000000000e+00 + Choice_6_6_8 _C233 1.000000000000e+00 + Choice_6_6_8 _C240 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_6_6_9 _C54 1.000000000000e+00 + Choice_6_6_9 _C222 1.000000000000e+00 + Choice_6_6_9 _C234 1.000000000000e+00 + Choice_6_6_9 _C240 1.000000000000e+00 + Choice_6_6_9 _C352 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_6_7_1 _C55 1.000000000000e+00 + Choice_6_7_1 _C223 1.000000000000e+00 + Choice_6_7_1 _C226 1.000000000000e+00 + Choice_6_7_1 _C241 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_6_7_2 _C56 1.000000000000e+00 + Choice_6_7_2 _C223 1.000000000000e+00 + Choice_6_7_2 _C227 1.000000000000e+00 + Choice_6_7_2 _C241 1.000000000000e+00 + Choice_6_7_2 _C332 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_6_7_3 _C57 1.000000000000e+00 + Choice_6_7_3 _C223 1.000000000000e+00 + Choice_6_7_3 _C228 1.000000000000e+00 + Choice_6_7_3 _C241 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_6_7_4 _C58 1.000000000000e+00 + Choice_6_7_4 _C223 1.000000000000e+00 + Choice_6_7_4 _C229 1.000000000000e+00 + Choice_6_7_4 _C242 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_6_7_5 _C59 1.000000000000e+00 + Choice_6_7_5 _C223 1.000000000000e+00 + Choice_6_7_5 _C230 1.000000000000e+00 + Choice_6_7_5 _C242 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_6_7_6 _C60 1.000000000000e+00 + Choice_6_7_6 _C223 1.000000000000e+00 + Choice_6_7_6 _C231 1.000000000000e+00 + Choice_6_7_6 _C242 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_6_7_7 _C61 1.000000000000e+00 + Choice_6_7_7 _C223 1.000000000000e+00 + Choice_6_7_7 _C232 1.000000000000e+00 + Choice_6_7_7 _C243 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_6_7_8 _C62 1.000000000000e+00 + Choice_6_7_8 _C223 1.000000000000e+00 + Choice_6_7_8 _C233 1.000000000000e+00 + Choice_6_7_8 _C243 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_6_7_9 _C63 1.000000000000e+00 + Choice_6_7_9 _C223 1.000000000000e+00 + Choice_6_7_9 _C234 1.000000000000e+00 + Choice_6_7_9 _C243 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_6_8_1 _C64 1.000000000000e+00 + Choice_6_8_1 _C224 1.000000000000e+00 + Choice_6_8_1 _C226 1.000000000000e+00 + Choice_6_8_1 _C241 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_6_8_2 _C65 1.000000000000e+00 + Choice_6_8_2 _C224 1.000000000000e+00 + Choice_6_8_2 _C227 1.000000000000e+00 + Choice_6_8_2 _C241 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_6_8_3 _C66 1.000000000000e+00 + Choice_6_8_3 _C224 1.000000000000e+00 + Choice_6_8_3 _C228 1.000000000000e+00 + Choice_6_8_3 _C241 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_6_8_4 _C67 1.000000000000e+00 + Choice_6_8_4 _C224 1.000000000000e+00 + Choice_6_8_4 _C229 1.000000000000e+00 + Choice_6_8_4 _C242 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_6_8_5 _C68 1.000000000000e+00 + Choice_6_8_5 _C224 1.000000000000e+00 + Choice_6_8_5 _C230 1.000000000000e+00 + Choice_6_8_5 _C242 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_6_8_6 _C69 1.000000000000e+00 + Choice_6_8_6 _C224 1.000000000000e+00 + Choice_6_8_6 _C231 1.000000000000e+00 + Choice_6_8_6 _C242 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_6_8_7 _C70 1.000000000000e+00 + Choice_6_8_7 _C224 1.000000000000e+00 + Choice_6_8_7 _C232 1.000000000000e+00 + Choice_6_8_7 _C243 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_6_8_8 _C71 1.000000000000e+00 + Choice_6_8_8 _C224 1.000000000000e+00 + Choice_6_8_8 _C233 1.000000000000e+00 + Choice_6_8_8 _C243 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_6_8_9 _C72 1.000000000000e+00 + Choice_6_8_9 _C224 1.000000000000e+00 + Choice_6_8_9 _C234 1.000000000000e+00 + Choice_6_8_9 _C243 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_6_9_1 _C73 1.000000000000e+00 + Choice_6_9_1 _C225 1.000000000000e+00 + Choice_6_9_1 _C226 1.000000000000e+00 + Choice_6_9_1 _C241 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_6_9_2 _C74 1.000000000000e+00 + Choice_6_9_2 _C225 1.000000000000e+00 + Choice_6_9_2 _C227 1.000000000000e+00 + Choice_6_9_2 _C241 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_6_9_3 _C75 1.000000000000e+00 + Choice_6_9_3 _C225 1.000000000000e+00 + Choice_6_9_3 _C228 1.000000000000e+00 + Choice_6_9_3 _C241 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_6_9_4 _C76 1.000000000000e+00 + Choice_6_9_4 _C225 1.000000000000e+00 + Choice_6_9_4 _C229 1.000000000000e+00 + Choice_6_9_4 _C242 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_6_9_5 _C77 1.000000000000e+00 + Choice_6_9_5 _C225 1.000000000000e+00 + Choice_6_9_5 _C230 1.000000000000e+00 + Choice_6_9_5 _C242 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_6_9_6 _C78 1.000000000000e+00 + Choice_6_9_6 _C225 1.000000000000e+00 + Choice_6_9_6 _C231 1.000000000000e+00 + Choice_6_9_6 _C242 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_6_9_7 _C79 1.000000000000e+00 + Choice_6_9_7 _C225 1.000000000000e+00 + Choice_6_9_7 _C232 1.000000000000e+00 + Choice_6_9_7 _C243 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_6_9_8 _C80 1.000000000000e+00 + Choice_6_9_8 _C225 1.000000000000e+00 + Choice_6_9_8 _C233 1.000000000000e+00 + Choice_6_9_8 _C243 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_6_9_9 _C81 1.000000000000e+00 + Choice_6_9_9 _C225 1.000000000000e+00 + Choice_6_9_9 _C234 1.000000000000e+00 + Choice_6_9_9 _C243 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_7_1_1 _C1 1.000000000000e+00 + Choice_7_1_1 _C244 1.000000000000e+00 + Choice_7_1_1 _C253 1.000000000000e+00 + Choice_7_1_1 _C262 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_7_1_2 _C2 1.000000000000e+00 + Choice_7_1_2 _C244 1.000000000000e+00 + Choice_7_1_2 _C254 1.000000000000e+00 + Choice_7_1_2 _C262 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_7_1_3 _C3 1.000000000000e+00 + Choice_7_1_3 _C244 1.000000000000e+00 + Choice_7_1_3 _C255 1.000000000000e+00 + Choice_7_1_3 _C262 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_7_1_4 _C4 1.000000000000e+00 + Choice_7_1_4 _C244 1.000000000000e+00 + Choice_7_1_4 _C256 1.000000000000e+00 + Choice_7_1_4 _C263 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_7_1_5 _C5 1.000000000000e+00 + Choice_7_1_5 _C244 1.000000000000e+00 + Choice_7_1_5 _C257 1.000000000000e+00 + Choice_7_1_5 _C263 1.000000000000e+00 + Choice_7_1_5 _C337 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_7_1_6 _C6 1.000000000000e+00 + Choice_7_1_6 _C244 1.000000000000e+00 + Choice_7_1_6 _C258 1.000000000000e+00 + Choice_7_1_6 _C263 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_7_1_7 _C7 1.000000000000e+00 + Choice_7_1_7 _C244 1.000000000000e+00 + Choice_7_1_7 _C259 1.000000000000e+00 + Choice_7_1_7 _C264 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_7_1_8 _C8 1.000000000000e+00 + Choice_7_1_8 _C244 1.000000000000e+00 + Choice_7_1_8 _C260 1.000000000000e+00 + Choice_7_1_8 _C264 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_7_1_9 _C9 1.000000000000e+00 + Choice_7_1_9 _C244 1.000000000000e+00 + Choice_7_1_9 _C261 1.000000000000e+00 + Choice_7_1_9 _C264 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_7_2_1 _C10 1.000000000000e+00 + Choice_7_2_1 _C245 1.000000000000e+00 + Choice_7_2_1 _C253 1.000000000000e+00 + Choice_7_2_1 _C262 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_7_2_2 _C11 1.000000000000e+00 + Choice_7_2_2 _C245 1.000000000000e+00 + Choice_7_2_2 _C254 1.000000000000e+00 + Choice_7_2_2 _C262 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_7_2_3 _C12 1.000000000000e+00 + Choice_7_2_3 _C245 1.000000000000e+00 + Choice_7_2_3 _C255 1.000000000000e+00 + Choice_7_2_3 _C262 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_7_2_4 _C13 1.000000000000e+00 + Choice_7_2_4 _C245 1.000000000000e+00 + Choice_7_2_4 _C256 1.000000000000e+00 + Choice_7_2_4 _C263 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_7_2_5 _C14 1.000000000000e+00 + Choice_7_2_5 _C245 1.000000000000e+00 + Choice_7_2_5 _C257 1.000000000000e+00 + Choice_7_2_5 _C263 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_7_2_6 _C15 1.000000000000e+00 + Choice_7_2_6 _C245 1.000000000000e+00 + Choice_7_2_6 _C258 1.000000000000e+00 + Choice_7_2_6 _C263 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_7_2_7 _C16 1.000000000000e+00 + Choice_7_2_7 _C245 1.000000000000e+00 + Choice_7_2_7 _C259 1.000000000000e+00 + Choice_7_2_7 _C264 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_7_2_8 _C17 1.000000000000e+00 + Choice_7_2_8 _C245 1.000000000000e+00 + Choice_7_2_8 _C260 1.000000000000e+00 + Choice_7_2_8 _C264 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_7_2_9 _C18 1.000000000000e+00 + Choice_7_2_9 _C245 1.000000000000e+00 + Choice_7_2_9 _C261 1.000000000000e+00 + Choice_7_2_9 _C264 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_7_3_1 _C19 1.000000000000e+00 + Choice_7_3_1 _C246 1.000000000000e+00 + Choice_7_3_1 _C253 1.000000000000e+00 + Choice_7_3_1 _C262 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_7_3_2 _C20 1.000000000000e+00 + Choice_7_3_2 _C246 1.000000000000e+00 + Choice_7_3_2 _C254 1.000000000000e+00 + Choice_7_3_2 _C262 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_7_3_3 _C21 1.000000000000e+00 + Choice_7_3_3 _C246 1.000000000000e+00 + Choice_7_3_3 _C255 1.000000000000e+00 + Choice_7_3_3 _C262 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_7_3_4 _C22 1.000000000000e+00 + Choice_7_3_4 _C246 1.000000000000e+00 + Choice_7_3_4 _C256 1.000000000000e+00 + Choice_7_3_4 _C263 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_7_3_5 _C23 1.000000000000e+00 + Choice_7_3_5 _C246 1.000000000000e+00 + Choice_7_3_5 _C257 1.000000000000e+00 + Choice_7_3_5 _C263 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_7_3_6 _C24 1.000000000000e+00 + Choice_7_3_6 _C246 1.000000000000e+00 + Choice_7_3_6 _C258 1.000000000000e+00 + Choice_7_3_6 _C263 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_7_3_7 _C25 1.000000000000e+00 + Choice_7_3_7 _C246 1.000000000000e+00 + Choice_7_3_7 _C259 1.000000000000e+00 + Choice_7_3_7 _C264 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_7_3_8 _C26 1.000000000000e+00 + Choice_7_3_8 _C246 1.000000000000e+00 + Choice_7_3_8 _C260 1.000000000000e+00 + Choice_7_3_8 _C264 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_7_3_9 _C27 1.000000000000e+00 + Choice_7_3_9 _C246 1.000000000000e+00 + Choice_7_3_9 _C261 1.000000000000e+00 + Choice_7_3_9 _C264 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_7_4_1 _C28 1.000000000000e+00 + Choice_7_4_1 _C247 1.000000000000e+00 + Choice_7_4_1 _C253 1.000000000000e+00 + Choice_7_4_1 _C265 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_7_4_2 _C29 1.000000000000e+00 + Choice_7_4_2 _C247 1.000000000000e+00 + Choice_7_4_2 _C254 1.000000000000e+00 + Choice_7_4_2 _C265 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_7_4_3 _C30 1.000000000000e+00 + Choice_7_4_3 _C247 1.000000000000e+00 + Choice_7_4_3 _C255 1.000000000000e+00 + Choice_7_4_3 _C265 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_7_4_4 _C31 1.000000000000e+00 + Choice_7_4_4 _C247 1.000000000000e+00 + Choice_7_4_4 _C256 1.000000000000e+00 + Choice_7_4_4 _C266 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_7_4_5 _C32 1.000000000000e+00 + Choice_7_4_5 _C247 1.000000000000e+00 + Choice_7_4_5 _C257 1.000000000000e+00 + Choice_7_4_5 _C266 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_7_4_6 _C33 1.000000000000e+00 + Choice_7_4_6 _C247 1.000000000000e+00 + Choice_7_4_6 _C258 1.000000000000e+00 + Choice_7_4_6 _C266 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_7_4_7 _C34 1.000000000000e+00 + Choice_7_4_7 _C247 1.000000000000e+00 + Choice_7_4_7 _C259 1.000000000000e+00 + Choice_7_4_7 _C267 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_7_4_8 _C35 1.000000000000e+00 + Choice_7_4_8 _C247 1.000000000000e+00 + Choice_7_4_8 _C260 1.000000000000e+00 + Choice_7_4_8 _C267 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_7_4_9 _C36 1.000000000000e+00 + Choice_7_4_9 _C247 1.000000000000e+00 + Choice_7_4_9 _C261 1.000000000000e+00 + Choice_7_4_9 _C267 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_7_5_1 _C37 1.000000000000e+00 + Choice_7_5_1 _C248 1.000000000000e+00 + Choice_7_5_1 _C253 1.000000000000e+00 + Choice_7_5_1 _C265 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_7_5_2 _C38 1.000000000000e+00 + Choice_7_5_2 _C248 1.000000000000e+00 + Choice_7_5_2 _C254 1.000000000000e+00 + Choice_7_5_2 _C265 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_7_5_3 _C39 1.000000000000e+00 + Choice_7_5_3 _C248 1.000000000000e+00 + Choice_7_5_3 _C255 1.000000000000e+00 + Choice_7_5_3 _C265 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_7_5_4 _C40 1.000000000000e+00 + Choice_7_5_4 _C248 1.000000000000e+00 + Choice_7_5_4 _C256 1.000000000000e+00 + Choice_7_5_4 _C266 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_7_5_5 _C41 1.000000000000e+00 + Choice_7_5_5 _C248 1.000000000000e+00 + Choice_7_5_5 _C257 1.000000000000e+00 + Choice_7_5_5 _C266 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_7_5_6 _C42 1.000000000000e+00 + Choice_7_5_6 _C248 1.000000000000e+00 + Choice_7_5_6 _C258 1.000000000000e+00 + Choice_7_5_6 _C266 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_7_5_7 _C43 1.000000000000e+00 + Choice_7_5_7 _C248 1.000000000000e+00 + Choice_7_5_7 _C259 1.000000000000e+00 + Choice_7_5_7 _C267 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_7_5_8 _C44 1.000000000000e+00 + Choice_7_5_8 _C248 1.000000000000e+00 + Choice_7_5_8 _C260 1.000000000000e+00 + Choice_7_5_8 _C267 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_7_5_9 _C45 1.000000000000e+00 + Choice_7_5_9 _C248 1.000000000000e+00 + Choice_7_5_9 _C261 1.000000000000e+00 + Choice_7_5_9 _C267 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_7_6_1 _C46 1.000000000000e+00 + Choice_7_6_1 _C249 1.000000000000e+00 + Choice_7_6_1 _C253 1.000000000000e+00 + Choice_7_6_1 _C265 1.000000000000e+00 + Choice_7_6_1 _C329 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_7_6_2 _C47 1.000000000000e+00 + Choice_7_6_2 _C249 1.000000000000e+00 + Choice_7_6_2 _C254 1.000000000000e+00 + Choice_7_6_2 _C265 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_7_6_3 _C48 1.000000000000e+00 + Choice_7_6_3 _C249 1.000000000000e+00 + Choice_7_6_3 _C255 1.000000000000e+00 + Choice_7_6_3 _C265 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_7_6_4 _C49 1.000000000000e+00 + Choice_7_6_4 _C249 1.000000000000e+00 + Choice_7_6_4 _C256 1.000000000000e+00 + Choice_7_6_4 _C266 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_7_6_5 _C50 1.000000000000e+00 + Choice_7_6_5 _C249 1.000000000000e+00 + Choice_7_6_5 _C257 1.000000000000e+00 + Choice_7_6_5 _C266 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_7_6_6 _C51 1.000000000000e+00 + Choice_7_6_6 _C249 1.000000000000e+00 + Choice_7_6_6 _C258 1.000000000000e+00 + Choice_7_6_6 _C266 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_7_6_7 _C52 1.000000000000e+00 + Choice_7_6_7 _C249 1.000000000000e+00 + Choice_7_6_7 _C259 1.000000000000e+00 + Choice_7_6_7 _C267 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_7_6_8 _C53 1.000000000000e+00 + Choice_7_6_8 _C249 1.000000000000e+00 + Choice_7_6_8 _C260 1.000000000000e+00 + Choice_7_6_8 _C267 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_7_6_9 _C54 1.000000000000e+00 + Choice_7_6_9 _C249 1.000000000000e+00 + Choice_7_6_9 _C261 1.000000000000e+00 + Choice_7_6_9 _C267 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_7_7_1 _C55 1.000000000000e+00 + Choice_7_7_1 _C250 1.000000000000e+00 + Choice_7_7_1 _C253 1.000000000000e+00 + Choice_7_7_1 _C268 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_7_7_2 _C56 1.000000000000e+00 + Choice_7_7_2 _C250 1.000000000000e+00 + Choice_7_7_2 _C254 1.000000000000e+00 + Choice_7_7_2 _C268 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_7_7_3 _C57 1.000000000000e+00 + Choice_7_7_3 _C250 1.000000000000e+00 + Choice_7_7_3 _C255 1.000000000000e+00 + Choice_7_7_3 _C268 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_7_7_4 _C58 1.000000000000e+00 + Choice_7_7_4 _C250 1.000000000000e+00 + Choice_7_7_4 _C256 1.000000000000e+00 + Choice_7_7_4 _C269 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_7_7_5 _C59 1.000000000000e+00 + Choice_7_7_5 _C250 1.000000000000e+00 + Choice_7_7_5 _C257 1.000000000000e+00 + Choice_7_7_5 _C269 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_7_7_6 _C60 1.000000000000e+00 + Choice_7_7_6 _C250 1.000000000000e+00 + Choice_7_7_6 _C258 1.000000000000e+00 + Choice_7_7_6 _C269 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_7_7_7 _C61 1.000000000000e+00 + Choice_7_7_7 _C250 1.000000000000e+00 + Choice_7_7_7 _C259 1.000000000000e+00 + Choice_7_7_7 _C270 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_7_7_8 _C62 1.000000000000e+00 + Choice_7_7_8 _C250 1.000000000000e+00 + Choice_7_7_8 _C260 1.000000000000e+00 + Choice_7_7_8 _C270 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_7_7_9 _C63 1.000000000000e+00 + Choice_7_7_9 _C250 1.000000000000e+00 + Choice_7_7_9 _C261 1.000000000000e+00 + Choice_7_7_9 _C270 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_7_8_1 _C64 1.000000000000e+00 + Choice_7_8_1 _C251 1.000000000000e+00 + Choice_7_8_1 _C253 1.000000000000e+00 + Choice_7_8_1 _C268 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_7_8_2 _C65 1.000000000000e+00 + Choice_7_8_2 _C251 1.000000000000e+00 + Choice_7_8_2 _C254 1.000000000000e+00 + Choice_7_8_2 _C268 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_7_8_3 _C66 1.000000000000e+00 + Choice_7_8_3 _C251 1.000000000000e+00 + Choice_7_8_3 _C255 1.000000000000e+00 + Choice_7_8_3 _C268 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_7_8_4 _C67 1.000000000000e+00 + Choice_7_8_4 _C251 1.000000000000e+00 + Choice_7_8_4 _C256 1.000000000000e+00 + Choice_7_8_4 _C269 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_7_8_5 _C68 1.000000000000e+00 + Choice_7_8_5 _C251 1.000000000000e+00 + Choice_7_8_5 _C257 1.000000000000e+00 + Choice_7_8_5 _C269 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_7_8_6 _C69 1.000000000000e+00 + Choice_7_8_6 _C251 1.000000000000e+00 + Choice_7_8_6 _C258 1.000000000000e+00 + Choice_7_8_6 _C269 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_7_8_7 _C70 1.000000000000e+00 + Choice_7_8_7 _C251 1.000000000000e+00 + Choice_7_8_7 _C259 1.000000000000e+00 + Choice_7_8_7 _C270 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_7_8_8 _C71 1.000000000000e+00 + Choice_7_8_8 _C251 1.000000000000e+00 + Choice_7_8_8 _C260 1.000000000000e+00 + Choice_7_8_8 _C270 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_7_8_9 _C72 1.000000000000e+00 + Choice_7_8_9 _C251 1.000000000000e+00 + Choice_7_8_9 _C261 1.000000000000e+00 + Choice_7_8_9 _C270 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_7_9_1 _C73 1.000000000000e+00 + Choice_7_9_1 _C252 1.000000000000e+00 + Choice_7_9_1 _C253 1.000000000000e+00 + Choice_7_9_1 _C268 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_7_9_2 _C74 1.000000000000e+00 + Choice_7_9_2 _C252 1.000000000000e+00 + Choice_7_9_2 _C254 1.000000000000e+00 + Choice_7_9_2 _C268 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_7_9_3 _C75 1.000000000000e+00 + Choice_7_9_3 _C252 1.000000000000e+00 + Choice_7_9_3 _C255 1.000000000000e+00 + Choice_7_9_3 _C268 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_7_9_4 _C76 1.000000000000e+00 + Choice_7_9_4 _C252 1.000000000000e+00 + Choice_7_9_4 _C256 1.000000000000e+00 + Choice_7_9_4 _C269 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_7_9_5 _C77 1.000000000000e+00 + Choice_7_9_5 _C252 1.000000000000e+00 + Choice_7_9_5 _C257 1.000000000000e+00 + Choice_7_9_5 _C269 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_7_9_6 _C78 1.000000000000e+00 + Choice_7_9_6 _C252 1.000000000000e+00 + Choice_7_9_6 _C258 1.000000000000e+00 + Choice_7_9_6 _C269 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_7_9_7 _C79 1.000000000000e+00 + Choice_7_9_7 _C252 1.000000000000e+00 + Choice_7_9_7 _C259 1.000000000000e+00 + Choice_7_9_7 _C270 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_7_9_8 _C80 1.000000000000e+00 + Choice_7_9_8 _C252 1.000000000000e+00 + Choice_7_9_8 _C260 1.000000000000e+00 + Choice_7_9_8 _C270 1.000000000000e+00 + Choice_7_9_8 _C349 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_7_9_9 _C81 1.000000000000e+00 + Choice_7_9_9 _C252 1.000000000000e+00 + Choice_7_9_9 _C261 1.000000000000e+00 + Choice_7_9_9 _C270 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_8_1_1 _C1 1.000000000000e+00 + Choice_8_1_1 _C271 1.000000000000e+00 + Choice_8_1_1 _C280 1.000000000000e+00 + Choice_8_1_1 _C289 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_8_1_2 _C2 1.000000000000e+00 + Choice_8_1_2 _C271 1.000000000000e+00 + Choice_8_1_2 _C281 1.000000000000e+00 + Choice_8_1_2 _C289 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_8_1_3 _C3 1.000000000000e+00 + Choice_8_1_3 _C271 1.000000000000e+00 + Choice_8_1_3 _C282 1.000000000000e+00 + Choice_8_1_3 _C289 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_8_1_4 _C4 1.000000000000e+00 + Choice_8_1_4 _C271 1.000000000000e+00 + Choice_8_1_4 _C283 1.000000000000e+00 + Choice_8_1_4 _C290 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_8_1_5 _C5 1.000000000000e+00 + Choice_8_1_5 _C271 1.000000000000e+00 + Choice_8_1_5 _C284 1.000000000000e+00 + Choice_8_1_5 _C290 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_8_1_6 _C6 1.000000000000e+00 + Choice_8_1_6 _C271 1.000000000000e+00 + Choice_8_1_6 _C285 1.000000000000e+00 + Choice_8_1_6 _C290 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_8_1_7 _C7 1.000000000000e+00 + Choice_8_1_7 _C271 1.000000000000e+00 + Choice_8_1_7 _C286 1.000000000000e+00 + Choice_8_1_7 _C291 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_8_1_8 _C8 1.000000000000e+00 + Choice_8_1_8 _C271 1.000000000000e+00 + Choice_8_1_8 _C287 1.000000000000e+00 + Choice_8_1_8 _C291 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_8_1_9 _C9 1.000000000000e+00 + Choice_8_1_9 _C271 1.000000000000e+00 + Choice_8_1_9 _C288 1.000000000000e+00 + Choice_8_1_9 _C291 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_8_2_1 _C10 1.000000000000e+00 + Choice_8_2_1 _C272 1.000000000000e+00 + Choice_8_2_1 _C280 1.000000000000e+00 + Choice_8_2_1 _C289 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_8_2_2 _C11 1.000000000000e+00 + Choice_8_2_2 _C272 1.000000000000e+00 + Choice_8_2_2 _C281 1.000000000000e+00 + Choice_8_2_2 _C289 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_8_2_3 _C12 1.000000000000e+00 + Choice_8_2_3 _C272 1.000000000000e+00 + Choice_8_2_3 _C282 1.000000000000e+00 + Choice_8_2_3 _C289 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_8_2_4 _C13 1.000000000000e+00 + Choice_8_2_4 _C272 1.000000000000e+00 + Choice_8_2_4 _C283 1.000000000000e+00 + Choice_8_2_4 _C290 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_8_2_5 _C14 1.000000000000e+00 + Choice_8_2_5 _C272 1.000000000000e+00 + Choice_8_2_5 _C284 1.000000000000e+00 + Choice_8_2_5 _C290 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_8_2_6 _C15 1.000000000000e+00 + Choice_8_2_6 _C272 1.000000000000e+00 + Choice_8_2_6 _C285 1.000000000000e+00 + Choice_8_2_6 _C290 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_8_2_7 _C16 1.000000000000e+00 + Choice_8_2_7 _C272 1.000000000000e+00 + Choice_8_2_7 _C286 1.000000000000e+00 + Choice_8_2_7 _C291 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_8_2_8 _C17 1.000000000000e+00 + Choice_8_2_8 _C272 1.000000000000e+00 + Choice_8_2_8 _C287 1.000000000000e+00 + Choice_8_2_8 _C291 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_8_2_9 _C18 1.000000000000e+00 + Choice_8_2_9 _C272 1.000000000000e+00 + Choice_8_2_9 _C288 1.000000000000e+00 + Choice_8_2_9 _C291 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_8_3_1 _C19 1.000000000000e+00 + Choice_8_3_1 _C273 1.000000000000e+00 + Choice_8_3_1 _C280 1.000000000000e+00 + Choice_8_3_1 _C289 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_8_3_2 _C20 1.000000000000e+00 + Choice_8_3_2 _C273 1.000000000000e+00 + Choice_8_3_2 _C281 1.000000000000e+00 + Choice_8_3_2 _C289 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_8_3_3 _C21 1.000000000000e+00 + Choice_8_3_3 _C273 1.000000000000e+00 + Choice_8_3_3 _C282 1.000000000000e+00 + Choice_8_3_3 _C289 1.000000000000e+00 + Choice_8_3_3 _C333 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_8_3_4 _C22 1.000000000000e+00 + Choice_8_3_4 _C273 1.000000000000e+00 + Choice_8_3_4 _C283 1.000000000000e+00 + Choice_8_3_4 _C290 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_8_3_5 _C23 1.000000000000e+00 + Choice_8_3_5 _C273 1.000000000000e+00 + Choice_8_3_5 _C284 1.000000000000e+00 + Choice_8_3_5 _C290 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_8_3_6 _C24 1.000000000000e+00 + Choice_8_3_6 _C273 1.000000000000e+00 + Choice_8_3_6 _C285 1.000000000000e+00 + Choice_8_3_6 _C290 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_8_3_7 _C25 1.000000000000e+00 + Choice_8_3_7 _C273 1.000000000000e+00 + Choice_8_3_7 _C286 1.000000000000e+00 + Choice_8_3_7 _C291 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_8_3_8 _C26 1.000000000000e+00 + Choice_8_3_8 _C273 1.000000000000e+00 + Choice_8_3_8 _C287 1.000000000000e+00 + Choice_8_3_8 _C291 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_8_3_9 _C27 1.000000000000e+00 + Choice_8_3_9 _C273 1.000000000000e+00 + Choice_8_3_9 _C288 1.000000000000e+00 + Choice_8_3_9 _C291 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_8_4_1 _C28 1.000000000000e+00 + Choice_8_4_1 _C274 1.000000000000e+00 + Choice_8_4_1 _C280 1.000000000000e+00 + Choice_8_4_1 _C292 1.000000000000e+00 + Choice_8_4_1 _C327 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_8_4_2 _C29 1.000000000000e+00 + Choice_8_4_2 _C274 1.000000000000e+00 + Choice_8_4_2 _C281 1.000000000000e+00 + Choice_8_4_2 _C292 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_8_4_3 _C30 1.000000000000e+00 + Choice_8_4_3 _C274 1.000000000000e+00 + Choice_8_4_3 _C282 1.000000000000e+00 + Choice_8_4_3 _C292 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_8_4_4 _C31 1.000000000000e+00 + Choice_8_4_4 _C274 1.000000000000e+00 + Choice_8_4_4 _C283 1.000000000000e+00 + Choice_8_4_4 _C293 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_8_4_5 _C32 1.000000000000e+00 + Choice_8_4_5 _C274 1.000000000000e+00 + Choice_8_4_5 _C284 1.000000000000e+00 + Choice_8_4_5 _C293 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_8_4_6 _C33 1.000000000000e+00 + Choice_8_4_6 _C274 1.000000000000e+00 + Choice_8_4_6 _C285 1.000000000000e+00 + Choice_8_4_6 _C293 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_8_4_7 _C34 1.000000000000e+00 + Choice_8_4_7 _C274 1.000000000000e+00 + Choice_8_4_7 _C286 1.000000000000e+00 + Choice_8_4_7 _C294 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_8_4_8 _C35 1.000000000000e+00 + Choice_8_4_8 _C274 1.000000000000e+00 + Choice_8_4_8 _C287 1.000000000000e+00 + Choice_8_4_8 _C294 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_8_4_9 _C36 1.000000000000e+00 + Choice_8_4_9 _C274 1.000000000000e+00 + Choice_8_4_9 _C288 1.000000000000e+00 + Choice_8_4_9 _C294 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_8_5_1 _C37 1.000000000000e+00 + Choice_8_5_1 _C275 1.000000000000e+00 + Choice_8_5_1 _C280 1.000000000000e+00 + Choice_8_5_1 _C292 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_8_5_2 _C38 1.000000000000e+00 + Choice_8_5_2 _C275 1.000000000000e+00 + Choice_8_5_2 _C281 1.000000000000e+00 + Choice_8_5_2 _C292 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_8_5_3 _C39 1.000000000000e+00 + Choice_8_5_3 _C275 1.000000000000e+00 + Choice_8_5_3 _C282 1.000000000000e+00 + Choice_8_5_3 _C292 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_8_5_4 _C40 1.000000000000e+00 + Choice_8_5_4 _C275 1.000000000000e+00 + Choice_8_5_4 _C283 1.000000000000e+00 + Choice_8_5_4 _C293 1.000000000000e+00 + Choice_8_5_4 _C335 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_8_5_5 _C41 1.000000000000e+00 + Choice_8_5_5 _C275 1.000000000000e+00 + Choice_8_5_5 _C284 1.000000000000e+00 + Choice_8_5_5 _C293 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_8_5_6 _C42 1.000000000000e+00 + Choice_8_5_6 _C275 1.000000000000e+00 + Choice_8_5_6 _C285 1.000000000000e+00 + Choice_8_5_6 _C293 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_8_5_7 _C43 1.000000000000e+00 + Choice_8_5_7 _C275 1.000000000000e+00 + Choice_8_5_7 _C286 1.000000000000e+00 + Choice_8_5_7 _C294 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_8_5_8 _C44 1.000000000000e+00 + Choice_8_5_8 _C275 1.000000000000e+00 + Choice_8_5_8 _C287 1.000000000000e+00 + Choice_8_5_8 _C294 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_8_5_9 _C45 1.000000000000e+00 + Choice_8_5_9 _C275 1.000000000000e+00 + Choice_8_5_9 _C288 1.000000000000e+00 + Choice_8_5_9 _C294 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_8_6_1 _C46 1.000000000000e+00 + Choice_8_6_1 _C276 1.000000000000e+00 + Choice_8_6_1 _C280 1.000000000000e+00 + Choice_8_6_1 _C292 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_8_6_2 _C47 1.000000000000e+00 + Choice_8_6_2 _C276 1.000000000000e+00 + Choice_8_6_2 _C281 1.000000000000e+00 + Choice_8_6_2 _C292 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_8_6_3 _C48 1.000000000000e+00 + Choice_8_6_3 _C276 1.000000000000e+00 + Choice_8_6_3 _C282 1.000000000000e+00 + Choice_8_6_3 _C292 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_8_6_4 _C49 1.000000000000e+00 + Choice_8_6_4 _C276 1.000000000000e+00 + Choice_8_6_4 _C283 1.000000000000e+00 + Choice_8_6_4 _C293 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_8_6_5 _C50 1.000000000000e+00 + Choice_8_6_5 _C276 1.000000000000e+00 + Choice_8_6_5 _C284 1.000000000000e+00 + Choice_8_6_5 _C293 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_8_6_6 _C51 1.000000000000e+00 + Choice_8_6_6 _C276 1.000000000000e+00 + Choice_8_6_6 _C285 1.000000000000e+00 + Choice_8_6_6 _C293 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_8_6_7 _C52 1.000000000000e+00 + Choice_8_6_7 _C276 1.000000000000e+00 + Choice_8_6_7 _C286 1.000000000000e+00 + Choice_8_6_7 _C294 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_8_6_8 _C53 1.000000000000e+00 + Choice_8_6_8 _C276 1.000000000000e+00 + Choice_8_6_8 _C287 1.000000000000e+00 + Choice_8_6_8 _C294 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_8_6_9 _C54 1.000000000000e+00 + Choice_8_6_9 _C276 1.000000000000e+00 + Choice_8_6_9 _C288 1.000000000000e+00 + Choice_8_6_9 _C294 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_8_7_1 _C55 1.000000000000e+00 + Choice_8_7_1 _C277 1.000000000000e+00 + Choice_8_7_1 _C280 1.000000000000e+00 + Choice_8_7_1 _C295 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_8_7_2 _C56 1.000000000000e+00 + Choice_8_7_2 _C277 1.000000000000e+00 + Choice_8_7_2 _C281 1.000000000000e+00 + Choice_8_7_2 _C295 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_8_7_3 _C57 1.000000000000e+00 + Choice_8_7_3 _C277 1.000000000000e+00 + Choice_8_7_3 _C282 1.000000000000e+00 + Choice_8_7_3 _C295 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_8_7_4 _C58 1.000000000000e+00 + Choice_8_7_4 _C277 1.000000000000e+00 + Choice_8_7_4 _C283 1.000000000000e+00 + Choice_8_7_4 _C296 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_8_7_5 _C59 1.000000000000e+00 + Choice_8_7_5 _C277 1.000000000000e+00 + Choice_8_7_5 _C284 1.000000000000e+00 + Choice_8_7_5 _C296 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_8_7_6 _C60 1.000000000000e+00 + Choice_8_7_6 _C277 1.000000000000e+00 + Choice_8_7_6 _C285 1.000000000000e+00 + Choice_8_7_6 _C296 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_8_7_7 _C61 1.000000000000e+00 + Choice_8_7_7 _C277 1.000000000000e+00 + Choice_8_7_7 _C286 1.000000000000e+00 + Choice_8_7_7 _C297 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_8_7_8 _C62 1.000000000000e+00 + Choice_8_7_8 _C277 1.000000000000e+00 + Choice_8_7_8 _C287 1.000000000000e+00 + Choice_8_7_8 _C297 1.000000000000e+00 + Choice_8_7_8 _C348 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_8_7_9 _C63 1.000000000000e+00 + Choice_8_7_9 _C277 1.000000000000e+00 + Choice_8_7_9 _C288 1.000000000000e+00 + Choice_8_7_9 _C297 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_8_8_1 _C64 1.000000000000e+00 + Choice_8_8_1 _C278 1.000000000000e+00 + Choice_8_8_1 _C280 1.000000000000e+00 + Choice_8_8_1 _C295 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_8_8_2 _C65 1.000000000000e+00 + Choice_8_8_2 _C278 1.000000000000e+00 + Choice_8_8_2 _C281 1.000000000000e+00 + Choice_8_8_2 _C295 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_8_8_3 _C66 1.000000000000e+00 + Choice_8_8_3 _C278 1.000000000000e+00 + Choice_8_8_3 _C282 1.000000000000e+00 + Choice_8_8_3 _C295 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_8_8_4 _C67 1.000000000000e+00 + Choice_8_8_4 _C278 1.000000000000e+00 + Choice_8_8_4 _C283 1.000000000000e+00 + Choice_8_8_4 _C296 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_8_8_5 _C68 1.000000000000e+00 + Choice_8_8_5 _C278 1.000000000000e+00 + Choice_8_8_5 _C284 1.000000000000e+00 + Choice_8_8_5 _C296 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_8_8_6 _C69 1.000000000000e+00 + Choice_8_8_6 _C278 1.000000000000e+00 + Choice_8_8_6 _C285 1.000000000000e+00 + Choice_8_8_6 _C296 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_8_8_7 _C70 1.000000000000e+00 + Choice_8_8_7 _C278 1.000000000000e+00 + Choice_8_8_7 _C286 1.000000000000e+00 + Choice_8_8_7 _C297 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_8_8_8 _C71 1.000000000000e+00 + Choice_8_8_8 _C278 1.000000000000e+00 + Choice_8_8_8 _C287 1.000000000000e+00 + Choice_8_8_8 _C297 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_8_8_9 _C72 1.000000000000e+00 + Choice_8_8_9 _C278 1.000000000000e+00 + Choice_8_8_9 _C288 1.000000000000e+00 + Choice_8_8_9 _C297 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_8_9_1 _C73 1.000000000000e+00 + Choice_8_9_1 _C279 1.000000000000e+00 + Choice_8_9_1 _C280 1.000000000000e+00 + Choice_8_9_1 _C295 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_8_9_2 _C74 1.000000000000e+00 + Choice_8_9_2 _C279 1.000000000000e+00 + Choice_8_9_2 _C281 1.000000000000e+00 + Choice_8_9_2 _C295 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_8_9_3 _C75 1.000000000000e+00 + Choice_8_9_3 _C279 1.000000000000e+00 + Choice_8_9_3 _C282 1.000000000000e+00 + Choice_8_9_3 _C295 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_8_9_4 _C76 1.000000000000e+00 + Choice_8_9_4 _C279 1.000000000000e+00 + Choice_8_9_4 _C283 1.000000000000e+00 + Choice_8_9_4 _C296 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_8_9_5 _C77 1.000000000000e+00 + Choice_8_9_5 _C279 1.000000000000e+00 + Choice_8_9_5 _C284 1.000000000000e+00 + Choice_8_9_5 _C296 1.000000000000e+00 + Choice_8_9_5 _C342 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_8_9_6 _C78 1.000000000000e+00 + Choice_8_9_6 _C279 1.000000000000e+00 + Choice_8_9_6 _C285 1.000000000000e+00 + Choice_8_9_6 _C296 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_8_9_7 _C79 1.000000000000e+00 + Choice_8_9_7 _C279 1.000000000000e+00 + Choice_8_9_7 _C286 1.000000000000e+00 + Choice_8_9_7 _C297 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_8_9_8 _C80 1.000000000000e+00 + Choice_8_9_8 _C279 1.000000000000e+00 + Choice_8_9_8 _C287 1.000000000000e+00 + Choice_8_9_8 _C297 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_8_9_9 _C81 1.000000000000e+00 + Choice_8_9_9 _C279 1.000000000000e+00 + Choice_8_9_9 _C288 1.000000000000e+00 + Choice_8_9_9 _C297 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_9_1_1 _C1 1.000000000000e+00 + Choice_9_1_1 _C298 1.000000000000e+00 + Choice_9_1_1 _C307 1.000000000000e+00 + Choice_9_1_1 _C316 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_9_1_2 _C2 1.000000000000e+00 + Choice_9_1_2 _C298 1.000000000000e+00 + Choice_9_1_2 _C308 1.000000000000e+00 + Choice_9_1_2 _C316 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_9_1_3 _C3 1.000000000000e+00 + Choice_9_1_3 _C298 1.000000000000e+00 + Choice_9_1_3 _C309 1.000000000000e+00 + Choice_9_1_3 _C316 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_9_1_4 _C4 1.000000000000e+00 + Choice_9_1_4 _C298 1.000000000000e+00 + Choice_9_1_4 _C310 1.000000000000e+00 + Choice_9_1_4 _C317 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_9_1_5 _C5 1.000000000000e+00 + Choice_9_1_5 _C298 1.000000000000e+00 + Choice_9_1_5 _C311 1.000000000000e+00 + Choice_9_1_5 _C317 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_9_1_6 _C6 1.000000000000e+00 + Choice_9_1_6 _C298 1.000000000000e+00 + Choice_9_1_6 _C312 1.000000000000e+00 + Choice_9_1_6 _C317 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_9_1_7 _C7 1.000000000000e+00 + Choice_9_1_7 _C298 1.000000000000e+00 + Choice_9_1_7 _C313 1.000000000000e+00 + Choice_9_1_7 _C318 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_9_1_8 _C8 1.000000000000e+00 + Choice_9_1_8 _C298 1.000000000000e+00 + Choice_9_1_8 _C314 1.000000000000e+00 + Choice_9_1_8 _C318 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_9_1_9 _C9 1.000000000000e+00 + Choice_9_1_9 _C298 1.000000000000e+00 + Choice_9_1_9 _C315 1.000000000000e+00 + Choice_9_1_9 _C318 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_9_2_1 _C10 1.000000000000e+00 + Choice_9_2_1 _C299 1.000000000000e+00 + Choice_9_2_1 _C307 1.000000000000e+00 + Choice_9_2_1 _C316 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_9_2_2 _C11 1.000000000000e+00 + Choice_9_2_2 _C299 1.000000000000e+00 + Choice_9_2_2 _C308 1.000000000000e+00 + Choice_9_2_2 _C316 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_9_2_3 _C12 1.000000000000e+00 + Choice_9_2_3 _C299 1.000000000000e+00 + Choice_9_2_3 _C309 1.000000000000e+00 + Choice_9_2_3 _C316 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_9_2_4 _C13 1.000000000000e+00 + Choice_9_2_4 _C299 1.000000000000e+00 + Choice_9_2_4 _C310 1.000000000000e+00 + Choice_9_2_4 _C317 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_9_2_5 _C14 1.000000000000e+00 + Choice_9_2_5 _C299 1.000000000000e+00 + Choice_9_2_5 _C311 1.000000000000e+00 + Choice_9_2_5 _C317 1.000000000000e+00 + Choice_9_2_5 _C338 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_9_2_6 _C15 1.000000000000e+00 + Choice_9_2_6 _C299 1.000000000000e+00 + Choice_9_2_6 _C312 1.000000000000e+00 + Choice_9_2_6 _C317 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_9_2_7 _C16 1.000000000000e+00 + Choice_9_2_7 _C299 1.000000000000e+00 + Choice_9_2_7 _C313 1.000000000000e+00 + Choice_9_2_7 _C318 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_9_2_8 _C17 1.000000000000e+00 + Choice_9_2_8 _C299 1.000000000000e+00 + Choice_9_2_8 _C314 1.000000000000e+00 + Choice_9_2_8 _C318 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_9_2_9 _C18 1.000000000000e+00 + Choice_9_2_9 _C299 1.000000000000e+00 + Choice_9_2_9 _C315 1.000000000000e+00 + Choice_9_2_9 _C318 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_9_3_1 _C19 1.000000000000e+00 + Choice_9_3_1 _C300 1.000000000000e+00 + Choice_9_3_1 _C307 1.000000000000e+00 + Choice_9_3_1 _C316 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_9_3_2 _C20 1.000000000000e+00 + Choice_9_3_2 _C300 1.000000000000e+00 + Choice_9_3_2 _C308 1.000000000000e+00 + Choice_9_3_2 _C316 1.000000000000e+00 + Choice_9_3_2 _C331 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_9_3_3 _C21 1.000000000000e+00 + Choice_9_3_3 _C300 1.000000000000e+00 + Choice_9_3_3 _C309 1.000000000000e+00 + Choice_9_3_3 _C316 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_9_3_4 _C22 1.000000000000e+00 + Choice_9_3_4 _C300 1.000000000000e+00 + Choice_9_3_4 _C310 1.000000000000e+00 + Choice_9_3_4 _C317 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_9_3_5 _C23 1.000000000000e+00 + Choice_9_3_5 _C300 1.000000000000e+00 + Choice_9_3_5 _C311 1.000000000000e+00 + Choice_9_3_5 _C317 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_9_3_6 _C24 1.000000000000e+00 + Choice_9_3_6 _C300 1.000000000000e+00 + Choice_9_3_6 _C312 1.000000000000e+00 + Choice_9_3_6 _C317 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_9_3_7 _C25 1.000000000000e+00 + Choice_9_3_7 _C300 1.000000000000e+00 + Choice_9_3_7 _C313 1.000000000000e+00 + Choice_9_3_7 _C318 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_9_3_8 _C26 1.000000000000e+00 + Choice_9_3_8 _C300 1.000000000000e+00 + Choice_9_3_8 _C314 1.000000000000e+00 + Choice_9_3_8 _C318 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_9_3_9 _C27 1.000000000000e+00 + Choice_9_3_9 _C300 1.000000000000e+00 + Choice_9_3_9 _C315 1.000000000000e+00 + Choice_9_3_9 _C318 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_9_4_1 _C28 1.000000000000e+00 + Choice_9_4_1 _C301 1.000000000000e+00 + Choice_9_4_1 _C307 1.000000000000e+00 + Choice_9_4_1 _C319 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_9_4_2 _C29 1.000000000000e+00 + Choice_9_4_2 _C301 1.000000000000e+00 + Choice_9_4_2 _C308 1.000000000000e+00 + Choice_9_4_2 _C319 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_9_4_3 _C30 1.000000000000e+00 + Choice_9_4_3 _C301 1.000000000000e+00 + Choice_9_4_3 _C309 1.000000000000e+00 + Choice_9_4_3 _C319 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_9_4_4 _C31 1.000000000000e+00 + Choice_9_4_4 _C301 1.000000000000e+00 + Choice_9_4_4 _C310 1.000000000000e+00 + Choice_9_4_4 _C320 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_9_4_5 _C32 1.000000000000e+00 + Choice_9_4_5 _C301 1.000000000000e+00 + Choice_9_4_5 _C311 1.000000000000e+00 + Choice_9_4_5 _C320 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_9_4_6 _C33 1.000000000000e+00 + Choice_9_4_6 _C301 1.000000000000e+00 + Choice_9_4_6 _C312 1.000000000000e+00 + Choice_9_4_6 _C320 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_9_4_7 _C34 1.000000000000e+00 + Choice_9_4_7 _C301 1.000000000000e+00 + Choice_9_4_7 _C313 1.000000000000e+00 + Choice_9_4_7 _C321 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_9_4_8 _C35 1.000000000000e+00 + Choice_9_4_8 _C301 1.000000000000e+00 + Choice_9_4_8 _C314 1.000000000000e+00 + Choice_9_4_8 _C321 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_9_4_9 _C36 1.000000000000e+00 + Choice_9_4_9 _C301 1.000000000000e+00 + Choice_9_4_9 _C315 1.000000000000e+00 + Choice_9_4_9 _C321 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_9_5_1 _C37 1.000000000000e+00 + Choice_9_5_1 _C302 1.000000000000e+00 + Choice_9_5_1 _C307 1.000000000000e+00 + Choice_9_5_1 _C319 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_9_5_2 _C38 1.000000000000e+00 + Choice_9_5_2 _C302 1.000000000000e+00 + Choice_9_5_2 _C308 1.000000000000e+00 + Choice_9_5_2 _C319 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_9_5_3 _C39 1.000000000000e+00 + Choice_9_5_3 _C302 1.000000000000e+00 + Choice_9_5_3 _C309 1.000000000000e+00 + Choice_9_5_3 _C319 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_9_5_4 _C40 1.000000000000e+00 + Choice_9_5_4 _C302 1.000000000000e+00 + Choice_9_5_4 _C310 1.000000000000e+00 + Choice_9_5_4 _C320 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_9_5_5 _C41 1.000000000000e+00 + Choice_9_5_5 _C302 1.000000000000e+00 + Choice_9_5_5 _C311 1.000000000000e+00 + Choice_9_5_5 _C320 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_9_5_6 _C42 1.000000000000e+00 + Choice_9_5_6 _C302 1.000000000000e+00 + Choice_9_5_6 _C312 1.000000000000e+00 + Choice_9_5_6 _C320 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_9_5_7 _C43 1.000000000000e+00 + Choice_9_5_7 _C302 1.000000000000e+00 + Choice_9_5_7 _C313 1.000000000000e+00 + Choice_9_5_7 _C321 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_9_5_8 _C44 1.000000000000e+00 + Choice_9_5_8 _C302 1.000000000000e+00 + Choice_9_5_8 _C314 1.000000000000e+00 + Choice_9_5_8 _C321 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_9_5_9 _C45 1.000000000000e+00 + Choice_9_5_9 _C302 1.000000000000e+00 + Choice_9_5_9 _C315 1.000000000000e+00 + Choice_9_5_9 _C321 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_9_6_1 _C46 1.000000000000e+00 + Choice_9_6_1 _C303 1.000000000000e+00 + Choice_9_6_1 _C307 1.000000000000e+00 + Choice_9_6_1 _C319 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_9_6_2 _C47 1.000000000000e+00 + Choice_9_6_2 _C303 1.000000000000e+00 + Choice_9_6_2 _C308 1.000000000000e+00 + Choice_9_6_2 _C319 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_9_6_3 _C48 1.000000000000e+00 + Choice_9_6_3 _C303 1.000000000000e+00 + Choice_9_6_3 _C309 1.000000000000e+00 + Choice_9_6_3 _C319 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_9_6_4 _C49 1.000000000000e+00 + Choice_9_6_4 _C303 1.000000000000e+00 + Choice_9_6_4 _C310 1.000000000000e+00 + Choice_9_6_4 _C320 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_9_6_5 _C50 1.000000000000e+00 + Choice_9_6_5 _C303 1.000000000000e+00 + Choice_9_6_5 _C311 1.000000000000e+00 + Choice_9_6_5 _C320 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_9_6_6 _C51 1.000000000000e+00 + Choice_9_6_6 _C303 1.000000000000e+00 + Choice_9_6_6 _C312 1.000000000000e+00 + Choice_9_6_6 _C320 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_9_6_7 _C52 1.000000000000e+00 + Choice_9_6_7 _C303 1.000000000000e+00 + Choice_9_6_7 _C313 1.000000000000e+00 + Choice_9_6_7 _C321 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_9_6_8 _C53 1.000000000000e+00 + Choice_9_6_8 _C303 1.000000000000e+00 + Choice_9_6_8 _C314 1.000000000000e+00 + Choice_9_6_8 _C321 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_9_6_9 _C54 1.000000000000e+00 + Choice_9_6_9 _C303 1.000000000000e+00 + Choice_9_6_9 _C315 1.000000000000e+00 + Choice_9_6_9 _C321 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_9_7_1 _C55 1.000000000000e+00 + Choice_9_7_1 _C304 1.000000000000e+00 + Choice_9_7_1 _C307 1.000000000000e+00 + Choice_9_7_1 _C322 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_9_7_2 _C56 1.000000000000e+00 + Choice_9_7_2 _C304 1.000000000000e+00 + Choice_9_7_2 _C308 1.000000000000e+00 + Choice_9_7_2 _C322 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_9_7_3 _C57 1.000000000000e+00 + Choice_9_7_3 _C304 1.000000000000e+00 + Choice_9_7_3 _C309 1.000000000000e+00 + Choice_9_7_3 _C322 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_9_7_4 _C58 1.000000000000e+00 + Choice_9_7_4 _C304 1.000000000000e+00 + Choice_9_7_4 _C310 1.000000000000e+00 + Choice_9_7_4 _C323 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_9_7_5 _C59 1.000000000000e+00 + Choice_9_7_5 _C304 1.000000000000e+00 + Choice_9_7_5 _C311 1.000000000000e+00 + Choice_9_7_5 _C323 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_9_7_6 _C60 1.000000000000e+00 + Choice_9_7_6 _C304 1.000000000000e+00 + Choice_9_7_6 _C312 1.000000000000e+00 + Choice_9_7_6 _C323 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_9_7_7 _C61 1.000000000000e+00 + Choice_9_7_7 _C304 1.000000000000e+00 + Choice_9_7_7 _C313 1.000000000000e+00 + Choice_9_7_7 _C324 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_9_7_8 _C62 1.000000000000e+00 + Choice_9_7_8 _C304 1.000000000000e+00 + Choice_9_7_8 _C314 1.000000000000e+00 + Choice_9_7_8 _C324 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_9_7_9 _C63 1.000000000000e+00 + Choice_9_7_9 _C304 1.000000000000e+00 + Choice_9_7_9 _C315 1.000000000000e+00 + Choice_9_7_9 _C324 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_9_8_1 _C64 1.000000000000e+00 + Choice_9_8_1 _C305 1.000000000000e+00 + Choice_9_8_1 _C307 1.000000000000e+00 + Choice_9_8_1 _C322 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_9_8_2 _C65 1.000000000000e+00 + Choice_9_8_2 _C305 1.000000000000e+00 + Choice_9_8_2 _C308 1.000000000000e+00 + Choice_9_8_2 _C322 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_9_8_3 _C66 1.000000000000e+00 + Choice_9_8_3 _C305 1.000000000000e+00 + Choice_9_8_3 _C309 1.000000000000e+00 + Choice_9_8_3 _C322 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_9_8_4 _C67 1.000000000000e+00 + Choice_9_8_4 _C305 1.000000000000e+00 + Choice_9_8_4 _C310 1.000000000000e+00 + Choice_9_8_4 _C323 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_9_8_5 _C68 1.000000000000e+00 + Choice_9_8_5 _C305 1.000000000000e+00 + Choice_9_8_5 _C311 1.000000000000e+00 + Choice_9_8_5 _C323 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_9_8_6 _C69 1.000000000000e+00 + Choice_9_8_6 _C305 1.000000000000e+00 + Choice_9_8_6 _C312 1.000000000000e+00 + Choice_9_8_6 _C323 1.000000000000e+00 + Choice_9_8_6 _C345 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_9_8_7 _C70 1.000000000000e+00 + Choice_9_8_7 _C305 1.000000000000e+00 + Choice_9_8_7 _C313 1.000000000000e+00 + Choice_9_8_7 _C324 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_9_8_8 _C71 1.000000000000e+00 + Choice_9_8_8 _C305 1.000000000000e+00 + Choice_9_8_8 _C314 1.000000000000e+00 + Choice_9_8_8 _C324 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_9_8_9 _C72 1.000000000000e+00 + Choice_9_8_9 _C305 1.000000000000e+00 + Choice_9_8_9 _C315 1.000000000000e+00 + Choice_9_8_9 _C324 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_9_9_1 _C73 1.000000000000e+00 + Choice_9_9_1 _C306 1.000000000000e+00 + Choice_9_9_1 _C307 1.000000000000e+00 + Choice_9_9_1 _C322 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_9_9_2 _C74 1.000000000000e+00 + Choice_9_9_2 _C306 1.000000000000e+00 + Choice_9_9_2 _C308 1.000000000000e+00 + Choice_9_9_2 _C322 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_9_9_3 _C75 1.000000000000e+00 + Choice_9_9_3 _C306 1.000000000000e+00 + Choice_9_9_3 _C309 1.000000000000e+00 + Choice_9_9_3 _C322 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_9_9_4 _C76 1.000000000000e+00 + Choice_9_9_4 _C306 1.000000000000e+00 + Choice_9_9_4 _C310 1.000000000000e+00 + Choice_9_9_4 _C323 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_9_9_5 _C77 1.000000000000e+00 + Choice_9_9_5 _C306 1.000000000000e+00 + Choice_9_9_5 _C311 1.000000000000e+00 + Choice_9_9_5 _C323 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_9_9_6 _C78 1.000000000000e+00 + Choice_9_9_6 _C306 1.000000000000e+00 + Choice_9_9_6 _C312 1.000000000000e+00 + Choice_9_9_6 _C323 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_9_9_7 _C79 1.000000000000e+00 + Choice_9_9_7 _C306 1.000000000000e+00 + Choice_9_9_7 _C313 1.000000000000e+00 + Choice_9_9_7 _C324 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_9_9_8 _C80 1.000000000000e+00 + Choice_9_9_8 _C306 1.000000000000e+00 + Choice_9_9_8 _C314 1.000000000000e+00 + Choice_9_9_8 _C324 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + MARK 'MARKER' 'INTORG' + Choice_9_9_9 _C81 1.000000000000e+00 + Choice_9_9_9 _C306 1.000000000000e+00 + Choice_9_9_9 _C315 1.000000000000e+00 + Choice_9_9_9 _C324 1.000000000000e+00 + MARK 'MARKER' 'INTEND' + __dummy OBJ 1.000000000000e+00 +RHS + RHS _C1 1.000000000000e+00 + RHS _C2 1.000000000000e+00 + RHS _C3 1.000000000000e+00 + RHS _C4 1.000000000000e+00 + RHS _C5 1.000000000000e+00 + RHS _C6 1.000000000000e+00 + RHS _C7 1.000000000000e+00 + RHS _C8 1.000000000000e+00 + RHS _C9 1.000000000000e+00 + RHS _C10 1.000000000000e+00 + RHS _C11 1.000000000000e+00 + RHS _C12 1.000000000000e+00 + RHS _C13 1.000000000000e+00 + RHS _C14 1.000000000000e+00 + RHS _C15 1.000000000000e+00 + RHS _C16 1.000000000000e+00 + RHS _C17 1.000000000000e+00 + RHS _C18 1.000000000000e+00 + RHS _C19 1.000000000000e+00 + RHS _C20 1.000000000000e+00 + RHS _C21 1.000000000000e+00 + RHS _C22 1.000000000000e+00 + RHS _C23 1.000000000000e+00 + RHS _C24 1.000000000000e+00 + RHS _C25 1.000000000000e+00 + RHS _C26 1.000000000000e+00 + RHS _C27 1.000000000000e+00 + RHS _C28 1.000000000000e+00 + RHS _C29 1.000000000000e+00 + RHS _C30 1.000000000000e+00 + RHS _C31 1.000000000000e+00 + RHS _C32 1.000000000000e+00 + RHS _C33 1.000000000000e+00 + RHS _C34 1.000000000000e+00 + RHS _C35 1.000000000000e+00 + RHS _C36 1.000000000000e+00 + RHS _C37 1.000000000000e+00 + RHS _C38 1.000000000000e+00 + RHS _C39 1.000000000000e+00 + RHS _C40 1.000000000000e+00 + RHS _C41 1.000000000000e+00 + RHS _C42 1.000000000000e+00 + RHS _C43 1.000000000000e+00 + RHS _C44 1.000000000000e+00 + RHS _C45 1.000000000000e+00 + RHS _C46 1.000000000000e+00 + RHS _C47 1.000000000000e+00 + RHS _C48 1.000000000000e+00 + RHS _C49 1.000000000000e+00 + RHS _C50 1.000000000000e+00 + RHS _C51 1.000000000000e+00 + RHS _C52 1.000000000000e+00 + RHS _C53 1.000000000000e+00 + RHS _C54 1.000000000000e+00 + RHS _C55 1.000000000000e+00 + RHS _C56 1.000000000000e+00 + RHS _C57 1.000000000000e+00 + RHS _C58 1.000000000000e+00 + RHS _C59 1.000000000000e+00 + RHS _C60 1.000000000000e+00 + RHS _C61 1.000000000000e+00 + RHS _C62 1.000000000000e+00 + RHS _C63 1.000000000000e+00 + RHS _C64 1.000000000000e+00 + RHS _C65 1.000000000000e+00 + RHS _C66 1.000000000000e+00 + RHS _C67 1.000000000000e+00 + RHS _C68 1.000000000000e+00 + RHS _C69 1.000000000000e+00 + RHS _C70 1.000000000000e+00 + RHS _C71 1.000000000000e+00 + RHS _C72 1.000000000000e+00 + RHS _C73 1.000000000000e+00 + RHS _C74 1.000000000000e+00 + RHS _C75 1.000000000000e+00 + RHS _C76 1.000000000000e+00 + RHS _C77 1.000000000000e+00 + RHS _C78 1.000000000000e+00 + RHS _C79 1.000000000000e+00 + RHS _C80 1.000000000000e+00 + RHS _C81 1.000000000000e+00 + RHS _C82 1.000000000000e+00 + RHS _C83 1.000000000000e+00 + RHS _C84 1.000000000000e+00 + RHS _C85 1.000000000000e+00 + RHS _C86 1.000000000000e+00 + RHS _C87 1.000000000000e+00 + RHS _C88 1.000000000000e+00 + RHS _C89 1.000000000000e+00 + RHS _C90 1.000000000000e+00 + RHS _C91 1.000000000000e+00 + RHS _C92 1.000000000000e+00 + RHS _C93 1.000000000000e+00 + RHS _C94 1.000000000000e+00 + RHS _C95 1.000000000000e+00 + RHS _C96 1.000000000000e+00 + RHS _C97 1.000000000000e+00 + RHS _C98 1.000000000000e+00 + RHS _C99 1.000000000000e+00 + RHS _C100 1.000000000000e+00 + RHS _C101 1.000000000000e+00 + RHS _C102 1.000000000000e+00 + RHS _C103 1.000000000000e+00 + RHS _C104 1.000000000000e+00 + RHS _C105 1.000000000000e+00 + RHS _C106 1.000000000000e+00 + RHS _C107 1.000000000000e+00 + RHS _C108 1.000000000000e+00 + RHS _C109 1.000000000000e+00 + RHS _C110 1.000000000000e+00 + RHS _C111 1.000000000000e+00 + RHS _C112 1.000000000000e+00 + RHS _C113 1.000000000000e+00 + RHS _C114 1.000000000000e+00 + RHS _C115 1.000000000000e+00 + RHS _C116 1.000000000000e+00 + RHS _C117 1.000000000000e+00 + RHS _C118 1.000000000000e+00 + RHS _C119 1.000000000000e+00 + RHS _C120 1.000000000000e+00 + RHS _C121 1.000000000000e+00 + RHS _C122 1.000000000000e+00 + RHS _C123 1.000000000000e+00 + RHS _C124 1.000000000000e+00 + RHS _C125 1.000000000000e+00 + RHS _C126 1.000000000000e+00 + RHS _C127 1.000000000000e+00 + RHS _C128 1.000000000000e+00 + RHS _C129 1.000000000000e+00 + RHS _C130 1.000000000000e+00 + RHS _C131 1.000000000000e+00 + RHS _C132 1.000000000000e+00 + RHS _C133 1.000000000000e+00 + RHS _C134 1.000000000000e+00 + RHS _C135 1.000000000000e+00 + RHS _C136 1.000000000000e+00 + RHS _C137 1.000000000000e+00 + RHS _C138 1.000000000000e+00 + RHS _C139 1.000000000000e+00 + RHS _C140 1.000000000000e+00 + RHS _C141 1.000000000000e+00 + RHS _C142 1.000000000000e+00 + RHS _C143 1.000000000000e+00 + RHS _C144 1.000000000000e+00 + RHS _C145 1.000000000000e+00 + RHS _C146 1.000000000000e+00 + RHS _C147 1.000000000000e+00 + RHS _C148 1.000000000000e+00 + RHS _C149 1.000000000000e+00 + RHS _C150 1.000000000000e+00 + RHS _C151 1.000000000000e+00 + RHS _C152 1.000000000000e+00 + RHS _C153 1.000000000000e+00 + RHS _C154 1.000000000000e+00 + RHS _C155 1.000000000000e+00 + RHS _C156 1.000000000000e+00 + RHS _C157 1.000000000000e+00 + RHS _C158 1.000000000000e+00 + RHS _C159 1.000000000000e+00 + RHS _C160 1.000000000000e+00 + RHS _C161 1.000000000000e+00 + RHS _C162 1.000000000000e+00 + RHS _C163 1.000000000000e+00 + RHS _C164 1.000000000000e+00 + RHS _C165 1.000000000000e+00 + RHS _C166 1.000000000000e+00 + RHS _C167 1.000000000000e+00 + RHS _C168 1.000000000000e+00 + RHS _C169 1.000000000000e+00 + RHS _C170 1.000000000000e+00 + RHS _C171 1.000000000000e+00 + RHS _C172 1.000000000000e+00 + RHS _C173 1.000000000000e+00 + RHS _C174 1.000000000000e+00 + RHS _C175 1.000000000000e+00 + RHS _C176 1.000000000000e+00 + RHS _C177 1.000000000000e+00 + RHS _C178 1.000000000000e+00 + RHS _C179 1.000000000000e+00 + RHS _C180 1.000000000000e+00 + RHS _C181 1.000000000000e+00 + RHS _C182 1.000000000000e+00 + RHS _C183 1.000000000000e+00 + RHS _C184 1.000000000000e+00 + RHS _C185 1.000000000000e+00 + RHS _C186 1.000000000000e+00 + RHS _C187 1.000000000000e+00 + RHS _C188 1.000000000000e+00 + RHS _C189 1.000000000000e+00 + RHS _C190 1.000000000000e+00 + RHS _C191 1.000000000000e+00 + RHS _C192 1.000000000000e+00 + RHS _C193 1.000000000000e+00 + RHS _C194 1.000000000000e+00 + RHS _C195 1.000000000000e+00 + RHS _C196 1.000000000000e+00 + RHS _C197 1.000000000000e+00 + RHS _C198 1.000000000000e+00 + RHS _C199 1.000000000000e+00 + RHS _C200 1.000000000000e+00 + RHS _C201 1.000000000000e+00 + RHS _C202 1.000000000000e+00 + RHS _C203 1.000000000000e+00 + RHS _C204 1.000000000000e+00 + RHS _C205 1.000000000000e+00 + RHS _C206 1.000000000000e+00 + RHS _C207 1.000000000000e+00 + RHS _C208 1.000000000000e+00 + RHS _C209 1.000000000000e+00 + RHS _C210 1.000000000000e+00 + RHS _C211 1.000000000000e+00 + RHS _C212 1.000000000000e+00 + RHS _C213 1.000000000000e+00 + RHS _C214 1.000000000000e+00 + RHS _C215 1.000000000000e+00 + RHS _C216 1.000000000000e+00 + RHS _C217 1.000000000000e+00 + RHS _C218 1.000000000000e+00 + RHS _C219 1.000000000000e+00 + RHS _C220 1.000000000000e+00 + RHS _C221 1.000000000000e+00 + RHS _C222 1.000000000000e+00 + RHS _C223 1.000000000000e+00 + RHS _C224 1.000000000000e+00 + RHS _C225 1.000000000000e+00 + RHS _C226 1.000000000000e+00 + RHS _C227 1.000000000000e+00 + RHS _C228 1.000000000000e+00 + RHS _C229 1.000000000000e+00 + RHS _C230 1.000000000000e+00 + RHS _C231 1.000000000000e+00 + RHS _C232 1.000000000000e+00 + RHS _C233 1.000000000000e+00 + RHS _C234 1.000000000000e+00 + RHS _C235 1.000000000000e+00 + RHS _C236 1.000000000000e+00 + RHS _C237 1.000000000000e+00 + RHS _C238 1.000000000000e+00 + RHS _C239 1.000000000000e+00 + RHS _C240 1.000000000000e+00 + RHS _C241 1.000000000000e+00 + RHS _C242 1.000000000000e+00 + RHS _C243 1.000000000000e+00 + RHS _C244 1.000000000000e+00 + RHS _C245 1.000000000000e+00 + RHS _C246 1.000000000000e+00 + RHS _C247 1.000000000000e+00 + RHS _C248 1.000000000000e+00 + RHS _C249 1.000000000000e+00 + RHS _C250 1.000000000000e+00 + RHS _C251 1.000000000000e+00 + RHS _C252 1.000000000000e+00 + RHS _C253 1.000000000000e+00 + RHS _C254 1.000000000000e+00 + RHS _C255 1.000000000000e+00 + RHS _C256 1.000000000000e+00 + RHS _C257 1.000000000000e+00 + RHS _C258 1.000000000000e+00 + RHS _C259 1.000000000000e+00 + RHS _C260 1.000000000000e+00 + RHS _C261 1.000000000000e+00 + RHS _C262 1.000000000000e+00 + RHS _C263 1.000000000000e+00 + RHS _C264 1.000000000000e+00 + RHS _C265 1.000000000000e+00 + RHS _C266 1.000000000000e+00 + RHS _C267 1.000000000000e+00 + RHS _C268 1.000000000000e+00 + RHS _C269 1.000000000000e+00 + RHS _C270 1.000000000000e+00 + RHS _C271 1.000000000000e+00 + RHS _C272 1.000000000000e+00 + RHS _C273 1.000000000000e+00 + RHS _C274 1.000000000000e+00 + RHS _C275 1.000000000000e+00 + RHS _C276 1.000000000000e+00 + RHS _C277 1.000000000000e+00 + RHS _C278 1.000000000000e+00 + RHS _C279 1.000000000000e+00 + RHS _C280 1.000000000000e+00 + RHS _C281 1.000000000000e+00 + RHS _C282 1.000000000000e+00 + RHS _C283 1.000000000000e+00 + RHS _C284 1.000000000000e+00 + RHS _C285 1.000000000000e+00 + RHS _C286 1.000000000000e+00 + RHS _C287 1.000000000000e+00 + RHS _C288 1.000000000000e+00 + RHS _C289 1.000000000000e+00 + RHS _C290 1.000000000000e+00 + RHS _C291 1.000000000000e+00 + RHS _C292 1.000000000000e+00 + RHS _C293 1.000000000000e+00 + RHS _C294 1.000000000000e+00 + RHS _C295 1.000000000000e+00 + RHS _C296 1.000000000000e+00 + RHS _C297 1.000000000000e+00 + RHS _C298 1.000000000000e+00 + RHS _C299 1.000000000000e+00 + RHS _C300 1.000000000000e+00 + RHS _C301 1.000000000000e+00 + RHS _C302 1.000000000000e+00 + RHS _C303 1.000000000000e+00 + RHS _C304 1.000000000000e+00 + RHS _C305 1.000000000000e+00 + RHS _C306 1.000000000000e+00 + RHS _C307 1.000000000000e+00 + RHS _C308 1.000000000000e+00 + RHS _C309 1.000000000000e+00 + RHS _C310 1.000000000000e+00 + RHS _C311 1.000000000000e+00 + RHS _C312 1.000000000000e+00 + RHS _C313 1.000000000000e+00 + RHS _C314 1.000000000000e+00 + RHS _C315 1.000000000000e+00 + RHS _C316 1.000000000000e+00 + RHS _C317 1.000000000000e+00 + RHS _C318 1.000000000000e+00 + RHS _C319 1.000000000000e+00 + RHS _C320 1.000000000000e+00 + RHS _C321 1.000000000000e+00 + RHS _C322 1.000000000000e+00 + RHS _C323 1.000000000000e+00 + RHS _C324 1.000000000000e+00 + RHS _C325 1.000000000000e+00 + RHS _C326 1.000000000000e+00 + RHS _C327 1.000000000000e+00 + RHS _C328 1.000000000000e+00 + RHS _C329 1.000000000000e+00 + RHS _C330 1.000000000000e+00 + RHS _C331 1.000000000000e+00 + RHS _C332 1.000000000000e+00 + RHS _C333 1.000000000000e+00 + RHS _C334 1.000000000000e+00 + RHS _C335 1.000000000000e+00 + RHS _C336 1.000000000000e+00 + RHS _C337 1.000000000000e+00 + RHS _C338 1.000000000000e+00 + RHS _C339 1.000000000000e+00 + RHS _C340 1.000000000000e+00 + RHS _C341 1.000000000000e+00 + RHS _C342 1.000000000000e+00 + RHS _C343 1.000000000000e+00 + RHS _C344 1.000000000000e+00 + RHS _C345 1.000000000000e+00 + RHS _C346 1.000000000000e+00 + RHS _C347 1.000000000000e+00 + RHS _C348 1.000000000000e+00 + RHS _C349 1.000000000000e+00 + RHS _C350 1.000000000000e+00 + RHS _C351 1.000000000000e+00 + RHS _C352 1.000000000000e+00 + RHS _C353 1.000000000000e+00 +BOUNDS + BV BND Choice_1_1_1 + BV BND Choice_1_1_2 + BV BND Choice_1_1_3 + BV BND Choice_1_1_4 + BV BND Choice_1_1_5 + BV BND Choice_1_1_6 + BV BND Choice_1_1_7 + BV BND Choice_1_1_8 + BV BND Choice_1_1_9 + BV BND Choice_1_2_1 + BV BND Choice_1_2_2 + BV BND Choice_1_2_3 + BV BND Choice_1_2_4 + BV BND Choice_1_2_5 + BV BND Choice_1_2_6 + BV BND Choice_1_2_7 + BV BND Choice_1_2_8 + BV BND Choice_1_2_9 + BV BND Choice_1_3_1 + BV BND Choice_1_3_2 + BV BND Choice_1_3_3 + BV BND Choice_1_3_4 + BV BND Choice_1_3_5 + BV BND Choice_1_3_6 + BV BND Choice_1_3_7 + BV BND Choice_1_3_8 + BV BND Choice_1_3_9 + BV BND Choice_1_4_1 + BV BND Choice_1_4_2 + BV BND Choice_1_4_3 + BV BND Choice_1_4_4 + BV BND Choice_1_4_5 + BV BND Choice_1_4_6 + BV BND Choice_1_4_7 + BV BND Choice_1_4_8 + BV BND Choice_1_4_9 + BV BND Choice_1_5_1 + BV BND Choice_1_5_2 + BV BND Choice_1_5_3 + BV BND Choice_1_5_4 + BV BND Choice_1_5_5 + BV BND Choice_1_5_6 + BV BND Choice_1_5_7 + BV BND Choice_1_5_8 + BV BND Choice_1_5_9 + BV BND Choice_1_6_1 + BV BND Choice_1_6_2 + BV BND Choice_1_6_3 + BV BND Choice_1_6_4 + BV BND Choice_1_6_5 + BV BND Choice_1_6_6 + BV BND Choice_1_6_7 + BV BND Choice_1_6_8 + BV BND Choice_1_6_9 + BV BND Choice_1_7_1 + BV BND Choice_1_7_2 + BV BND Choice_1_7_3 + BV BND Choice_1_7_4 + BV BND Choice_1_7_5 + BV BND Choice_1_7_6 + BV BND Choice_1_7_7 + BV BND Choice_1_7_8 + BV BND Choice_1_7_9 + BV BND Choice_1_8_1 + BV BND Choice_1_8_2 + BV BND Choice_1_8_3 + BV BND Choice_1_8_4 + BV BND Choice_1_8_5 + BV BND Choice_1_8_6 + BV BND Choice_1_8_7 + BV BND Choice_1_8_8 + BV BND Choice_1_8_9 + BV BND Choice_1_9_1 + BV BND Choice_1_9_2 + BV BND Choice_1_9_3 + BV BND Choice_1_9_4 + BV BND Choice_1_9_5 + BV BND Choice_1_9_6 + BV BND Choice_1_9_7 + BV BND Choice_1_9_8 + BV BND Choice_1_9_9 + BV BND Choice_2_1_1 + BV BND Choice_2_1_2 + BV BND Choice_2_1_3 + BV BND Choice_2_1_4 + BV BND Choice_2_1_5 + BV BND Choice_2_1_6 + BV BND Choice_2_1_7 + BV BND Choice_2_1_8 + BV BND Choice_2_1_9 + BV BND Choice_2_2_1 + BV BND Choice_2_2_2 + BV BND Choice_2_2_3 + BV BND Choice_2_2_4 + BV BND Choice_2_2_5 + BV BND Choice_2_2_6 + BV BND Choice_2_2_7 + BV BND Choice_2_2_8 + BV BND Choice_2_2_9 + BV BND Choice_2_3_1 + BV BND Choice_2_3_2 + BV BND Choice_2_3_3 + BV BND Choice_2_3_4 + BV BND Choice_2_3_5 + BV BND Choice_2_3_6 + BV BND Choice_2_3_7 + BV BND Choice_2_3_8 + BV BND Choice_2_3_9 + BV BND Choice_2_4_1 + BV BND Choice_2_4_2 + BV BND Choice_2_4_3 + BV BND Choice_2_4_4 + BV BND Choice_2_4_5 + BV BND Choice_2_4_6 + BV BND Choice_2_4_7 + BV BND Choice_2_4_8 + BV BND Choice_2_4_9 + BV BND Choice_2_5_1 + BV BND Choice_2_5_2 + BV BND Choice_2_5_3 + BV BND Choice_2_5_4 + BV BND Choice_2_5_5 + BV BND Choice_2_5_6 + BV BND Choice_2_5_7 + BV BND Choice_2_5_8 + BV BND Choice_2_5_9 + BV BND Choice_2_6_1 + BV BND Choice_2_6_2 + BV BND Choice_2_6_3 + BV BND Choice_2_6_4 + BV BND Choice_2_6_5 + BV BND Choice_2_6_6 + BV BND Choice_2_6_7 + BV BND Choice_2_6_8 + BV BND Choice_2_6_9 + BV BND Choice_2_7_1 + BV BND Choice_2_7_2 + BV BND Choice_2_7_3 + BV BND Choice_2_7_4 + BV BND Choice_2_7_5 + BV BND Choice_2_7_6 + BV BND Choice_2_7_7 + BV BND Choice_2_7_8 + BV BND Choice_2_7_9 + BV BND Choice_2_8_1 + BV BND Choice_2_8_2 + BV BND Choice_2_8_3 + BV BND Choice_2_8_4 + BV BND Choice_2_8_5 + BV BND Choice_2_8_6 + BV BND Choice_2_8_7 + BV BND Choice_2_8_8 + BV BND Choice_2_8_9 + BV BND Choice_2_9_1 + BV BND Choice_2_9_2 + BV BND Choice_2_9_3 + BV BND Choice_2_9_4 + BV BND Choice_2_9_5 + BV BND Choice_2_9_6 + BV BND Choice_2_9_7 + BV BND Choice_2_9_8 + BV BND Choice_2_9_9 + BV BND Choice_3_1_1 + BV BND Choice_3_1_2 + BV BND Choice_3_1_3 + BV BND Choice_3_1_4 + BV BND Choice_3_1_5 + BV BND Choice_3_1_6 + BV BND Choice_3_1_7 + BV BND Choice_3_1_8 + BV BND Choice_3_1_9 + BV BND Choice_3_2_1 + BV BND Choice_3_2_2 + BV BND Choice_3_2_3 + BV BND Choice_3_2_4 + BV BND Choice_3_2_5 + BV BND Choice_3_2_6 + BV BND Choice_3_2_7 + BV BND Choice_3_2_8 + BV BND Choice_3_2_9 + BV BND Choice_3_3_1 + BV BND Choice_3_3_2 + BV BND Choice_3_3_3 + BV BND Choice_3_3_4 + BV BND Choice_3_3_5 + BV BND Choice_3_3_6 + BV BND Choice_3_3_7 + BV BND Choice_3_3_8 + BV BND Choice_3_3_9 + BV BND Choice_3_4_1 + BV BND Choice_3_4_2 + BV BND Choice_3_4_3 + BV BND Choice_3_4_4 + BV BND Choice_3_4_5 + BV BND Choice_3_4_6 + BV BND Choice_3_4_7 + BV BND Choice_3_4_8 + BV BND Choice_3_4_9 + BV BND Choice_3_5_1 + BV BND Choice_3_5_2 + BV BND Choice_3_5_3 + BV BND Choice_3_5_4 + BV BND Choice_3_5_5 + BV BND Choice_3_5_6 + BV BND Choice_3_5_7 + BV BND Choice_3_5_8 + BV BND Choice_3_5_9 + BV BND Choice_3_6_1 + BV BND Choice_3_6_2 + BV BND Choice_3_6_3 + BV BND Choice_3_6_4 + BV BND Choice_3_6_5 + BV BND Choice_3_6_6 + BV BND Choice_3_6_7 + BV BND Choice_3_6_8 + BV BND Choice_3_6_9 + BV BND Choice_3_7_1 + BV BND Choice_3_7_2 + BV BND Choice_3_7_3 + BV BND Choice_3_7_4 + BV BND Choice_3_7_5 + BV BND Choice_3_7_6 + BV BND Choice_3_7_7 + BV BND Choice_3_7_8 + BV BND Choice_3_7_9 + BV BND Choice_3_8_1 + BV BND Choice_3_8_2 + BV BND Choice_3_8_3 + BV BND Choice_3_8_4 + BV BND Choice_3_8_5 + BV BND Choice_3_8_6 + BV BND Choice_3_8_7 + BV BND Choice_3_8_8 + BV BND Choice_3_8_9 + BV BND Choice_3_9_1 + BV BND Choice_3_9_2 + BV BND Choice_3_9_3 + BV BND Choice_3_9_4 + BV BND Choice_3_9_5 + BV BND Choice_3_9_6 + BV BND Choice_3_9_7 + BV BND Choice_3_9_8 + BV BND Choice_3_9_9 + BV BND Choice_4_1_1 + BV BND Choice_4_1_2 + BV BND Choice_4_1_3 + BV BND Choice_4_1_4 + BV BND Choice_4_1_5 + BV BND Choice_4_1_6 + BV BND Choice_4_1_7 + BV BND Choice_4_1_8 + BV BND Choice_4_1_9 + BV BND Choice_4_2_1 + BV BND Choice_4_2_2 + BV BND Choice_4_2_3 + BV BND Choice_4_2_4 + BV BND Choice_4_2_5 + BV BND Choice_4_2_6 + BV BND Choice_4_2_7 + BV BND Choice_4_2_8 + BV BND Choice_4_2_9 + BV BND Choice_4_3_1 + BV BND Choice_4_3_2 + BV BND Choice_4_3_3 + BV BND Choice_4_3_4 + BV BND Choice_4_3_5 + BV BND Choice_4_3_6 + BV BND Choice_4_3_7 + BV BND Choice_4_3_8 + BV BND Choice_4_3_9 + BV BND Choice_4_4_1 + BV BND Choice_4_4_2 + BV BND Choice_4_4_3 + BV BND Choice_4_4_4 + BV BND Choice_4_4_5 + BV BND Choice_4_4_6 + BV BND Choice_4_4_7 + BV BND Choice_4_4_8 + BV BND Choice_4_4_9 + BV BND Choice_4_5_1 + BV BND Choice_4_5_2 + BV BND Choice_4_5_3 + BV BND Choice_4_5_4 + BV BND Choice_4_5_5 + BV BND Choice_4_5_6 + BV BND Choice_4_5_7 + BV BND Choice_4_5_8 + BV BND Choice_4_5_9 + BV BND Choice_4_6_1 + BV BND Choice_4_6_2 + BV BND Choice_4_6_3 + BV BND Choice_4_6_4 + BV BND Choice_4_6_5 + BV BND Choice_4_6_6 + BV BND Choice_4_6_7 + BV BND Choice_4_6_8 + BV BND Choice_4_6_9 + BV BND Choice_4_7_1 + BV BND Choice_4_7_2 + BV BND Choice_4_7_3 + BV BND Choice_4_7_4 + BV BND Choice_4_7_5 + BV BND Choice_4_7_6 + BV BND Choice_4_7_7 + BV BND Choice_4_7_8 + BV BND Choice_4_7_9 + BV BND Choice_4_8_1 + BV BND Choice_4_8_2 + BV BND Choice_4_8_3 + BV BND Choice_4_8_4 + BV BND Choice_4_8_5 + BV BND Choice_4_8_6 + BV BND Choice_4_8_7 + BV BND Choice_4_8_8 + BV BND Choice_4_8_9 + BV BND Choice_4_9_1 + BV BND Choice_4_9_2 + BV BND Choice_4_9_3 + BV BND Choice_4_9_4 + BV BND Choice_4_9_5 + BV BND Choice_4_9_6 + BV BND Choice_4_9_7 + BV BND Choice_4_9_8 + BV BND Choice_4_9_9 + BV BND Choice_5_1_1 + BV BND Choice_5_1_2 + BV BND Choice_5_1_3 + BV BND Choice_5_1_4 + BV BND Choice_5_1_5 + BV BND Choice_5_1_6 + BV BND Choice_5_1_7 + BV BND Choice_5_1_8 + BV BND Choice_5_1_9 + BV BND Choice_5_2_1 + BV BND Choice_5_2_2 + BV BND Choice_5_2_3 + BV BND Choice_5_2_4 + BV BND Choice_5_2_5 + BV BND Choice_5_2_6 + BV BND Choice_5_2_7 + BV BND Choice_5_2_8 + BV BND Choice_5_2_9 + BV BND Choice_5_3_1 + BV BND Choice_5_3_2 + BV BND Choice_5_3_3 + BV BND Choice_5_3_4 + BV BND Choice_5_3_5 + BV BND Choice_5_3_6 + BV BND Choice_5_3_7 + BV BND Choice_5_3_8 + BV BND Choice_5_3_9 + BV BND Choice_5_4_1 + BV BND Choice_5_4_2 + BV BND Choice_5_4_3 + BV BND Choice_5_4_4 + BV BND Choice_5_4_5 + BV BND Choice_5_4_6 + BV BND Choice_5_4_7 + BV BND Choice_5_4_8 + BV BND Choice_5_4_9 + BV BND Choice_5_5_1 + BV BND Choice_5_5_2 + BV BND Choice_5_5_3 + BV BND Choice_5_5_4 + BV BND Choice_5_5_5 + BV BND Choice_5_5_6 + BV BND Choice_5_5_7 + BV BND Choice_5_5_8 + BV BND Choice_5_5_9 + BV BND Choice_5_6_1 + BV BND Choice_5_6_2 + BV BND Choice_5_6_3 + BV BND Choice_5_6_4 + BV BND Choice_5_6_5 + BV BND Choice_5_6_6 + BV BND Choice_5_6_7 + BV BND Choice_5_6_8 + BV BND Choice_5_6_9 + BV BND Choice_5_7_1 + BV BND Choice_5_7_2 + BV BND Choice_5_7_3 + BV BND Choice_5_7_4 + BV BND Choice_5_7_5 + BV BND Choice_5_7_6 + BV BND Choice_5_7_7 + BV BND Choice_5_7_8 + BV BND Choice_5_7_9 + BV BND Choice_5_8_1 + BV BND Choice_5_8_2 + BV BND Choice_5_8_3 + BV BND Choice_5_8_4 + BV BND Choice_5_8_5 + BV BND Choice_5_8_6 + BV BND Choice_5_8_7 + BV BND Choice_5_8_8 + BV BND Choice_5_8_9 + BV BND Choice_5_9_1 + BV BND Choice_5_9_2 + BV BND Choice_5_9_3 + BV BND Choice_5_9_4 + BV BND Choice_5_9_5 + BV BND Choice_5_9_6 + BV BND Choice_5_9_7 + BV BND Choice_5_9_8 + BV BND Choice_5_9_9 + BV BND Choice_6_1_1 + BV BND Choice_6_1_2 + BV BND Choice_6_1_3 + BV BND Choice_6_1_4 + BV BND Choice_6_1_5 + BV BND Choice_6_1_6 + BV BND Choice_6_1_7 + BV BND Choice_6_1_8 + BV BND Choice_6_1_9 + BV BND Choice_6_2_1 + BV BND Choice_6_2_2 + BV BND Choice_6_2_3 + BV BND Choice_6_2_4 + BV BND Choice_6_2_5 + BV BND Choice_6_2_6 + BV BND Choice_6_2_7 + BV BND Choice_6_2_8 + BV BND Choice_6_2_9 + BV BND Choice_6_3_1 + BV BND Choice_6_3_2 + BV BND Choice_6_3_3 + BV BND Choice_6_3_4 + BV BND Choice_6_3_5 + BV BND Choice_6_3_6 + BV BND Choice_6_3_7 + BV BND Choice_6_3_8 + BV BND Choice_6_3_9 + BV BND Choice_6_4_1 + BV BND Choice_6_4_2 + BV BND Choice_6_4_3 + BV BND Choice_6_4_4 + BV BND Choice_6_4_5 + BV BND Choice_6_4_6 + BV BND Choice_6_4_7 + BV BND Choice_6_4_8 + BV BND Choice_6_4_9 + BV BND Choice_6_5_1 + BV BND Choice_6_5_2 + BV BND Choice_6_5_3 + BV BND Choice_6_5_4 + BV BND Choice_6_5_5 + BV BND Choice_6_5_6 + BV BND Choice_6_5_7 + BV BND Choice_6_5_8 + BV BND Choice_6_5_9 + BV BND Choice_6_6_1 + BV BND Choice_6_6_2 + BV BND Choice_6_6_3 + BV BND Choice_6_6_4 + BV BND Choice_6_6_5 + BV BND Choice_6_6_6 + BV BND Choice_6_6_7 + BV BND Choice_6_6_8 + BV BND Choice_6_6_9 + BV BND Choice_6_7_1 + BV BND Choice_6_7_2 + BV BND Choice_6_7_3 + BV BND Choice_6_7_4 + BV BND Choice_6_7_5 + BV BND Choice_6_7_6 + BV BND Choice_6_7_7 + BV BND Choice_6_7_8 + BV BND Choice_6_7_9 + BV BND Choice_6_8_1 + BV BND Choice_6_8_2 + BV BND Choice_6_8_3 + BV BND Choice_6_8_4 + BV BND Choice_6_8_5 + BV BND Choice_6_8_6 + BV BND Choice_6_8_7 + BV BND Choice_6_8_8 + BV BND Choice_6_8_9 + BV BND Choice_6_9_1 + BV BND Choice_6_9_2 + BV BND Choice_6_9_3 + BV BND Choice_6_9_4 + BV BND Choice_6_9_5 + BV BND Choice_6_9_6 + BV BND Choice_6_9_7 + BV BND Choice_6_9_8 + BV BND Choice_6_9_9 + BV BND Choice_7_1_1 + BV BND Choice_7_1_2 + BV BND Choice_7_1_3 + BV BND Choice_7_1_4 + BV BND Choice_7_1_5 + BV BND Choice_7_1_6 + BV BND Choice_7_1_7 + BV BND Choice_7_1_8 + BV BND Choice_7_1_9 + BV BND Choice_7_2_1 + BV BND Choice_7_2_2 + BV BND Choice_7_2_3 + BV BND Choice_7_2_4 + BV BND Choice_7_2_5 + BV BND Choice_7_2_6 + BV BND Choice_7_2_7 + BV BND Choice_7_2_8 + BV BND Choice_7_2_9 + BV BND Choice_7_3_1 + BV BND Choice_7_3_2 + BV BND Choice_7_3_3 + BV BND Choice_7_3_4 + BV BND Choice_7_3_5 + BV BND Choice_7_3_6 + BV BND Choice_7_3_7 + BV BND Choice_7_3_8 + BV BND Choice_7_3_9 + BV BND Choice_7_4_1 + BV BND Choice_7_4_2 + BV BND Choice_7_4_3 + BV BND Choice_7_4_4 + BV BND Choice_7_4_5 + BV BND Choice_7_4_6 + BV BND Choice_7_4_7 + BV BND Choice_7_4_8 + BV BND Choice_7_4_9 + BV BND Choice_7_5_1 + BV BND Choice_7_5_2 + BV BND Choice_7_5_3 + BV BND Choice_7_5_4 + BV BND Choice_7_5_5 + BV BND Choice_7_5_6 + BV BND Choice_7_5_7 + BV BND Choice_7_5_8 + BV BND Choice_7_5_9 + BV BND Choice_7_6_1 + BV BND Choice_7_6_2 + BV BND Choice_7_6_3 + BV BND Choice_7_6_4 + BV BND Choice_7_6_5 + BV BND Choice_7_6_6 + BV BND Choice_7_6_7 + BV BND Choice_7_6_8 + BV BND Choice_7_6_9 + BV BND Choice_7_7_1 + BV BND Choice_7_7_2 + BV BND Choice_7_7_3 + BV BND Choice_7_7_4 + BV BND Choice_7_7_5 + BV BND Choice_7_7_6 + BV BND Choice_7_7_7 + BV BND Choice_7_7_8 + BV BND Choice_7_7_9 + BV BND Choice_7_8_1 + BV BND Choice_7_8_2 + BV BND Choice_7_8_3 + BV BND Choice_7_8_4 + BV BND Choice_7_8_5 + BV BND Choice_7_8_6 + BV BND Choice_7_8_7 + BV BND Choice_7_8_8 + BV BND Choice_7_8_9 + BV BND Choice_7_9_1 + BV BND Choice_7_9_2 + BV BND Choice_7_9_3 + BV BND Choice_7_9_4 + BV BND Choice_7_9_5 + BV BND Choice_7_9_6 + BV BND Choice_7_9_7 + BV BND Choice_7_9_8 + BV BND Choice_7_9_9 + BV BND Choice_8_1_1 + BV BND Choice_8_1_2 + BV BND Choice_8_1_3 + BV BND Choice_8_1_4 + BV BND Choice_8_1_5 + BV BND Choice_8_1_6 + BV BND Choice_8_1_7 + BV BND Choice_8_1_8 + BV BND Choice_8_1_9 + BV BND Choice_8_2_1 + BV BND Choice_8_2_2 + BV BND Choice_8_2_3 + BV BND Choice_8_2_4 + BV BND Choice_8_2_5 + BV BND Choice_8_2_6 + BV BND Choice_8_2_7 + BV BND Choice_8_2_8 + BV BND Choice_8_2_9 + BV BND Choice_8_3_1 + BV BND Choice_8_3_2 + BV BND Choice_8_3_3 + BV BND Choice_8_3_4 + BV BND Choice_8_3_5 + BV BND Choice_8_3_6 + BV BND Choice_8_3_7 + BV BND Choice_8_3_8 + BV BND Choice_8_3_9 + BV BND Choice_8_4_1 + BV BND Choice_8_4_2 + BV BND Choice_8_4_3 + BV BND Choice_8_4_4 + BV BND Choice_8_4_5 + BV BND Choice_8_4_6 + BV BND Choice_8_4_7 + BV BND Choice_8_4_8 + BV BND Choice_8_4_9 + BV BND Choice_8_5_1 + BV BND Choice_8_5_2 + BV BND Choice_8_5_3 + BV BND Choice_8_5_4 + BV BND Choice_8_5_5 + BV BND Choice_8_5_6 + BV BND Choice_8_5_7 + BV BND Choice_8_5_8 + BV BND Choice_8_5_9 + BV BND Choice_8_6_1 + BV BND Choice_8_6_2 + BV BND Choice_8_6_3 + BV BND Choice_8_6_4 + BV BND Choice_8_6_5 + BV BND Choice_8_6_6 + BV BND Choice_8_6_7 + BV BND Choice_8_6_8 + BV BND Choice_8_6_9 + BV BND Choice_8_7_1 + BV BND Choice_8_7_2 + BV BND Choice_8_7_3 + BV BND Choice_8_7_4 + BV BND Choice_8_7_5 + BV BND Choice_8_7_6 + BV BND Choice_8_7_7 + BV BND Choice_8_7_8 + BV BND Choice_8_7_9 + BV BND Choice_8_8_1 + BV BND Choice_8_8_2 + BV BND Choice_8_8_3 + BV BND Choice_8_8_4 + BV BND Choice_8_8_5 + BV BND Choice_8_8_6 + BV BND Choice_8_8_7 + BV BND Choice_8_8_8 + BV BND Choice_8_8_9 + BV BND Choice_8_9_1 + BV BND Choice_8_9_2 + BV BND Choice_8_9_3 + BV BND Choice_8_9_4 + BV BND Choice_8_9_5 + BV BND Choice_8_9_6 + BV BND Choice_8_9_7 + BV BND Choice_8_9_8 + BV BND Choice_8_9_9 + BV BND Choice_9_1_1 + BV BND Choice_9_1_2 + BV BND Choice_9_1_3 + BV BND Choice_9_1_4 + BV BND Choice_9_1_5 + BV BND Choice_9_1_6 + BV BND Choice_9_1_7 + BV BND Choice_9_1_8 + BV BND Choice_9_1_9 + BV BND Choice_9_2_1 + BV BND Choice_9_2_2 + BV BND Choice_9_2_3 + BV BND Choice_9_2_4 + BV BND Choice_9_2_5 + BV BND Choice_9_2_6 + BV BND Choice_9_2_7 + BV BND Choice_9_2_8 + BV BND Choice_9_2_9 + BV BND Choice_9_3_1 + BV BND Choice_9_3_2 + BV BND Choice_9_3_3 + BV BND Choice_9_3_4 + BV BND Choice_9_3_5 + BV BND Choice_9_3_6 + BV BND Choice_9_3_7 + BV BND Choice_9_3_8 + BV BND Choice_9_3_9 + BV BND Choice_9_4_1 + BV BND Choice_9_4_2 + BV BND Choice_9_4_3 + BV BND Choice_9_4_4 + BV BND Choice_9_4_5 + BV BND Choice_9_4_6 + BV BND Choice_9_4_7 + BV BND Choice_9_4_8 + BV BND Choice_9_4_9 + BV BND Choice_9_5_1 + BV BND Choice_9_5_2 + BV BND Choice_9_5_3 + BV BND Choice_9_5_4 + BV BND Choice_9_5_5 + BV BND Choice_9_5_6 + BV BND Choice_9_5_7 + BV BND Choice_9_5_8 + BV BND Choice_9_5_9 + BV BND Choice_9_6_1 + BV BND Choice_9_6_2 + BV BND Choice_9_6_3 + BV BND Choice_9_6_4 + BV BND Choice_9_6_5 + BV BND Choice_9_6_6 + BV BND Choice_9_6_7 + BV BND Choice_9_6_8 + BV BND Choice_9_6_9 + BV BND Choice_9_7_1 + BV BND Choice_9_7_2 + BV BND Choice_9_7_3 + BV BND Choice_9_7_4 + BV BND Choice_9_7_5 + BV BND Choice_9_7_6 + BV BND Choice_9_7_7 + BV BND Choice_9_7_8 + BV BND Choice_9_7_9 + BV BND Choice_9_8_1 + BV BND Choice_9_8_2 + BV BND Choice_9_8_3 + BV BND Choice_9_8_4 + BV BND Choice_9_8_5 + BV BND Choice_9_8_6 + BV BND Choice_9_8_7 + BV BND Choice_9_8_8 + BV BND Choice_9_8_9 + BV BND Choice_9_9_1 + BV BND Choice_9_9_2 + BV BND Choice_9_9_3 + BV BND Choice_9_9_4 + BV BND Choice_9_9_5 + BV BND Choice_9_9_6 + BV BND Choice_9_9_7 + BV BND Choice_9_9_8 + BV BND Choice_9_9_9 + FX BND __dummy 0.000000000000e+00 +ENDATA diff --git a/datasets/mip/trivial-presolve-optimality.mps b/datasets/mip/trivial-presolve-optimality.mps new file mode 100644 index 000000000..c6cb3c470 --- /dev/null +++ b/datasets/mip/trivial-presolve-optimality.mps @@ -0,0 +1,16 @@ +NAME EXAMPLE +ROWS + N OBJ + E C1 +COLUMNS + X1 C1 1 + X1 OBJ 0 + X2 OBJ -1 +RHS + RHS1 C1 0 +BOUNDS + LO BND1 X1 0 + UP BND1 X1 1 + LO BND1 X2 0 + UP BND1 X2 1 +ENDATA From 88b8f0af4471c719946c0aacbdc640a8ef9bef65 Mon Sep 17 00:00:00 2001 From: Rajesh Gandham Date: Fri, 23 May 2025 08:44:33 -0400 Subject: [PATCH 13/15] Switch to using v3.2 of argparser for wheels (#31) We are using 3.2 version of cpp-argparser from conda. This PR updates the version to 3.2 for wheel builds as well. Authors: - Rajesh Gandham (https://github.com/rg20) Approvers: - Ramakrishnap (https://github.com/rgsl888prabhu) URL: https://github.com/NVIDIA/cuopt/pull/31 --- python/libcuopt/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/libcuopt/CMakeLists.txt b/python/libcuopt/CMakeLists.txt index c89a7233c..7b85f2275 100644 --- a/python/libcuopt/CMakeLists.txt +++ b/python/libcuopt/CMakeLists.txt @@ -42,7 +42,7 @@ include(FetchContent) FetchContent_Declare( argparse GIT_REPOSITORY https://github.com/p-ranav/argparse.git - GIT_TAG v2.9 + GIT_TAG v3.2 ) FetchContent_MakeAvailable(argparse) From 82de1e401760892ce3e0d92e00382222ee96da46 Mon Sep 17 00:00:00 2001 From: Nicolas Blin <31096601+Kh4ster@users.noreply.github.com> Date: Fri, 23 May 2025 16:28:42 +0200 Subject: [PATCH 14/15] Fix graph bug seen when using batch (#34) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Should fix the interment CI issue we were seeing in batch mode It was possible for another CPU thread to call cudaMemcpyToSymbol while another was trying to capture on its stream. Solved by switching to the async API and use stream so that the call doesn't end up on the default stream. Authors: - Nicolas Blin (https://github.com/Kh4ster) - Ramakrishnap (https://github.com/rgsl888prabhu) Approvers: - Akif ÇÖRDÜK (https://github.com/akifcorduk) - Ramakrishnap (https://github.com/rgsl888prabhu) URL: https://github.com/NVIDIA/cuopt/pull/34 --- .github/workflows/build.yaml | 12 +- .github/workflows/pr.yaml | 23 ++-- .../workflows/self_hosted_service_test.yaml | 6 +- .github/workflows/test.yaml | 2 + README.md | 15 +-- ci/release/update-version-cuopt.sh | 2 +- ci/release/update-version-rapids.sh | 2 +- .../all_cuda-118_arch-aarch64.yaml | 84 ------------ .../all_cuda-118_arch-x86_64.yaml | 84 ------------ cpp/src/linear_programming/pdlp.cu | 11 +- cpp/src/linear_programming/pdlp.cuh | 2 +- .../restart_strategy/pdlp_restart_strategy.cu | 49 ++++--- .../pdlp_restart_strategy.cuh | 2 +- cpp/src/linear_programming/solve.cu | 10 +- .../adaptive_step_size_strategy.cu | 38 ++++-- .../adaptive_step_size_strategy.hpp | 2 +- cpp/src/mip/solve.cu | 10 +- cpp/tests/mip/bounds_standardization_test.cu | 10 +- cpp/tests/mip/elim_var_remap_test.cu | 10 +- dependencies.yaml | 127 +----------------- python/cuopt/pyproject.toml | 2 +- 21 files changed, 121 insertions(+), 382 deletions(-) delete mode 100644 conda/environments/all_cuda-118_arch-aarch64.yaml delete mode 100644 conda/environments/all_cuda-118_arch-x86_64.yaml diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 978bbafd5..db07d248a 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -30,20 +30,23 @@ jobs: secrets: inherit uses: rapidsai/shared-workflows/.github/workflows/conda-cpp-build.yaml@branch-25.06 with: + matrix_filter: map(select((.CUDA_VER | startswith("12")))) build_type: ${{ inputs.build_type || 'branch' }} branch: ${{ inputs.branch }} date: ${{ inputs.date }} sha: ${{ inputs.sha }} + script: ci/build_cpp.sh python-build: needs: [cpp-build] secrets: inherit uses: rapidsai/shared-workflows/.github/workflows/conda-python-build.yaml@branch-25.06 with: + matrix_filter: map(select((.CUDA_VER | startswith("12")) and .PY_VER == "3.12")) build_type: ${{ inputs.build_type || 'branch' }} branch: ${{ inputs.branch }} date: ${{ inputs.date }} sha: ${{ inputs.sha }} - matrix_filter: map(select(.PY_VER != "3.13")) + script: ci/build_python.sh wheel-build-cuopt-mps-parser: secrets: inherit uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@branch-25.06 @@ -69,14 +72,13 @@ jobs: script: ci/build_wheel_libcuopt.sh package-name: libcuopt package-type: cpp - # build for every combination of arch and CUDA version, but only for the latest Python - matrix_filter: map(select(.PY_VER == "3.12")) | group_by([.ARCH, (.CUDA_VER|split(".")|map(tonumber)|.[0])]) | add + matrix_filter: map(select((.CUDA_VER | startswith("12")) and .PY_VER != "3.13")) wheel-build-cuopt: needs: [wheel-build-cuopt-mps-parser, wheel-build-libcuopt] secrets: inherit uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@branch-25.06 with: - matrix_filter: map(select(.PY_VER != "3.13")) + matrix_filter: map(select((.CUDA_VER | startswith("12")) and .PY_VER != "3.13")) build_type: ${{ inputs.build_type || 'branch' }} branch: ${{ inputs.branch }} sha: ${{ inputs.sha }} @@ -89,7 +91,7 @@ jobs: secrets: inherit uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@branch-25.06 with: - matrix_filter: map(select(.PY_VER != "3.13")) + matrix_filter: map(select((.CUDA_VER | startswith("12")) and .PY_VER != "3.13")) build_type: ${{ inputs.build_type || 'branch' }} branch: ${{ inputs.branch }} sha: ${{ inputs.sha }} diff --git a/.github/workflows/pr.yaml b/.github/workflows/pr.yaml index 8aae3f8d2..5867c04c7 100644 --- a/.github/workflows/pr.yaml +++ b/.github/workflows/pr.yaml @@ -96,6 +96,8 @@ jobs: uses: rapidsai/shared-workflows/.github/workflows/conda-cpp-build.yaml@branch-25.06 with: build_type: pull-request + matrix_filter: map(select((.CUDA_VER | startswith("12")))) + script: ci/build_cpp.sh conda-cpp-tests: needs: [conda-cpp-build, changed-files] secrets: inherit @@ -103,14 +105,16 @@ jobs: #if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_cpp with: build_type: pull-request - matrix_filter: map(select(.PY_VER != "3.13")) + matrix_filter: map(select((.CUDA_VER | startswith("12")) and .PY_VER != "3.13")) + script: ci/test_cpp.sh conda-python-build: needs: conda-cpp-build secrets: inherit uses: rapidsai/shared-workflows/.github/workflows/conda-python-build.yaml@branch-25.06 with: build_type: pull-request - matrix_filter: map(select(.PY_VER != "3.13")) + matrix_filter: map(select((.CUDA_VER | startswith("12")) and .PY_VER != "3.13")) + script: ci/build_python.sh conda-python-tests: needs: [conda-python-build, changed-files] secrets: inherit @@ -119,7 +123,8 @@ jobs: with: run_codecov: false build_type: pull-request - matrix_filter: map(select(.PY_VER != "3.13")) + matrix_filter: map(select((.CUDA_VER | startswith("12")) and .PY_VER != "3.13")) + script: ci/test_python.sh #docs-build: # needs: checks # secrets: inherit @@ -157,9 +162,9 @@ jobs: uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@branch-25.06 with: # build for every combination of arch and CUDA version, but only for the latest Python - matrix_filter: map(select(.PY_VER == "3.12")) | group_by([.ARCH, (.CUDA_VER|split(".")|map(tonumber)|.[0])]) | add - package-name: libcuopt + matrix_filter: map(select((.CUDA_VER | startswith("12")) and .PY_VER == "3.12")) package-type: cpp + package-name: libcuopt build_type: pull-request script: ci/build_wheel_libcuopt.sh wheel-build-cuopt: @@ -171,7 +176,7 @@ jobs: script: ci/build_wheel_cuopt.sh package-name: cuopt package-type: python - matrix_filter: map(select(.PY_VER != "3.13")) + matrix_filter: map(select((.CUDA_VER | startswith("12")) and .PY_VER != "3.13")) wheel-tests-cuopt: needs: [wheel-build-cuopt, wheel-build-cuopt-mps-parser, changed-files] secrets: inherit @@ -180,7 +185,7 @@ jobs: with: build_type: pull-request script: ci/test_wheel_cuopt.sh - matrix_filter: map(select(.PY_VER != "3.13")) + matrix_filter: map(select((.CUDA_VER | startswith("12")) and .PY_VER != "3.13")) wheel-build-cuopt-server: needs: wheel-build-cuopt secrets: inherit @@ -190,7 +195,7 @@ jobs: script: ci/build_wheel_cuopt_server.sh package-name: cuopt_server package-type: python - matrix_filter: map(select(.PY_VER != "3.13")) + matrix_filter: map(select((.CUDA_VER | startswith("12")) and .PY_VER != "3.13")) wheel-build-cuopt-sh-client: secrets: inherit uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@branch-25.06 @@ -209,7 +214,7 @@ jobs: with: build_type: pull-request script: ci/test_wheel_cuopt_server.sh - matrix_filter: map(select(.PY_VER != "3.13")) + matrix_filter: map(select((.CUDA_VER | startswith("12")) and .PY_VER != "3.13")) test-self-hosted-server: needs: [wheel-build-cuopt-server, changed-files] secrets: inherit diff --git a/.github/workflows/self_hosted_service_test.yaml b/.github/workflows/self_hosted_service_test.yaml index b9d3f6980..ce98e199e 100644 --- a/.github/workflows/self_hosted_service_test.yaml +++ b/.github/workflows/self_hosted_service_test.yaml @@ -44,9 +44,9 @@ jobs: runs-on: linux-amd64-gpu-l4-latest-1 strategy: matrix: - ctk: ["11.8.0"] - linux_ver: ["ubuntu20.04"] - py_ver: ["3.10"] + ctk: ["12.8.0"] + linux_ver: ["ubuntu24.04"] + py_ver: ["3.12"] container: image: "rapidsai/citestwheel:cuda${{ matrix.ctk }}-${{ matrix.linux_ver}}-py${{ matrix.py_ver }}" options: "--network-alias cuopt-service" diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index 838021886..a73878943 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -25,6 +25,7 @@ jobs: branch: ${{ inputs.branch }} date: ${{ inputs.date }} sha: ${{ inputs.sha }} + script: ci/test_cpp.sh conda-cpp-memcheck-tests: secrets: inherit uses: rapidsai/shared-workflows/.github/workflows/custom-job.yaml@branch-25.06 @@ -45,6 +46,7 @@ jobs: branch: ${{ inputs.branch }} date: ${{ inputs.date }} sha: ${{ inputs.sha }} + script: ci/test_python.sh wheel-tests-cuopt: secrets: inherit uses: rapidsai/shared-workflows/.github/workflows/wheels-test.yaml@branch-25.06 diff --git a/README.md b/README.md index 122c10afc..04cee3911 100644 --- a/README.md +++ b/README.md @@ -22,8 +22,8 @@ Review the [CONTRIBUTING.md](CONTRIBUTING.md) file for information on how to con ### CUDA/GPU requirements -* CUDA 11.2+ -* NVIDIA driver 450.80.02+ +* CUDA 12.0+ +* NVIDIA driver >= 525.60.13 (Linux) and >= 527.41 (Windows) * Volta architecture or better (Compute Capability >=7.0) ### Pip @@ -32,12 +32,6 @@ cuOpt can be installed via `pip` from the NVIDIA Python Package Index. Be sure to select the appropriate cuOpt package depending on the major version of CUDA available in your environment: -For CUDA 11.x: - -```bash -pip install --extra-index-url=https://pypi.nvidia.com cuopt-cu11 -``` - For CUDA 12.x: ```bash @@ -48,11 +42,6 @@ pip install --extra-index-url=https://pypi.nvidia.com cuopt-cu12 cuOpt can be installed with conda (via [miniforge](https://github.com/conda-forge/miniforge)) from the `nvidia` channel: -For CUDA 11.x: -```bash -conda install -c rapidsai -c conda-forge -c nvidia \ - cuopt=25.05 python=3.12 cuda-version=11.8 -``` For CUDA 12.x: ```bash diff --git a/ci/release/update-version-cuopt.sh b/ci/release/update-version-cuopt.sh index c29f990a0..97f9f8b3b 100755 --- a/ci/release/update-version-cuopt.sh +++ b/ci/release/update-version-cuopt.sh @@ -37,7 +37,7 @@ function sed_runner() { # Centralized version file update echo "${NEXT_FULL_TAG}" > VERSION -dependencies='cuopt-cu11 cuopt-cu12 cuopt-mps-parser' +dependencies='cuopt-cu12 cuopt-mps-parser' for FILE in conda/environments/*.yaml dependencies.yaml; do for dependency in ${dependencies}; do sed_runner "s/- ${dependency}==.*/- ${dependency}==${NEXT_SHORT_TAG}\.*/g" "${FILE}"; diff --git a/ci/release/update-version-rapids.sh b/ci/release/update-version-rapids.sh index 67eca55e5..1969187c8 100755 --- a/ci/release/update-version-rapids.sh +++ b/ci/release/update-version-rapids.sh @@ -43,7 +43,7 @@ sed_runner 's/'"DEPENDENT_LIB_MAJOR_VERSION \"[0-9][0-9]\""'/'"DEPENDENT_LIB_MAJ sed_runner 's/'"DEPENDENT_LIB_MINOR_VERSION \"[0-9][0-9]\""'/'"DEPENDENT_LIB_MINOR_VERSION \"${NEXT_MINOR}\""'/g' cpp/CMakeLists.txt # RTD update -dependencies='cudf cudf-cu11 cudf-cu12 cuvs cuvs-cu11 cuvs-cu12 libcudf rmm rmm-cu11 rmm-cu12 librmm libraft-headers pylibraft pylibraft-cu11 pylibraft-cu12 raft-dask raft-dask-cu11 raft-dask-cu12 rapids-dask-dependency' +dependencies='cudf cudf-cu12 cuvs cuvs-cu12 libcudf rmm rmm-cu12 librmm libraft-headers pylibraft pylibraft-cu12 raft-dask rapids-dask-dependency' for FILE in conda/environments/*.yaml dependencies.yaml; do for dependency in ${dependencies}; do sed_runner "s/- ${dependency}==.*/- ${dependency}==${NEXT_SHORT_TAG_PEP440}\.*/g" "${FILE}"; diff --git a/conda/environments/all_cuda-118_arch-aarch64.yaml b/conda/environments/all_cuda-118_arch-aarch64.yaml deleted file mode 100644 index 4875949da..000000000 --- a/conda/environments/all_cuda-118_arch-aarch64.yaml +++ /dev/null @@ -1,84 +0,0 @@ -# This file is generated by `rapids-dependency-file-generator`. -# To make changes, edit ../../dependencies.yaml and run `rapids-dependency-file-generator`. -channels: -- rapidsai -- rapidsai-nightly -- conda-forge -- nvidia -- nvidia/label/cuda-12.4.0 -dependencies: -- breathe -- c-compiler -- ccache -- clang-tools=20.1.4 -- clang==20.1.4 -- cmake>=3.30.4 -- cpp-argparse -- cuda-nvtx=11.8 -- cuda-sanitizer-api=11.8.86 -- cuda-version=11.8 -- cudatoolkit -- cudf==25.4.*,>=0.0.0a0 -- cupy>=12.0.0 -- cuvs==25.4.*,>=0.0.0a0 -- cxx-compiler -- cython>=3.0.3 -- doxygen=1.9.1 -- exhale -- fastapi -- folium -- gcc_linux-aarch64=11.* -- geopandas -- gmock -- gtest -- httpx -- ipython -- jsonref==1.1.0 -- libgdal<3.9.0 -- libraft-headers==25.4.* -- librmm==25.4.* -- make -- matplotlib -- msgpack-numpy==0.4.8 -- msgpack-python==1.1.0 -- myst-nb -- myst-parser -- ninja -- notebook -- numba>=0.59.1,<0.61.0a0 -- numpy>=1.23.5,<3.0a0 -- numpydoc -- nvcc_linux-aarch64=11.8 -- pandas>=2.0,<2.2.3dev0 -- pexpect -- pip -- polyline -- pre-commit -- psutil>=5.9,<6.0a0 -- pylibraft==25.4.*,>=0.0.0a0 -- pyrsistent -- pytest-cov -- pytest<8 -- python>=3.10,<3.13 -- raft-dask==25.4.*,>=0.0.0a0 -- rapids-build-backend>=0.3.0,<0.4.0.dev0 -- rapids-dask-dependency==25.4.* -- rapids-logger==0.1.*,>=0.0.0a0 -- requests -- rmm==25.4.*,>=0.0.0a0 -- scikit-build-core>=0.10.0 -- scipy -- sphinx -- sphinx-copybutton -- sphinx-design -- sphinx-markdown-tables -- sphinx_rtd_theme -- sphinxcontrib-openapi -- sphinxcontrib-websupport -- sysroot_linux-aarch64==2.28 -- uvicorn==0.30.* -- pip: - - nvidia_sphinx_theme - - swagger-plugin-for-sphinx - - veroviz -name: all_cuda-118_arch-aarch64 diff --git a/conda/environments/all_cuda-118_arch-x86_64.yaml b/conda/environments/all_cuda-118_arch-x86_64.yaml deleted file mode 100644 index 9fbf5685e..000000000 --- a/conda/environments/all_cuda-118_arch-x86_64.yaml +++ /dev/null @@ -1,84 +0,0 @@ -# This file is generated by `rapids-dependency-file-generator`. -# To make changes, edit ../../dependencies.yaml and run `rapids-dependency-file-generator`. -channels: -- rapidsai -- rapidsai-nightly -- conda-forge -- nvidia -- nvidia/label/cuda-12.4.0 -dependencies: -- breathe -- c-compiler -- ccache -- clang-tools=20.1.4 -- clang==20.1.4 -- cmake>=3.30.4 -- cpp-argparse -- cuda-nvtx=11.8 -- cuda-sanitizer-api=11.8.86 -- cuda-version=11.8 -- cudatoolkit -- cudf==25.4.*,>=0.0.0a0 -- cupy>=12.0.0 -- cuvs==25.4.*,>=0.0.0a0 -- cxx-compiler -- cython>=3.0.3 -- doxygen=1.9.1 -- exhale -- fastapi -- folium -- gcc_linux-64=11.* -- geopandas -- gmock -- gtest -- httpx -- ipython -- jsonref==1.1.0 -- libgdal<3.9.0 -- libraft-headers==25.4.* -- librmm==25.4.* -- make -- matplotlib -- msgpack-numpy==0.4.8 -- msgpack-python==1.1.0 -- myst-nb -- myst-parser -- ninja -- notebook -- numba>=0.59.1,<0.61.0a0 -- numpy>=1.23.5,<3.0a0 -- numpydoc -- nvcc_linux-64=11.8 -- pandas>=2.0,<2.2.3dev0 -- pexpect -- pip -- polyline -- pre-commit -- psutil>=5.9,<6.0a0 -- pylibraft==25.4.*,>=0.0.0a0 -- pyrsistent -- pytest-cov -- pytest<8 -- python>=3.10,<3.13 -- raft-dask==25.4.*,>=0.0.0a0 -- rapids-build-backend>=0.3.0,<0.4.0.dev0 -- rapids-dask-dependency==25.4.* -- rapids-logger==0.1.*,>=0.0.0a0 -- requests -- rmm==25.4.*,>=0.0.0a0 -- scikit-build-core>=0.10.0 -- scipy -- sphinx -- sphinx-copybutton -- sphinx-design -- sphinx-markdown-tables -- sphinx_rtd_theme -- sphinxcontrib-openapi -- sphinxcontrib-websupport -- sysroot_linux-64==2.28 -- uvicorn==0.30.* -- pip: - - nvidia_sphinx_theme - - swagger-plugin-for-sphinx - - veroviz -name: all_cuda-118_arch-x86_64 diff --git a/cpp/src/linear_programming/pdlp.cu b/cpp/src/linear_programming/pdlp.cu index ea54d047d..7acadae50 100644 --- a/cpp/src/linear_programming/pdlp.cu +++ b/cpp/src/linear_programming/pdlp.cu @@ -41,11 +41,14 @@ namespace cuopt::linear_programming::detail { -void set_pdlp_hyper_parameters() +void set_pdlp_hyper_parameters(rmm::cuda_stream_view stream_view) { - RAFT_CUDA_TRY(cudaMemcpyToSymbol(pdlp_hyper_params::primal_importance, - &pdlp_hyper_params::host_primal_importance, - sizeof(double))); + RAFT_CUDA_TRY(cudaMemcpyToSymbolAsync(pdlp_hyper_params::primal_importance, + &pdlp_hyper_params::host_primal_importance, + sizeof(double), + 0, + cudaMemcpyHostToDevice, + stream_view)); } template diff --git a/cpp/src/linear_programming/pdlp.cuh b/cpp/src/linear_programming/pdlp.cuh index 88d20873f..10a028f26 100644 --- a/cpp/src/linear_programming/pdlp.cuh +++ b/cpp/src/linear_programming/pdlp.cuh @@ -38,7 +38,7 @@ #include "linear_programming/termination_strategy/convergence_information.hpp" namespace cuopt::linear_programming::detail { -void set_pdlp_hyper_parameters(); +void set_pdlp_hyper_parameters(rmm::cuda_stream_view stream_view); /** * @brief Solver for an optimization problem (Currently only linear program) to be solved, * pdlp_parameters and pdlp_internal_state diff --git a/cpp/src/linear_programming/restart_strategy/pdlp_restart_strategy.cu b/cpp/src/linear_programming/restart_strategy/pdlp_restart_strategy.cu index 6f53cc5b9..55b06aecf 100644 --- a/cpp/src/linear_programming/restart_strategy/pdlp_restart_strategy.cu +++ b/cpp/src/linear_programming/restart_strategy/pdlp_restart_strategy.cu @@ -54,24 +54,41 @@ namespace cg = cooperative_groups; namespace cuopt::linear_programming::detail { -void set_restart_hyper_parameters() +void set_restart_hyper_parameters(rmm::cuda_stream_view stream_view) { - RAFT_CUDA_TRY(cudaMemcpyToSymbol(pdlp_hyper_params::default_primal_weight_update_smoothing, - &pdlp_hyper_params::host_default_primal_weight_update_smoothing, - sizeof(double))); RAFT_CUDA_TRY( - cudaMemcpyToSymbol(pdlp_hyper_params::default_sufficient_reduction_for_restart, - &pdlp_hyper_params::host_default_sufficient_reduction_for_restart, - sizeof(double))); - RAFT_CUDA_TRY(cudaMemcpyToSymbol(pdlp_hyper_params::default_necessary_reduction_for_restart, - &pdlp_hyper_params::host_default_necessary_reduction_for_restart, - sizeof(double))); - RAFT_CUDA_TRY(cudaMemcpyToSymbol(pdlp_hyper_params::primal_distance_smoothing, - &pdlp_hyper_params::host_primal_distance_smoothing, - sizeof(double))); - RAFT_CUDA_TRY(cudaMemcpyToSymbol(pdlp_hyper_params::dual_distance_smoothing, - &pdlp_hyper_params::host_dual_distance_smoothing, - sizeof(double))); + cudaMemcpyToSymbolAsync(pdlp_hyper_params::default_primal_weight_update_smoothing, + &pdlp_hyper_params::host_default_primal_weight_update_smoothing, + sizeof(double), + 0, + cudaMemcpyHostToDevice, + stream_view)); + RAFT_CUDA_TRY( + cudaMemcpyToSymbolAsync(pdlp_hyper_params::default_sufficient_reduction_for_restart, + &pdlp_hyper_params::host_default_sufficient_reduction_for_restart, + sizeof(double), + 0, + cudaMemcpyHostToDevice, + stream_view)); + RAFT_CUDA_TRY( + cudaMemcpyToSymbolAsync(pdlp_hyper_params::default_necessary_reduction_for_restart, + &pdlp_hyper_params::host_default_necessary_reduction_for_restart, + sizeof(double), + 0, + cudaMemcpyHostToDevice, + stream_view)); + RAFT_CUDA_TRY(cudaMemcpyToSymbolAsync(pdlp_hyper_params::primal_distance_smoothing, + &pdlp_hyper_params::host_primal_distance_smoothing, + sizeof(double), + 0, + cudaMemcpyHostToDevice, + stream_view)); + RAFT_CUDA_TRY(cudaMemcpyToSymbolAsync(pdlp_hyper_params::dual_distance_smoothing, + &pdlp_hyper_params::host_dual_distance_smoothing, + sizeof(double), + 0, + cudaMemcpyHostToDevice, + stream_view)); } template diff --git a/cpp/src/linear_programming/restart_strategy/pdlp_restart_strategy.cuh b/cpp/src/linear_programming/restart_strategy/pdlp_restart_strategy.cuh index ca897ef49..403f77239 100644 --- a/cpp/src/linear_programming/restart_strategy/pdlp_restart_strategy.cuh +++ b/cpp/src/linear_programming/restart_strategy/pdlp_restart_strategy.cuh @@ -37,7 +37,7 @@ #include namespace cuopt::linear_programming::detail { -void set_restart_hyper_parameters(); +void set_restart_hyper_parameters(rmm::cuda_stream_view stream_view); template class pdlp_restart_strategy_t { public: diff --git a/cpp/src/linear_programming/solve.cu b/cpp/src/linear_programming/solve.cu index a070d1239..03346650f 100644 --- a/cpp/src/linear_programming/solve.cu +++ b/cpp/src/linear_programming/solve.cu @@ -211,12 +211,12 @@ void set_pdlp_solver_mode(pdlp_solver_settings_t const& settings) set_Fast1(); } -void setup_device_symbols() +void setup_device_symbols(rmm::cuda_stream_view stream_view) { raft::common::nvtx::range fun_scope("Setting device symbol"); - detail::set_adaptive_step_size_hyper_parameters(); - detail::set_restart_hyper_parameters(); - detail::set_pdlp_hyper_parameters(); + detail::set_adaptive_step_size_hyper_parameters(stream_view); + detail::set_restart_hyper_parameters(stream_view); + detail::set_pdlp_hyper_parameters(stream_view); } std::atomic global_concurrent_halt; @@ -549,7 +549,7 @@ optimization_problem_solution_t solve_lp(optimization_problem_tget_stream()); auto sol = solve_lp_with_method(op_problem, problem, settings); diff --git a/cpp/src/linear_programming/step_size_strategy/adaptive_step_size_strategy.cu b/cpp/src/linear_programming/step_size_strategy/adaptive_step_size_strategy.cu index b26a5a097..3abfa669e 100644 --- a/cpp/src/linear_programming/step_size_strategy/adaptive_step_size_strategy.cu +++ b/cpp/src/linear_programming/step_size_strategy/adaptive_step_size_strategy.cu @@ -59,20 +59,32 @@ adaptive_step_size_strategy_t::adaptive_step_size_strategy_t( { } -void set_adaptive_step_size_hyper_parameters() +void set_adaptive_step_size_hyper_parameters(rmm::cuda_stream_view stream_view) { - RAFT_CUDA_TRY(cudaMemcpyToSymbol(pdlp_hyper_params::default_reduction_exponent, - &pdlp_hyper_params::host_default_reduction_exponent, - sizeof(double))); - RAFT_CUDA_TRY(cudaMemcpyToSymbol(pdlp_hyper_params::default_growth_exponent, - &pdlp_hyper_params::host_default_growth_exponent, - sizeof(double))); - RAFT_CUDA_TRY(cudaMemcpyToSymbol(pdlp_hyper_params::primal_distance_smoothing, - &pdlp_hyper_params::host_primal_distance_smoothing, - sizeof(double))); - RAFT_CUDA_TRY(cudaMemcpyToSymbol(pdlp_hyper_params::dual_distance_smoothing, - &pdlp_hyper_params::host_dual_distance_smoothing, - sizeof(double))); + RAFT_CUDA_TRY(cudaMemcpyToSymbolAsync(pdlp_hyper_params::default_reduction_exponent, + &pdlp_hyper_params::host_default_reduction_exponent, + sizeof(double), + 0, + cudaMemcpyHostToDevice, + stream_view)); + RAFT_CUDA_TRY(cudaMemcpyToSymbolAsync(pdlp_hyper_params::default_growth_exponent, + &pdlp_hyper_params::host_default_growth_exponent, + sizeof(double), + 0, + cudaMemcpyHostToDevice, + stream_view)); + RAFT_CUDA_TRY(cudaMemcpyToSymbolAsync(pdlp_hyper_params::primal_distance_smoothing, + &pdlp_hyper_params::host_primal_distance_smoothing, + sizeof(double), + 0, + cudaMemcpyHostToDevice, + stream_view)); + RAFT_CUDA_TRY(cudaMemcpyToSymbolAsync(pdlp_hyper_params::dual_distance_smoothing, + &pdlp_hyper_params::host_dual_distance_smoothing, + sizeof(double), + 0, + cudaMemcpyHostToDevice, + stream_view)); } template diff --git a/cpp/src/linear_programming/step_size_strategy/adaptive_step_size_strategy.hpp b/cpp/src/linear_programming/step_size_strategy/adaptive_step_size_strategy.hpp index fca459431..d848429dc 100644 --- a/cpp/src/linear_programming/step_size_strategy/adaptive_step_size_strategy.hpp +++ b/cpp/src/linear_programming/step_size_strategy/adaptive_step_size_strategy.hpp @@ -33,7 +33,7 @@ #include namespace cuopt::linear_programming::detail { -void set_adaptive_step_size_hyper_parameters(); +void set_adaptive_step_size_hyper_parameters(rmm::cuda_stream_view stream_view); template class adaptive_step_size_strategy_t { public: diff --git a/cpp/src/mip/solve.cu b/cpp/src/mip/solve.cu index ca1045a19..6ca891a3b 100644 --- a/cpp/src/mip/solve.cu +++ b/cpp/src/mip/solve.cu @@ -55,12 +55,12 @@ static void init_handler(const raft::handle_t* handle_ptr) handle_ptr->get_cusparse_handle(), CUSPARSE_POINTER_MODE_DEVICE, handle_ptr->get_stream())); } -static void setup_device_symbols() +static void setup_device_symbols(rmm::cuda_stream_view stream_view) { raft::common::nvtx::range fun_scope("Setting device symbol"); - detail::set_adaptive_step_size_hyper_parameters(); - detail::set_restart_hyper_parameters(); - detail::set_pdlp_hyper_parameters(); + detail::set_adaptive_step_size_hyper_parameters(stream_view); + detail::set_restart_hyper_parameters(stream_view); + detail::set_pdlp_hyper_parameters(stream_view); } template @@ -163,7 +163,7 @@ mip_solution_t solve_mip(optimization_problem_t& op_problem, detail::problem_t problem(op_problem); // this is for PDLP, i think this should be part of pdlp solver - setup_device_symbols(); + setup_device_symbols(op_problem.get_handle_ptr()->get_stream()); auto sol = run_mip(problem, settings); diff --git a/cpp/tests/mip/bounds_standardization_test.cu b/cpp/tests/mip/bounds_standardization_test.cu index cca505800..fd6318447 100644 --- a/cpp/tests/mip/bounds_standardization_test.cu +++ b/cpp/tests/mip/bounds_standardization_test.cu @@ -50,11 +50,11 @@ void init_handler(const raft::handle_t* handle_ptr) handle_ptr->get_cusparse_handle(), CUSPARSE_POINTER_MODE_DEVICE, handle_ptr->get_stream())); } -void setup_pdlp() +void setup_pdlp(rmm::cuda_stream_view stream_view) { - detail::set_adaptive_step_size_hyper_parameters(); - detail::set_restart_hyper_parameters(); - detail::set_pdlp_hyper_parameters(); + detail::set_adaptive_step_size_hyper_parameters(stream_view); + detail::set_restart_hyper_parameters(stream_view); + detail::set_pdlp_hyper_parameters(stream_view); } void test_bounds_standardization_test(std::string test_instance) @@ -67,7 +67,7 @@ void test_bounds_standardization_test(std::string test_instance) handle_.sync_stream(); auto op_problem = mps_data_model_to_optimization_problem(&handle_, problem); problem_checking_t::check_problem_representation(op_problem); - setup_pdlp(); + setup_pdlp(handle_.get_stream()); init_handler(op_problem.get_handle_ptr()); // run the problem constructor of MIP, so that we do bounds standardization detail::problem_t standardized_problem(op_problem); diff --git a/cpp/tests/mip/elim_var_remap_test.cu b/cpp/tests/mip/elim_var_remap_test.cu index dbde49b27..4d1c2fd17 100644 --- a/cpp/tests/mip/elim_var_remap_test.cu +++ b/cpp/tests/mip/elim_var_remap_test.cu @@ -53,11 +53,11 @@ void init_handler(const raft::handle_t* handle_ptr) handle_ptr->get_cusparse_handle(), CUSPARSE_POINTER_MODE_DEVICE, handle_ptr->get_stream())); } -void setup_pdlp() +void setup_pdlp(rmm::cuda_stream_view stream_view) { - detail::set_adaptive_step_size_hyper_parameters(); - detail::set_restart_hyper_parameters(); - detail::set_pdlp_hyper_parameters(); + detail::set_adaptive_step_size_hyper_parameters(stream_view); + detail::set_restart_hyper_parameters(stream_view); + detail::set_pdlp_hyper_parameters(stream_view); } std::vector select_k_random(int population_size, int sample_size) @@ -150,7 +150,7 @@ void test_elim_var_solution(std::string test_instance) handle_.sync_stream(); auto op_problem = mps_data_model_to_optimization_problem(&handle_, mps_problem); problem_checking_t::check_problem_representation(op_problem); - setup_pdlp(); + setup_pdlp(handle_.get_stream()); init_handler(op_problem.get_handle_ptr()); // run the problem constructor of MIP, so that we do bounds standardization detail::problem_t standardized_problem(op_problem); diff --git a/dependencies.yaml b/dependencies.yaml index 0439b4c46..97b23a70f 100644 --- a/dependencies.yaml +++ b/dependencies.yaml @@ -19,7 +19,7 @@ files: all: output: conda matrix: - cuda: ["11.8", "12.8"] + cuda: ["12.8"] arch: [x86_64, aarch64] includes: - build_common @@ -284,18 +284,6 @@ dependencies: specific: - output_types: conda matrices: - - matrix: - arch: x86_64 - cuda: "11.8" - packages: - - gcc_linux-64=11.* - - sysroot_linux-64==2.28 - - matrix: - arch: aarch64 - cuda: "11.8" - packages: - - gcc_linux-aarch64=11.* - - sysroot_linux-aarch64==2.28 - matrix: arch: x86_64 cuda: "12.*" @@ -314,16 +302,6 @@ dependencies: cuda: "12.*" packages: - cuda-nvcc - - matrix: - arch: x86_64 - cuda: "11.8" - packages: - - nvcc_linux-64=11.8 - - matrix: - arch: aarch64 - cuda: "11.8" - packages: - - nvcc_linux-aarch64=11.8 build_cpp: common: - output_types: conda @@ -344,14 +322,6 @@ dependencies: cuda: "12.*" packages: - cuda-sanitizer-api - - matrix: - cuda: "11.8" - packages: - - cuda-sanitizer-api=11.8.86 - - matrix: - cuda: "11.5" - packages: - - cuda-sanitizer-api=11.5.114 - matrix: packages: build_wheels: @@ -405,14 +375,9 @@ dependencies: cuda_suffixed: "true" packages: - cupy-cuda12x - - matrix: - cuda: "11.*" - cuda_suffixed: "true" - packages: - - cupy-cuda11x>=12.0.0 - matrix: null packages: - - cupy-cuda11x>=12.0.0 + - cupy-cuda12x test_python_cuopt_server: common: @@ -480,11 +445,6 @@ dependencies: cuda_suffixed: "true" packages: - libcuopt-cu12==25.5.*,>=0.0.0a0 - - matrix: - cuda: "11.*" - cuda_suffixed: "true" - packages: - - libcuopt-cu11==25.5.*,>=0.0.0a0 - {matrix: null, packages: [*libcuopt_unsuffixed]} depends_on_cuopt: common: @@ -504,11 +464,6 @@ dependencies: cuda_suffixed: "true" packages: - cuopt-cu12==25.5.*,>=0.0.0a0 - - matrix: - cuda: "11.*" - cuda_suffixed: "true" - packages: - - cuopt-cu11==25.5.*,>=0.0.0a0 - {matrix: null, packages: [*cuopt_unsuffixed]} depends_on_mps_parser: common: @@ -543,11 +498,6 @@ dependencies: cuda_suffixed: "true" packages: - librmm-cu12==25.4.*,>=0.0.0a0 - - matrix: - cuda: "11.*" - cuda_suffixed: "true" - packages: - - librmm-cu11==25.4.*,>=0.0.0a0 - {matrix: null, packages: [*librmm_unsuffixed]} depends_on_cupy: common: @@ -583,11 +533,6 @@ dependencies: cuda_suffixed: "true" packages: - rmm-cu12==25.4.*,>=0.0.0a0 - - matrix: - cuda: "11.*" - cuda_suffixed: "true" - packages: - - rmm-cu11==25.4.*,>=0.0.0a0 - matrix: packages: - *rmm_unsuffixed @@ -609,11 +554,6 @@ dependencies: cuda_suffixed: "true" packages: - cudf-cu12==25.4.*,>=0.0.0a0 - - matrix: - cuda: "11.*" - cuda_suffixed: "true" - packages: - - cudf-cu11==25.4.*,>=0.0.0a0 - matrix: packages: - *cudf_unsuffixed @@ -635,11 +575,6 @@ dependencies: cuda_suffixed: "true" packages: - cuvs-cu12==25.4.*,>=0.0.0a0 - - matrix: - cuda: "11.*" - cuda_suffixed: "true" - packages: - - cuvs-cu11==25.4.*,>=0.0.0a0 - matrix: packages: - *cuvs_unsuffixed @@ -661,11 +596,6 @@ dependencies: cuda_suffixed: "true" packages: - raft-dask-cu12==25.4.*,>=0.0.0a0 - - matrix: - cuda: "11.*" - cuda_suffixed: "true" - packages: - - raft-dask-cu11==25.4.*,>=0.0.0a0 - matrix: packages: - *raft_dask_unsuffixed @@ -687,11 +617,6 @@ dependencies: cuda_suffixed: "true" packages: - pylibraft-cu12==25.4.*,>=0.0.0a0 - - matrix: - cuda: "11.*" - cuda_suffixed: "true" - packages: - - pylibraft-cu11==25.4.*,>=0.0.0a0 - matrix: packages: - *pylibraft_unsuffixed @@ -699,22 +624,6 @@ dependencies: specific: - output_types: conda matrices: - - matrix: - cuda: "11.2" - packages: - - cuda-version=11.2 - - matrix: - cuda: "11.4" - packages: - - cuda-version=11.4 - - matrix: - cuda: "11.5" - packages: - - cuda-version=11.5 - - matrix: - cuda: "11.8" - packages: - - cuda-version=11.8 - matrix: cuda: "12.0" packages: @@ -756,29 +665,6 @@ dependencies: - cuda-nvvm - cuda-crt - pynvjitlink=0.5.0 - - matrix: - cuda: "11.8" - packages: - - cudatoolkit - - cuda-nvtx=11.8 - - matrix: - cuda: "11.5" - packages: - - cudatoolkit - - cuda-nvtx=11.5 - - matrix: - cuda: "11.4" - packages: - - cudatoolkit - - &cudanvtx114 cuda-nvtx=11.4 - - matrix: - cuda: "11.2" - packages: - - cudatoolkit - # The NVIDIA channel doesn't publish pkgs older than 11.4 for - # these libs, so 11.2 uses 11.4 packages (the oldest - # available). - - *cudanvtx114 cuda_wheels: specific: @@ -793,15 +679,6 @@ dependencies: - nvidia-cusparse-cu12 - nvidia-cusolver-cu12 - nvidia-nvtx-cu12 - - matrix: - cuda: "11.*" - use_cuda_wheels: "true" - packages: - - nvidia-cublas-cu11 - - nvidia-curand-cu11 - - nvidia-cusparse-cu11 - - nvidia-cusolver-cu11 - - nvidia-nvtx-cu11 # if use_cuda_wheels=false is provided, do not add dependencies on any CUDA wheels # (e.g. for DLFW and pip devcontainers) - matrix: diff --git a/python/cuopt/pyproject.toml b/python/cuopt/pyproject.toml index 9023a2fe4..da20ec194 100644 --- a/python/cuopt/pyproject.toml +++ b/python/cuopt/pyproject.toml @@ -33,7 +33,7 @@ requires-python = ">=3.10" dependencies = [ "cudf==25.4.*,>=0.0.0a0", "cuopt-mps-parser==25.5.*,>=0.0.0a0", - "cupy-cuda11x>=12.0.0", + "cupy-cuda12x", "cuvs==25.4.*,>=0.0.0a0", "libcuopt==25.5.*,>=0.0.0a0", "numba>=0.59.1,<0.61.0a0", From 25333a2b6fd9454255b1b51f7bbd47394758aba5 Mon Sep 17 00:00:00 2001 From: Ramakrishnap <42624703+rgsl888prabhu@users.noreply.github.com> Date: Fri, 23 May 2025 11:14:43 -0500 Subject: [PATCH 15/15] Deprecate and remove cuda 11 support (#32) Rapids is moving away from cuda11 support soon and we don't have particular request to support on cuda11. So removing support for cuda 11. This PR removes cuda 11 related dependencies, documentation and ci testing. Authors: - Ramakrishnap (https://github.com/rgsl888prabhu) Approvers: - Rajesh Gandham (https://github.com/rg20) - Trevor McKay (https://github.com/tmckayus) URL: https://github.com/NVIDIA/cuopt/pull/32