From acc3332c059d0dd7113409a1e3e4664eada0cec0 Mon Sep 17 00:00:00 2001 From: weiyu Date: Tue, 11 Feb 2020 16:21:30 -0800 Subject: [PATCH] Remove redundant data structures and FuncNode's dependencies on old actions --- funcinst.cc | 29 +++++--- funcinst.h | 9 +-- funcnode.cc | 76 +++++++++++---------- funcnode.h | 14 ++-- history.cc | 33 ++------- history.h | 9 +-- pthread_test/CDSPass/addr-satcycle.cc | Bin 13888 -> 0 bytes pthread_test/CDSPass/bug1.cc | Bin 13536 -> 0 bytes pthread_test/CDSPass/compile.sh | 18 ----- pthread_test/CDSPass/condvar.cc | Bin 13704 -> 0 bytes pthread_test/CDSPass/deadlock.cc | Bin 13208 -> 0 bytes pthread_test/CDSPass/insanesync.cc | Bin 14152 -> 0 bytes pthread_test/CDSPass/iriw.cc | Bin 14064 -> 0 bytes pthread_test/CDSPass/iriw_wildcard.cc | Bin 13992 -> 0 bytes pthread_test/CDSPass/mo-satcycle.cc | Bin 13960 -> 0 bytes pthread_test/CDSPass/mutex_test.cc | Bin 13888 -> 0 bytes pthread_test/CDSPass/pthread_mutex_test.cc | Bin 13768 -> 0 bytes pthread_test/CDSPass/uninit | Bin 21872 -> 0 bytes pthread_test/CDSPass/uninit.cc | Bin 21872 -> 0 bytes pthread_test/addr-satcycle.cc | 69 ------------------- pthread_test/bug1.cc | 74 -------------------- pthread_test/condvar.cc | 44 ------------ pthread_test/deadlock.cc | 47 ------------- pthread_test/insanesync.cc | 72 ------------------- pthread_test/iriw.cc | 71 ------------------- pthread_test/iriw_wildcard.cc | 70 ------------------- pthread_test/mo-satcycle.cc | 71 ------------------- pthread_test/normal_compile.sh | 9 --- pthread_test/protect/mutex_test.cc | 41 ----------- pthread_test/pthread_mutex_test.cc | 69 ------------------- pthread_test/test.cc | 73 -------------------- pthread_test/uninit.cc | 57 ---------------- 32 files changed, 84 insertions(+), 871 deletions(-) delete mode 100755 pthread_test/CDSPass/addr-satcycle.cc delete mode 100755 pthread_test/CDSPass/bug1.cc delete mode 100755 pthread_test/CDSPass/compile.sh delete mode 100755 pthread_test/CDSPass/condvar.cc delete mode 100755 pthread_test/CDSPass/deadlock.cc delete mode 100755 pthread_test/CDSPass/insanesync.cc delete mode 100755 pthread_test/CDSPass/iriw.cc delete mode 100755 pthread_test/CDSPass/iriw_wildcard.cc delete mode 100755 pthread_test/CDSPass/mo-satcycle.cc delete mode 100755 pthread_test/CDSPass/mutex_test.cc delete mode 100755 pthread_test/CDSPass/pthread_mutex_test.cc delete mode 100755 pthread_test/CDSPass/uninit delete mode 100755 pthread_test/CDSPass/uninit.cc delete mode 100644 pthread_test/addr-satcycle.cc delete mode 100644 pthread_test/bug1.cc delete mode 100644 pthread_test/condvar.cc delete mode 100644 pthread_test/deadlock.cc delete mode 100644 pthread_test/insanesync.cc delete mode 100644 pthread_test/iriw.cc delete mode 100644 pthread_test/iriw_wildcard.cc delete mode 100644 pthread_test/mo-satcycle.cc delete mode 100755 pthread_test/normal_compile.sh delete mode 100644 pthread_test/protect/mutex_test.cc delete mode 100644 pthread_test/pthread_mutex_test.cc delete mode 100644 pthread_test/test.cc delete mode 100644 pthread_test/uninit.cc diff --git a/funcinst.cc b/funcinst.cc index d4288a14..4c584452 100644 --- a/funcinst.cc +++ b/funcinst.cc @@ -4,7 +4,8 @@ FuncInst::FuncInst(ModelAction *act, FuncNode *func_node) : single_location(true), execution_number(0), - action_marker(0) /* The marker for FuncNode starts from 1 */ + associated_reads(), + thrd_marker() /* The marker for FuncNode starts from 1 */ { ASSERT(act); ASSERT(func_node); @@ -47,18 +48,30 @@ bool FuncInst::add_succ(FuncInst * other) return true; } -void FuncInst::set_associated_act(ModelAction * act, uint32_t marker) +void FuncInst::set_associated_read(thread_id_t tid, uint64_t read_val, uint32_t marker) { - associated_act = act; - action_marker = marker; + int thread_id = id_to_int(tid); + int old_size = associated_reads.size(); + + if (old_size < thread_id + 1) { + for (int i = old_size; i < thread_id + 1; i++ ) { + associated_reads.push_back(VALUE_NONE); + thrd_marker.push_back(0); + } + } + + thrd_marker[thread_id] = marker; + associated_reads[thread_id] = read_val; } -ModelAction * FuncInst::get_associated_act(uint32_t marker) +uint64_t FuncInst::get_associated_read(thread_id_t tid, uint32_t marker) { - if (action_marker == marker) - return associated_act; + int thread_id = id_to_int(tid); + + if (thrd_marker[thread_id] == marker) + return associated_reads[thread_id]; else - return NULL; + return VALUE_NONE; } /* Search the FuncInst that has the same type as act in the collision list */ diff --git a/funcinst.h b/funcinst.h index 79ec01ad..ca733f67 100644 --- a/funcinst.h +++ b/funcinst.h @@ -3,6 +3,7 @@ #include "action.h" #include "hashtable.h" +#include "threads-model.h" class ModelAction; @@ -39,8 +40,8 @@ public: void set_execution_number(int new_number) { execution_number = new_number; } int get_execution_number() { return execution_number; } - void set_associated_act(ModelAction * act, uint32_t marker); - ModelAction * get_associated_act(uint32_t marker); + void set_associated_read(thread_id_t tid, uint64_t read_val, uint32_t marker); + uint64_t get_associated_read(thread_id_t tid, uint32_t marker); void print(); @@ -64,8 +65,8 @@ private: bool single_location; int execution_number; - ModelAction * associated_act; - uint32_t action_marker; + ModelVector associated_reads; + ModelVector thrd_marker; /** * Collisions store a list of FuncInsts with the same position diff --git a/funcnode.cc b/funcnode.cc index a0850c70..ff62a527 100644 --- a/funcnode.cc +++ b/funcnode.cc @@ -11,14 +11,15 @@ FuncNode::FuncNode(ModelHistory * history) : history(history), exit_count(0), - marker(1), inst_counter(1), + marker(1), + thrd_marker(), func_inst_map(), inst_list(), entry_insts(), thrd_inst_pred_map(), thrd_inst_id_map(), - thrd_loc_act_map(), + thrd_loc_inst_map(), predicate_tree_position(), predicate_leaves(), leaves_tmp_storage(), @@ -167,9 +168,8 @@ void FuncNode::add_entry_inst(FuncInst * inst) void FuncNode::function_entry_handler(thread_id_t tid) { - marker++; - - init_predicate_tree_position(tid); + set_marker(tid); + set_predicate_tree_position(tid, predicate_tree_entry); init_inst_act_map(tid); init_maps(tid); } @@ -197,7 +197,6 @@ void FuncNode::function_exit_handler(thread_id_t tid) void FuncNode::update_tree(ModelAction * act) { HashTable * write_history = history->getWriteHistory(); - HashSet write_actions; /* build inst_list from act_list for later processing */ // func_inst_list_t inst_list; @@ -280,9 +279,9 @@ void FuncNode::update_predicate_tree(ModelAction * next_act) { thread_id_t tid = next_act->get_tid(); int thread_id = id_to_int(tid); + int this_marker = thrd_marker[thread_id]; - // Clear hashtables - loc_act_map_t * loc_act_map = thrd_loc_act_map[thread_id]; + loc_inst_map_t * loc_inst_map = thrd_loc_inst_map[thread_id]; inst_pred_map_t * inst_pred_map = thrd_inst_pred_map[thread_id]; inst_id_map_t * inst_id_map = thrd_inst_id_map[thread_id]; @@ -292,7 +291,7 @@ void FuncNode::update_predicate_tree(ModelAction * next_act) Predicate * curr_pred = get_predicate_tree_position(tid); while (true) { FuncInst * next_inst = get_inst(next_act); - next_inst->set_associated_act(next_act, marker); + next_inst->set_associated_read(tid, next_act->get_reads_from_value(), this_marker); Predicate * unset_predicate = NULL; bool branch_found = follow_branch(&curr_pred, next_inst, next_act, &unset_predicate); @@ -324,6 +323,7 @@ void FuncNode::update_predicate_tree(ModelAction * next_act) // Add to the set of backedges curr_pred->add_backedge(back_pred); curr_pred = back_pred; + continue; } } @@ -341,7 +341,7 @@ void FuncNode::update_predicate_tree(ModelAction * next_act) if (next_act->is_read()) { /* Only need to store the locations of read actions */ - loc_act_map->put(next_act->get_location(), next_act); + loc_inst_map->put(next_inst->get_location(), next_inst); } inst_pred_map->put(next_inst, curr_pred); @@ -367,6 +367,9 @@ bool FuncNode::follow_branch(Predicate ** curr_pred, FuncInst * next_inst, { /* Check if a branch with func_inst and corresponding predicate exists */ bool branch_found = false; + thread_id_t tid = next_act->get_tid(); + int this_marker = thrd_marker[id_to_int(tid)]; + ModelVector * branches = (*curr_pred)->get_children(); for (uint i = 0;i < branches->size();i++) { Predicate * branch = (*branches)[i]; @@ -401,12 +404,11 @@ bool FuncNode::follow_branch(Predicate ** curr_pred, FuncInst * next_inst, break; case EQUALITY: FuncInst * to_be_compared; - ModelAction * last_act; - to_be_compared = pred_expression->func_inst; - last_act = to_be_compared->get_associated_act(marker); - last_read = last_act->get_reads_from_value(); + last_read = to_be_compared->get_associated_read(tid, this_marker); + ASSERT(last_read != VALUE_NONE); + next_read = next_act->get_reads_from_value(); equality = (last_read == next_read); if (equality != pred_expression->value) @@ -445,13 +447,12 @@ void FuncNode::infer_predicates(FuncInst * next_inst, ModelAction * next_act, { void * loc = next_act->get_location(); int thread_id = id_to_int(next_act->get_tid()); - loc_act_map_t * loc_act_map = thrd_loc_act_map[thread_id]; + loc_inst_map_t * loc_inst_map = thrd_loc_inst_map[thread_id]; if (next_inst->is_read()) { /* read + rmw */ - if ( loc_act_map->contains(loc) ) { - ModelAction * last_act = loc_act_map->get(loc); - FuncInst * last_inst = get_inst(last_act); + if ( loc_inst_map->contains(loc) ) { + FuncInst * last_inst = loc_inst_map->get(loc); struct half_pred_expr * expression = new half_pred_expr(EQUALITY, last_inst); half_pred_expressions->push_back(expression); } else if ( next_inst->is_single_location() ) { @@ -461,9 +462,8 @@ void FuncNode::infer_predicates(FuncInst * next_inst, ModelAction * next_act, loc_set_iter * loc_it = loc_may_equal->iterator(); while (loc_it->hasNext()) { void * neighbor = loc_it->next(); - if (loc_act_map->contains(neighbor)) { - ModelAction * last_act = loc_act_map->get(neighbor); - FuncInst * last_inst = get_inst(last_act); + if (loc_inst_map->contains(neighbor)) { + FuncInst * last_inst = loc_inst_map->get(neighbor); struct half_pred_expr * expression = new half_pred_expr(EQUALITY, last_inst); half_pred_expressions->push_back(expression); @@ -647,19 +647,12 @@ void FuncNode::update_loc_may_equal_map(void * new_loc, loc_set_t * old_location delete loc_it; } -/* Every time a thread enters a function, set its position to the predicate tree entry */ -void FuncNode::init_predicate_tree_position(thread_id_t tid) +void FuncNode::set_predicate_tree_position(thread_id_t tid, Predicate * pred) { int thread_id = id_to_int(tid); if (predicate_tree_position.size() <= (uint) thread_id) predicate_tree_position.resize(thread_id + 1); - predicate_tree_position[thread_id] = predicate_tree_entry; -} - -void FuncNode::set_predicate_tree_position(thread_id_t tid, Predicate * pred) -{ - int thread_id = id_to_int(tid); predicate_tree_position[thread_id] = pred; } @@ -714,31 +707,42 @@ inst_act_map_t * FuncNode::get_inst_act_map(thread_id_t tid) return (*thrd_inst_act_map)[thread_id]; } -/* Make sure elements of thrd_loc_act_map are initialized properly when threads enter functions */ +void FuncNode::set_marker(thread_id_t tid) +{ + marker++; + uint thread_id = id_to_int(tid); + for (uint i = thrd_marker.size(); i < thread_id + 1; i++) { + thrd_marker.push_back(0); + } + + thrd_marker[thread_id] = marker; +} + +/* Make sure elements of maps are initialized properly when threads enter functions */ void FuncNode::init_maps(thread_id_t tid) { int thread_id = id_to_int(tid); - uint old_size = thrd_loc_act_map.size(); + uint old_size = thrd_loc_inst_map.size(); if (old_size <= (uint) thread_id) { uint new_size = thread_id + 1; - thrd_loc_act_map.resize(new_size); + thrd_loc_inst_map.resize(new_size); thrd_inst_id_map.resize(new_size); thrd_inst_pred_map.resize(new_size); - for (uint i = old_size; i < new_size;i++) { - thrd_loc_act_map[i] = new loc_act_map_t(128); + for (uint i = old_size; i < new_size; i++) { + thrd_loc_inst_map[i] = new loc_inst_map_t(128); thrd_inst_id_map[i] = new inst_id_map_t(128); thrd_inst_pred_map[i] = new inst_pred_map_t(128); } } } -/* Reset elements of thrd_loc_act_map when threads exit functions */ +/* Reset elements of maps when threads exit functions */ void FuncNode::reset_maps(thread_id_t tid) { int thread_id = id_to_int(tid); - thrd_loc_act_map[thread_id]->reset(); + thrd_loc_inst_map[thread_id]->reset(); thrd_inst_id_map[thread_id]->reset(); thrd_inst_pred_map[thread_id]->reset(); } diff --git a/funcnode.h b/funcnode.h index be0fdd86..ffc56119 100644 --- a/funcnode.h +++ b/funcnode.h @@ -9,7 +9,7 @@ #define MAX_DIST 10 typedef ModelList func_inst_list_mt; -typedef HashTable loc_act_map_t; +typedef HashTable loc_inst_map_t; typedef HashTable inst_id_map_t; typedef HashTable inst_pred_map_t; @@ -51,7 +51,6 @@ public: void add_to_val_loc_map(value_set_t * values, void * loc); void update_loc_may_equal_map(void * new_loc, loc_set_t * old_locations); - void init_predicate_tree_position(thread_id_t tid); void set_predicate_tree_position(thread_id_t tid, Predicate * pred); Predicate * get_predicate_tree_position(thread_id_t tid); @@ -77,8 +76,11 @@ private: Predicate * predicate_tree_exit; // A dummy node uint32_t exit_count; - uint32_t marker; uint32_t inst_counter; + uint32_t marker; + ModelVector thrd_marker; + + void set_marker(thread_id_t tid); /* Use source line number as the key of hashtable, to check if * atomic operation with this line number has been added or not @@ -92,13 +94,13 @@ private: func_inst_list_mt entry_insts; /* Map a FuncInst to the its predicate when updating predicate trees */ - SnapVector thrd_inst_pred_map; + ModelVector thrd_inst_pred_map; /* Number FuncInsts to detect loops when updating predicate trees */ - SnapVector thrd_inst_id_map; + ModelVector thrd_inst_id_map; /* Delect read actions at the same locations when updating predicate trees */ - SnapVector thrd_loc_act_map; + ModelVector thrd_loc_inst_map; void init_maps(thread_id_t tid); void reset_maps(thread_id_t tid); diff --git a/history.cc b/history.cc index b11614bd..762849bf 100644 --- a/history.cc +++ b/history.cc @@ -16,14 +16,14 @@ ModelHistory::ModelHistory() : func_counter(1), /* function id starts with 1 */ func_map(), func_map_rev(), - func_nodes() + func_nodes(), + last_action(NULL) { /* The following are snapshot data structures */ write_history = new HashTable(); loc_rd_func_nodes_map = new HashTable *, uintptr_t, 0>(); loc_wr_func_nodes_map = new HashTable *, uintptr_t, 0>(); loc_waiting_writes_map = new HashTable *, uintptr_t, 0>(); - thrd_func_act_lists = new SnapVector< SnapList *>(); thrd_func_list = new SnapVector(); thrd_last_entered_func = new SnapVector(); thrd_waiting_write = new SnapVector(); @@ -46,21 +46,15 @@ void ModelHistory::enter_function(const uint32_t func_id, thread_id_t tid) if ( thrd_func_list->size() <= id ) { uint oldsize = thrd_func_list->size(); thrd_func_list->resize( id + 1 ); - thrd_func_act_lists->resize( id + 1 ); for (uint i = oldsize;i < id + 1;i++) { // push 0 as a dummy function id to a void seg fault new (&(*thrd_func_list)[i]) func_id_list_t(); (*thrd_func_list)[i].push_back(0); - - (*thrd_func_act_lists)[i] = new SnapList(); thrd_last_entered_func->push_back(0); } } - SnapList * func_act_lists = (*thrd_func_act_lists)[id]; - func_act_lists->push_back( new action_list_t() ); - uint32_t last_entered_func_id = (*thrd_last_entered_func)[id]; (*thrd_last_entered_func)[id] = func_id; (*thrd_func_list)[id].push_back(func_id); @@ -85,8 +79,6 @@ void ModelHistory::enter_function(const uint32_t func_id, thread_id_t tid) void ModelHistory::exit_function(const uint32_t func_id, thread_id_t tid) { uint32_t id = id_to_int(tid); - - SnapList * func_act_lists = (*thrd_func_act_lists)[id]; uint32_t last_func_id = (*thrd_func_list)[id].back(); if (last_func_id == func_id) { @@ -94,7 +86,6 @@ void ModelHistory::exit_function(const uint32_t func_id, thread_id_t tid) func_node->function_exit_handler(tid); (*thrd_func_list)[id].pop_back(); - func_act_lists->pop_back(); } else { model_print("trying to exit with a wrong function id\n"); model_print("--- last_func: %d, func_id: %d\n", last_func_id, func_id); @@ -152,17 +143,9 @@ void ModelHistory::process_action(ModelAction *act, thread_id_t tid) if (func_id == 0 || act->get_position() == NULL) return; - SnapList * func_act_lists = (*thrd_func_act_lists)[thread_id]; - - /* The list of actions that thread tid has taken in its current function */ - action_list_t * curr_act_list = func_act_lists->back(); - - if (skip_action(act, curr_act_list)) + if (skip_action(act)) return; - /* Add to curr_inst_list */ - curr_act_list->push_back(act); - FuncNode * func_node = func_nodes[func_id]; func_node->add_inst(act); @@ -187,6 +170,7 @@ void ModelHistory::process_action(ModelAction *act, thread_id_t tid) */ func_node->update_tree(act); + last_action = act; } /* Return the FuncNode given its func_id */ @@ -432,10 +416,8 @@ SnapVector * ModelHistory::getThrdInstActMap(uint32_t func_id) return maps; } -bool ModelHistory::skip_action(ModelAction * act, SnapList * curr_act_list) +bool ModelHistory::skip_action(ModelAction * act) { - ASSERT(curr_act_list != NULL); - bool second_part_of_rmw = act->is_rmwc() || act->is_rmw(); modelclock_t curr_seq_number = act->get_seq_number(); @@ -444,9 +426,8 @@ bool ModelHistory::skip_action(ModelAction * act, SnapList * curr return true; /* Skip actions with the same sequence number */ - if (curr_act_list->size() != 0) { - ModelAction * last_act = curr_act_list->back(); - if (last_act->get_seq_number() == curr_seq_number) + if (last_action != NULL) { + if (last_action->get_seq_number() == curr_seq_number) return true; } diff --git a/history.h b/history.h index f06c2e44..dbc9f1d1 100644 --- a/history.h +++ b/history.h @@ -74,11 +74,8 @@ private: HashTable *, uintptr_t, 0> * loc_waiting_writes_map; - /* Keeps track of atomic actions that thread i has performed in some - * function. Index of SnapVector is thread id. SnapList simulates - * the call stack. - */ - SnapVector< SnapList *> * thrd_func_act_lists; + /* The last action processed by ModelHistory */ + ModelAction * last_action; /* thrd_func_list stores a list of function ids for each thread. * Each element in thrd_func_list stores the functions that @@ -95,7 +92,7 @@ private: * Manipulated by FuncNode, and needed by NewFuzzer */ HashTable *, int, 0> * func_inst_act_maps; - bool skip_action(ModelAction * act, SnapList * curr_act_list); + bool skip_action(ModelAction * act); void monitor_waiting_thread(uint32_t func_id, thread_id_t tid); void monitor_waiting_thread_counter(thread_id_t tid); diff --git a/pthread_test/CDSPass/addr-satcycle.cc b/pthread_test/CDSPass/addr-satcycle.cc deleted file mode 100755 index 84aa83d8d36f97da22587bf356ce61d30a30cedc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13888 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 diff --git a/pthread_test/CDSPass/compile.sh b/pthread_test/CDSPass/compile.sh deleted file mode 100755 index 56e324e5..00000000 --- a/pthread_test/CDSPass/compile.sh +++ /dev/null @@ -1,18 +0,0 @@ -#!/bin/sh - -# C test cases -# clang -Xclang -load -Xclang /scratch/llvm/build/lib/libCDSPass.so -c -I/scratch/random-fuzzer/include/ /scratch/random-fuzzer/test/userprog.c - -# gcc -o userprog userprog.o -L/scratch/random-fuzzer -lmodel - - -DIR=/scratch/random-fuzzer/pthread_test/CDSPass/dummy - -export LD_LIBRARY_PATH=/scratch/random-fuzzer - -# compile with CDSPass -if [ "$2" != "" ]; then # C++ - clang++ -Xclang -load -Xclang /scratch/llvm/build/lib/libCDSPass.so -g -o $DIR/$1.o -I /scratch/random-fuzzer/include -L/scratch/random-fuzzer -lmodel $1 -else # C - clang -Xclang -load -Xclang /scratch/llvm/build/lib/libCDSPass.so -o $DIR/$1.o -I/scratch/random-fuzzer/include/ -L/scratch/random-fuzzer -lmodel $1 -fi diff --git a/pthread_test/CDSPass/condvar.cc b/pthread_test/CDSPass/condvar.cc deleted file mode 100755 index f4f111beea5a2a84d40ca0725e5740032e56582c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13704 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 diff --git a/pthread_test/CDSPass/deadlock.cc b/pthread_test/CDSPass/deadlock.cc deleted file mode 100755 index 76a93767766caac09977142a05227cbd433abf80..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13208 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 CY*WYp diff --git a/pthread_test/CDSPass/insanesync.cc b/pthread_test/CDSPass/insanesync.cc deleted file mode 100755 index 00bb40d76b4a5257d78a58eb1069c99b8b01c490..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14152 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 diff --git a/pthread_test/CDSPass/iriw.cc b/pthread_test/CDSPass/iriw.cc deleted file mode 100755 index 8042a13b55b3f3ce2d953a162afafbcbb4fba430..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14064 zcmeHOeRN#Kb)VHrwy@1g0^696)-M55JH(4tmQ^`~uq$iL6O}-*rPQHup4ZxyCA0d- zYFEe(ZUnM?{8*gmkQO+E=J*hry3|eFlyD58*1C2qr{M%q2=!?=RDqH_Ife=_Mx}uI zyYuEsZ{O|~PEYx(3~2A%-`soW>%Mt!X0E>xZro7h@d!>u;tPT}Z9z~%_OB3?*Gg7l zwc-L16wAdGVjhqZ`~_tRQ9H+UTA5~As^q+&#rUf&vVq#7pv*A6!iG_Uow$WWslK@s zR9TyzSZ1?K(Gv-f9<_D+_aqCtRc2J2znY9vetd~!L4z{GG-|_wDeHX^deqL3n#z^nMy{{GxKyh4Go^8) zbZxwITTS(~@#yM!XLo8~^+0XS>Y8eQUyr{^_M7aJ?2R|KlDOb;)FdYa&HqLC<9XS4 zO!KTP4z41Mx=z!0s$*5=$ye^ZV}1CSXHS1^^A$V3@!%a#?0>^|=DGjy?QFR1aflR5 zx56;la;F4E4t(Y8vQfBGbTsW{-mcPV){{u&gi zzf%_k*@UF+_`OIh5LRh69+$XJw5aDy3gf3j^>^H5N5Jp9dZMv7TwNH(_O708qc0gr zBn?9tH}xAEW7|9XlCi}4c%-i{)+daHmL?+_ODMRdX??t>JJu4}7LVCw`Aa&xJCnj_ z2NA}t-M4p%wrHObN%nMgwi)rBNOVn=6X{F#Bw`A3lv1{)S_-m+Y`Q^BOC&{avLg|T zM2$B5CS$Ygj-JkLk%ENL6+sRi?n_47uDOOD?iw^_Q*s?T*wxt$rG6TNfdQj8mgwv0 zj>J2YJB|KIfNcX2V;ef%ZL~#_Z5?vhYy+^jy{*mYBQ8LAn~nD-I=hqYP$fu>sce7| zi$;x}#$K=FOqH1|#5KBW`SLr~_-P@mJeVf8)(4uvWp3&!icpF|j#Ud^JPKe~Hd$H7e#eLu@k&R|mMtthB&I_pa zhgJFX@~s5RcL}Y1oR%rSo)18Y$|B8y&-Fowl@8qb9;|fW&i6pA1E)GT1s(VT20?WP zzR-a;JMcvge6s_mHI&m<2kv7Kw8MdyIq+TweyIZ=aNsl-oCY2EQU*cyIq(Vxt`D6p z)zc*gLP((7#VLw=|4pnwJEHK6Y$kF_AG^XRY~AJl9^fyk3YS ze}xHX)mI+?(TApey7_AVwN2$D3zw>oz;MfOV z7|_ir{g`!w?m4MH`$2NathI$~t!%m2a@?+e@cN&j{UTM-3Pr0M4cl_E{IZpxV9 zr>qGGh69;;^O(MW_k?c#0wO+J#0(#?jya1@+r?#E{FwEyvv^zSAI}w>wocgv<7W7P_0U|wxb;IS z7#&t!H^UF1_dj`$utPjx;Rmb>q)KStv7yheAly^Guj&4>;h3OtJIurQ3iJXQDI_r| z6OuBIvCQb43}GHALm#sG=neI!tLVfhRYAn*Jk#y@l>85=c zk-z>gNZj4@Ola_pnNZo|KO6eB=jcx%_aq)4VLoGq_gLSDNFbx%d14R{TzmHM7?J)s zbapEoX+j?hPm?E(h0oD?G!~wsWd)NuoeobOotZ)2+{v&OKznBnIqQ7Y2m=gsh0 zxZLS<>r^^*&P-Y63q!BtIcqv)ww^FknX)~fg`5&TF=Um%H_P_;84H|Gw_2#=l%=7S zlk3Q)4IK3%Z!IA7N(V}fvd+B=lvW+{S=}5nn~qo;(Wp^c7p;RR1Bk{R*2xQ(!GfL+ z9~_f!L{tTM8f*2|Eyr{EPmkS)_a9C8IQmb0%I!a)x&8mooc^Oxs{bg<>OYN#>_5F$ z^7Q}Cvxlj`+MwKSO2aRQD~#a4?#spArrv;GBzIwt;r^<}gO zUMSZDtP$2K2&KahnI%`0Yj~xEr`4R21(<>}pW_aVphNF^sYCau4&7shr_dohUFRGf z8Z`g>4lLv5j|cEuc2^ZF+492#Q_qHzRO0k%R5fVrpQg^8o&3CA_n_Um+ZB2>qq1`m zh0HT1)UW8Lmq(RKx(`M=%-Vo5VAF9;U5%q=` zH{Zc`%=b`WhM!iC)zkJnVm#*^kuh7JGE+yg-Vsm9rQ)%yr^$XLWUTkjWv!7J`yKHc zLdi9h*irdFjT7o{jl&kbbg=L@ldtbVUf|Qvd=;NzW@b{tlUu&>x4s6f$Q*t)Z62{VQH7)nH-&YNDGO%<~QAFB@0AD)$D*-uGJn@)lHw zUrTC%UvYhn=9xzGd_648EPhcRI_}Ze{VsKeHV%KXCG?fhme5y2#_^H47xY`lsm0i9 zsI3LR)8-O6XLkmMQ24avXJnJ;*1Rk&;oN@wd z4DDnlumF#MPT{?K1XO%5Gqa3v&>6rO={&*h8emyUSm zmlIBBW~Wg1XOs+){PIFvg))-g_a^F~x_#vve9LYsTX=ivpt#|(>prvQs!s!zGWDRn z=!-lv3i-Pj9u{^4mt09*>)7maX0~5 ziFd!0JCI+F#;OtHG>v}9G37qoVmFP(D30<{d}POv7j?e!Zxz+~mVMJ3_G$Zz>wGKk zDbanEd*|uC+M)SPzF@*v8}e0#d@JjG8ss2f=PQ--^%(3_!j779vL@4vcZp}gH5dKV zqO0-oM5#v64T^qA(RM}q72T`oeTsfx(Z>}%spt!e z{zlRBiq3QStE?P9H?Cj*Ic;U@wp4dArLFZ>`zu%1q$C&k(?E^Cvf3XAtg;KVs>(o3 zWliNe(H4*31G^u0Qk^~BTCKm*U#YE3CQ{wEX=|!$)~#E&N?RF^_jg_Ez-m`lSxOdinol0KZBW3c+mk9RnZ25U2pI>;ze8K*dEnkWogrF0Wc`u?i z*ngdc-aPlBRPMztqFl{Sw)`Sdo@c(i0{6Ok@!b1W+kTnYst!oA?U&ESJ!In*qIPM} z3CX+{H@oyX?@nHE@ob!jv&@U9o7bIee2Jjz0eA9>rHKE?hhHN2UeBrHrBz3*E7|y^ zVk9qqS3IdOnsZiYc`Fug(3T@B(R%E`D(7xLt;0o_muABty!<8beEs@c;B<5Ep5IZ0)Ar1no>e$) z$DHXEh12%Snch}7ZMU3hJ~~M4=Q|o6@G{1IwmjpPFkWWkw1=a#T;Y5b!#Lo){rv+J zctnM$bhT%##B=AD>c}^4A*ukk*Bm!Q9Hka%C)YoBNcoF%o{O(5oZsWN6(PPU?c_ce zKR~}Vk?ZI8L!RO?-05$CSHQ3MY^+!b(0lwMj6dBrQsVdIkB}jp*BL%zI9kB|3E-Nv zkp1&q0i4c1E)u!x)o&%9ZG$+vdCAwWi_uQ%7himFzn04O=h|5X{L@8v?r^P2sZ9Q2 z`wmKW_{Nd#1R<{}87KJ)@Cs=2y2|pmk$sHY_{Bjfep)HrTfojC;N^Md@d@Dh`g;m^ zMNw{?&hrK2_n?027hjulJO7RB0Oxx^#$PUAhYlyG-UnRk>LRc5lZAGFInHRQ!s+^& zQcV5|aka!1;~=%bY1|GgdHyckQ9!;QIK?sXI?1N)0#5znJ4EhRKl~?O+|zIY``?rH zbI18nCGU<``gs966$+>OduP%lo*O6iLIFFXEs^X?rrO*6ZHUmhY5hi{v0+mSf}!SO zo{VId(MC~Eh=wwvJ;wHU&$dY1h$3hSF-@rf(bm(|8;>PpQU4#VU00o7NX9}LkwhZ0 z6Tv^p#7@zkh;+q_XsWAgCsZ7qLBUg5qI@`tk4Ymo&=%`W8cB-43ee|e7E+aiAh^gS zgAgMZvKCQMje$rrqM<;yDcYuJl&G;`W2h-?gm12=KruN`oJWYH5!RJ}UcXToH#Xi< z7iu(a*|1?#xW#A*)is7mDXU-6Y(U1K38VhYH;0-U)(bnBDj1Z3Q7RZJK|?EptJ?Zf z&e*b#5XP1jHl))&|gHJ1p+Dv zj>e*)Gu+?2DOqDf4J}4^Qvl;c5qJ5c>I@1bQz2xo;5WlSXr7uLinUW=bcrf=z?&hb!&sWXvobf~H;*42~PY4jxU#B54dtuYKIVqoMu z+dE^4tS~-jEL>s@rqva07YsUr<7VUMas&0UtrJ2}o=Q#ccT&oCcA23H$BtUpi`ltlvysFxglQ`)IiQ6|?Rvk-r*pD7B06WGs6 zB6<}q0ZVOXeSC4sv>v~BmCWk%ez%eokof$@=H~Vp%>NNGbauk^^S<~cbs$u&1iAez z$82RhA4pPEB5+64CI|LeeLT>1QqsyR(q9my zVw?v^GTUC8n`=MwcO&D}*Ob1d^sC6Z9Es~?XapIjKA$(X&_5bL;%?a7oF6lPA2OuR z^T*%GTa|t<3o7a!zwf&Ad4I+KUL*P;`iETle4bIe)K+|t8s|tn{|r5jjI;f`FRoS& zM&sj5?)INTAq9KVGf0W|b^PyQ-1WKn=b=M;6V~T*l+zS;hvb%b^AnJv_Om{pS4@0F z{a2w&zR&u6F2nymhyNXpT25x$!+tdEs-MqqrkA4t$=zP&nZ6DgXZvT*c{I`%!ae@1 z$MhY@IQ98FXhb9Jx#!I0a@+Gh3dk1spZ6IDG+RRvo58Pp{)~6EId)kRzXUfwB)huu8{1NR@r@v zg=1>j0)`ivMw7ZFO=-%ccE{6kCz=d(3FCpKP@t)&5%EWrmbRKC&OF(~l^cwe*7o*y z?z=~N`?NduWa|I8w)WifyXTzyaqc_sz55PN#+o;IJs!cuEAAJ>_0Nk)$o>_=3QAUC z4Pu^%h-KmyF&oG%{6%C7QM<-;QkiBtSIPN6tMJ$0wSfk2L{^yIV#DacE<8e_)ZcW8 zsH#nmEwNdqLIfm0dNkIN-;gZm4q0JZP~#X=l=X-uJxl3XN{?xcl4r{Eqq)&vn`&?K zM!*ptA)-b#O-YtY>zhWB>V?lp7BnI&Op`V&n6lpQLXXDzNlT3q+^YJkv@Rhvex|gJ zRPIW5?W|vWS30>m-PM!tTiw@Czq)>HFqa9|$$67~lHL4ZJBbTk$AIL7Apf%rjr-u~ zfTy-9vXU^GI=S&e=gPu~pMK+s4YAiRkACIhTON7xTTgud(7XP(Ui~lso~B1%f=I=( z8J#aK(|R4SKpC9&SvmZ{3U>BEzMTC~1v||Z@b6c!bGQQjP6a$$0sor{_-882>pK8#gGf%rR3fCze17LxmCp@w$mZ; z`J#7jgds`O688&3T{qnLk;H`vx$Fq+Nr(Z%ys$ z${DHbhIBlaOXY;#)YhUWQ&|PKwQNXddQxrio#~X_R=%aHr^^s}2Z%@{b9&s!bay56 zbS9o$Q|Cl-Mkbq5kfW8V^=qXdOY|C@*;G8KC-7^e1hbE1x_U%Dm&)qhanvxooRLi2 zc_&?&^+NyBHe)?z)7{krrQI~)zCOJ-mCa>(;^{79kG?wuFwqy+cVdP;dLnKlI^`PK z24HVjBBAGq3lpBO@!o7#kI?~Dg46=a0qCh@+=!!LXD(;sLQnN1#fFC;jy5*w;ousv zxw)wktiC3=)~@Sy!Mfl&@|+!fR0xu;q_|;6R*En7e|F7|gdXVpCnPA2(6#vLcOS*= zqDu71{UwC4@*4=zJ~05E3R$>MwGp4cscRnf`*qbmxoii)@*dzE$5OR_=b%lAO1Xdo z=h#dQwGP~Q{|Y&9zITv(g9FEarb@(t&!0kt&>Z*z2j1$y7dr5V9XQ2AE;}6fXBhvyxM_l1DEG&gR}O2HXyY91!I==HX5~ovvbebLdA7iG!<7E_^n8M_|QHbM*v9Rsh zYKoKEz@%R@-`sukaWX~AxoG<-YAB9Dc%QVt{S2*QN09lG)ZVT=^^P=f`Xe6o2AoMy&5q!>Q-h z)Xmrt%>F+9&9;Wy+4Ju&`urYW&Anx!UZWLF)0(3 zGS9Kh-%raB=8-b=6s(SqfFV~4*MI~@MU<(`AFADS0%S@&Y!Ozl0| ziOS!t@YR@hJ~m0tJ|DY6*Yo+oz$Un>bl4qHgXTHP2hWiObWBy*3UZF&KNz zj9rFTM+e&{2J=_Uyk)*I@DBEI%LTLjteG!V@B1ytDdDpN)-1TcdS8&S@YTU~3!PlB z3jbRyj;|-1HgM91y7kwD-tIstR#?vxN`cb6sF~-@mgCm<^4N|<^O;6?<14t{M)9`+wCP7J}H;r zeub9!_eP8eQQ{OuE%NV52uc4QtG4~CV$SUH{yl+M^r`vx(EH{5`=m``U$JBG$cz|VFxy`?^T$hK@XPX2K31~Z?T}lr?!8(PqY8EmzJpM5wGy+v zT|=nD)x+{o%8tPNd_(&ePZDN+axnkF?fFS_!Wo@AhFYyvu%ek&%dL0cD;9^MUx?vcJ<$H%_UP|Nw@1Gm)z1t~-vfVn2J1`q)FUswue9JzEnvUS z-5rqcb6q{V0&5kNo9`3|bmao{8ky@%CF!BlbF=TBB|Ub>iZA1GMU1r`*L7IRothtfiD|t1Nc}a-)#@7p!Gf+9BurksLdk zUjnZguKzoYX8~rt3_cr>M{-H1C4;-p$ z^w&N!OY?^g%+~x319MvZk*vQV>JLTzwT=D&(-1lb?!T%0?WzA`iXZ@dlGW=H0k`*;4Jf3x@A%E3VbJ*uO;JsL?`|&c||22AT z1+J~YwH3Iw0@qgH+6ve!&^kXNDp3cgtEVRkg_ZNCB zr^4S|ZnW8{@2oc~UOjf<%aC10)%R3-&Y{BX?|oFv5Z~vG5SjkwJIm(jz?MqE8^Ny- zd=^d*C{*Zqn95R{h#M4T;^RtShph24PlM8z&su1qgJ3Fr7Tz!?B6-FGisx~2fAgf& zbpLq7mh%~zZR_LFTJqfQgyN5=cBTHQ6aJ3v?&z=P+T(ml(Q}Hvq3F*Qy{hPJJbY7G zqUarp)+@S6(a$T|p{P`H{A}K^;qE|f`_6oikq@j3t__A(*XJb{{)2FRFtj!p4zIKu z0(GHqeW*UPUL?|SyfE#?XRNMFPoN2Re0p6lGK# zDaCIT{bli+W_aI4awvotgWS@-ryY#(iDv zQ@Hy&IxOwXye^)@4J;sL?(?INr@Re!p)-a>*jM}ssY(g_os`G=tN6h8#TQUn48L%k zS*7I9Lq6a(4*rb_I2|}F7Bl10TN0mXXde2daq_n{9_K^K_ zBPiLSGiNGnrylYFiIo0q1-?j3$4QotlYOki#G;5)7*%QqE72D$qsP&Si3{4PI`UH@AD&Mek!kMp~8jQ zCn?#A^FoO$#zBI>Y28MYU#?eeJ1WShfm7ZR$2~UH2b|``pGSGVPh$U+%X9i_1^a(0 z?ay52qe`9*F`eaf1v_&T-s+NHBJr8`_g5;|5s9pkGx8lB!32_Ywrtp{H#co-L-Nyf zj+1V5>j}zoLiUrM%;>w)nVs>poPw`04c(yB ztMCk@ZU%xxBbOG^ja84Z`qLqjeYJzFCWES=V;630F!3+^E#dL@xOhBP!x z4k>5huu6ENi8pn{cDHUb>TRg0O^cZ}2ARMwlWBLPqOg7WHA z%3QY2o$03Ls??-IdXJ^5f~Jl83L$vr(#wyBY|Th!ZC38SMe zn@Yz?LDhQGh6u{l3!)m_l>uv{`tU20AA{M9%m)mnI@KlLnS>GMU>(_o&MVtCW=8|t z2G<`+KoK3skx2=?j6od&p>)F_vJFKLaj6@z#u-k3?K(X_Bh=$r&@TL5$ocDhexaJB zEZ2$Njz2mxVEs041l)9fctCQ~KYV{-B#a6^=Ve&G&l{0VeG1qpx#{~bpGPQI+=I#j z{IPz)8v#e>Cz6PWqIe^fV`qIlIm)sDzqo}==}*14k^%~!yV#sxFZFcvb`afKA#gB>fbrI)Tf>&S^rOz zKKrjn` z@+Gzst&g*~$A1Bhe*DojNQK|e_}^`~`*ZWJL5JQ+SfAhfMk%8Y#VzmV#~?%FXMH|* z82g0!Z$g*$KI`-O3jezr{`WH~oJ@^}_wjyL|9lQJxeN^`?(s6u^c~1J$1egqNKJ@< z{1yE+nfhftrthQ0so$^k`vbNLkCP3s9`hffLKx4V-!Fy&wuB-!gI~A*z380!4^2tf z71mF?aFV6MbP?*@w`@>9KVEHD7O4S3PYLX`r9m8@r;s06AlC5B+0*1Ic9u+lpF zn%12v5ZWilaRnG#<;UCa z+;{Kl?bGgr>9m>Y4AEa`OOBu zhzfeOU?pW94v-#|b^P}@3);>jl8%XT7=kjPM=a?XLeCI-l9ma1NoD=0ZuDyv>8(yb zIO6?8g!NfUvJ_h0NrWg~v6Qo*ejbtZ0TX7DO1(dV9+mUchB6_zQRG*sT`ENRC8c(x za7(0XYjxEvk`MHu!f&i|P5SWLPd&0;dE@NFS2th#(AU5H$WQjZ>pt`Pf4X-zKKvp? z3Win~zC2IrWxzana2jX%@SgzBXXh&g?DrRtuP9)@sQ`YmfSo@tfPYi~j}^fGrU33K zP_OS6kbk29{uakCW8(|`h%t5ob}8%uEn~~sAx}H!<)fS9SF`;#JR#)m_PC4nrYg$?r4t|PXuBKO=H^K zJG71AZC&w1IJQ0#h{wZmrZu)UYoTyVz^%>eBhj94YhY_6Y^LQ;>FVi9Fs%cG1w(Ny zkcf771+_>t5L#DhMdFEQEG!^PDn+ZSxS*8ah1RH0u>{+m=!}H}AuWh!BAjI(igxv| zBqX%%0Ai?WJP``sbQ4YAYNp-4DN&26b$9hZX$RH5w^!R9j>V%rfk;mfFoN3{n z5L>@_b6tI-=JT#&cQrNEgVok~tIW7o>8T0nU}BhqJ9v=hwNGFc+x zmx=K_A8{c{F!NY&Sti0)TX5?>S7E`e>wJv`M}e}zZ^0L4QN~mYzQ}^NSn$Obe6t0o zwNr+63+|R6Xr~2VX2G{x@KOujYr&UT@I4ls`bY+~?`(;hD!$_?4^s!yiDH8mKDF;e z$#GL6b897%GB;G=S-QfH81bEyI5n9;xZy_PsVk<&Ilq#4>awXc=a&=jB7TJPmlIE2 zG&Rimg~U_WObv0~Nj!DQ)E>@%xD-5f_tbXIzehYB3#QsRe};JKs;L&vzePNC(UhO_ z|4ck}%~S>FUn8EnWXi+&pAt`9F;&L-O7I;+;Cb-hJ8h<`9{p<}KfHloB$N5bo#p zw;ZQd?eI$e2&K2FkDlWOj$LxWfT~Zc$Ba8w$4T|oONk{}Ym20{(iLpWaWnrtca)?2 zELq+LMWY7=+j6q_(h?7Iyw7twI*9|9+IJ^Q7XSLspqDlFE-7Tjw@mGV&TM%I#TaS# zrS;t(t9o);J^BnvNI^eoJcxGpT~Ln>3&>~&pdS4d+J?diGhX>5lkr{9FRFW+4OQPg zrs_XeQ^_&)@bF?&Mol%3>BnNNVT-s7osQL`BU0uUkU>VoFD%`c9#o!tTzPJlV^DeXapldbOzDebeZO=Z zxejGMj4{acpBo`=6%)A~BO^PyI)-?EK6;kMH}8&7Ws*8?R5?vkW>lHLlcD7%Q_94V zOomIP^--f0Gfr1tnxf>C@{+EcLdT_3Z4;^FX+1fv|Dx|4hHCSO-gZz=9w_a<8FE7S zV4qQ}E62w}ChGjt=Rc2^JjwUMSMGchw#y*JZ%05w~eY$cM<=>xbn@%Oq z>q$eFe^77h*OPln`)`2}A>2>pA9w`Q!d3+XRTwmuQ?YJ`c&d#9W)+GE{k#R`RXFz{ zP+ES?D(vlrQR8Y9&6idmJwcsf?JZgvM1M^p3H>#K+K!pEJpqI|YAmIkkR5dZ9rXh& zooH=Q_GdA7P|*XawiBr0$xPolCwghW-nLIq4wZhx(o6ezFFlb{MVQ}j>_VBT=c$(n zI6`Z?5fUi%5=VLc?h&Y^mj;bmln6uSC`}Vx={IU2lv4Wj;zYTJx^L2~&}p&@Qy6)t zMTK6b_CcNAgmHZ!0miHrkLt>Vn&K^(YCAn!xxJmF^Q{m)e?&V(={M+9BNPed-T45e z^jFCgEMlpbNz+LE7ghJvR6Q>Z$IKeXM8Xy~L7`%8=Bg~`}Ie1@Ip@~L#t%w?-0gR{%Mfo`1OA_{>ytjsu zzg0!gAJNWN+HYwGf_XdK%u_7wz(?`Rq-^+SkQcSXEM^Yw-=_p>2TKBP3O6NK+F>=B zsYSv0_@0Eurx@R6gA^LyKg0C?Umf4yzDUhzAK(1~%^lx80?irU_n|~IzG?NQ@qHhJ z`1pRtZH{lTz@qjA#`i@G{omF2{=o&RZl3Y|lt`E}zITcQOTTWWehr}17~iwolo;gq zL0$~+~ zso(AFSc%f+ogE7(A>ZtnKA&fHT!Vu137vO}nEQ3#*%mDRlX~(rUmrpA-7|Xfe6~HX zUL>aviS2q^zlfvRU!%QrcDRj9^b#n{F?MLP5OlfSjb#?TJ1aTP-}mkJVP%$U)fUkK;4$Q2kW%s zL$fEQ_m5MFVNbjg(R*$)Uh+NWO~4mC{3@WUXPal8fZ_|S0-mn8hpr>yo#D_z=Jnpv z9bFs8`~A*fB3jw$uG~? zDj`4pZYIMwDRs{|)!I*S&Cmid{q;e4G;@IW$6_*G!CeHV2udc-2< z`VP;F1W7J|-yyW&YiN_AVXNFfI;BC9dj`Ml*rAuWAUAH6D|1OXs^2Q)r=onktz_Bm zH6fL33>a2G!d(x%2J$sAl-K(D{R^1hk%~Rbqee;{${+PR_&RtRG zUS03@Ko0Wt?h@V)Pr%L|*b!Yx)_BOcmN*vPbot*q9C!Q$MDSnYpK~m|x$K0)ar+Me zo^!ar>2iGR_~|JAHc^n@SFSeM?042{1TVHjd;v1Ug!rCH`xFJ4{=ub8l=xn!p9rG^ z8ii%WeopDal|tI-$J0EI5IrEuN3W+8mYIZE@0JO|mT3l0JEwBbY7zSKT!Fg|9dEB*r{TDo|+qNcq5=qak-YRd! z+Ug|de1GDr_EuDReZDnjf~T^=S6xwEQOkmn01mc0@TICN+T*G5R(LBss}r$g&%>T| zRn@h%wQD@9Bat25w^*>6HI`iSM_rg5HBSGWL>JE1t$A@*cHCN(T=>3}&MRM>9oM7yX_qznG=-^p}g_J8xcm?)O&H zekq$2SMIs?%d-9sxp+AnTI#n#Jnq7mTRLvrgNt2}U3aW$E}T;3dXtMUVf2~79$aiG z{66yGS26j$&#L31)kdr*x%ky=FfYD*&i8K8b1}JE&RU^msffLc3+~)N>#zf>o4x$B z{yNbw%(f4ZWy1Y7oZfT^x9=PDe&E1rO`mrth~<%O;_;- zc;=ZGU*mS>j`OEbZx5S0Zu=ph&mU$#$FUBGc`f&~rxCdv?J3uX8_nYLecB`9R`O%m z$%j+_T+ZgMCqLu3)q)wHD1cuCUXJlBKY0}i)ej5EUxxCpbYeV+dX)KQ2l; zt031?&s~FU!*}-vOSlUk(BzIaENt zAElsr(H$@aSLov2%K8Q|9`gAqbrrDxO>Tc~J3lGp>C(s= zo-bhMFmNi5{B|qL^MPpRVVj*IZfEX3{&E5PEEr3~6UmMaZxH@Acdy^5H8pN(g;Ue4 z?~<12)`H}{1g|D76xFsxqFVzIEd&=Ncqk=%SuonYJrYiYL*75QwYDn15cg@)01K;Knon2K(`7SB&u!LSl6s*$~_I_-Njo)#^JxHDXI`q8#XfSuBLnI>zcHCH*DCX zv}&z&^-T&XI~&X?lZw3YW7SPp>&n zRk`M4zI@(faN?p9GaR@g5iRTS^;>+|?uCa|2wq?CA44_aE9UbFw>4^l#x7+?%cexN z2{pEA$|fJ0hrHwRd%$Vr`X!vcZ0>5B1~)p1oq?VZ zeD7wx+$=3j1+}(^Fie#R^q@kO-Qn(NY^N5DVODHPRIbxBE25$0yE?kUu^h)ctM^)L z9R`5SLC){DxU*$F-sZa2<;clu!^tmJk?X(5yz!mgm=B;H#HpgWCh{`34?G%YS_Dutq~x0I7~Gt%jf zMDp_ec1Gy82z@FJ$;k2xm~BIZY)gIl9;}Ls8d*=7ztorbSA~APFeu-b+l9Wo7b1Pq zvFm>g7`3Y?ZuVYmLK5EmK@9AlA5hcqj zP1yOzZTj-OJ}&f~^1{!Sue3L0)0g*vr^LmZybqJ|_WD09^kx6a`+-TJ-y#(Swd?<- zO<%q*$-kp`;J4@>wCT(HhM}dV;wkDJOR%@!i%268S$_H68WIES8H+AO?d2Z>=Ejfa zAO-n%De~_!?D^UGQ_!Jz6R9unIVQ+655X>P=O-aU<(K;MK4J1x>c0bB8v9aT-kZq3 zn<*0wBbJkFdF1#Vu;nlBS7ufq0l{8g$xC_;GS>2E?_oTojlVB3N%krAB)y0ftG>Li z8T6PcvYgU@)RX)th!7_0FW)ovdrS#IOa@PT|2vU6RW(R=JYTnVcaid>zCVnB9kzu^v6}BpeQr=2h`-#X#v1O`2ou}3A>LcC{ zWj};Wa4{p}@y2n`BrSOIN5UUTCLf(f?X=Wo(ptg{a?_T|P1AUSC*wevtbnAVp{^hX z^>^;OXZP*XDnnknrWTVbAwjnXmwdYt4o&^rkgETFy$T+rS?ii zS5=F~8!VP7Mj`>SqrP6eMY5oMvchyq^`nkDCW|J|1e0As*%g!>Q?IgP%HyN4(b1#i zJuV#_@j4OJs}dz$D&4PTqg0>tNETF=6{aUFSTJR~Pr{D+`9X_UDIQSmEf<&4^|1^n zj#PHUhx=Q0?ubXX$A^=-vF&56E!$gm`Z6hBvm7`1C*8gK50SdyIBJp;g2GIfim%J5 ze`>l^SFLX&>_!}obktt@#l@j*Q_sEnrAOOCKYH`>XL~n)=CQ9l`uAtv@_gy(+dF>n z^gHL@_~C!4NWq{&8AAi>E8vsBD&dbUqyL>{^w$B`a5xLiTg?fA|M)WgPcDQ17&f<7 z@Z$%jRlvKJ!7l=@G~UH!@b52!Z$&>f$eiVM0G0argv8eg?>b$Yd_htjcd)QsSqjTKqh zj7c6Hkkw2P%*5gYBA1D!%|v)ONkPeEqmeuBqy?e{abfpIVn?|N^TC7JX1{5o;nc%s z<|v|+Fk|U-Dm^TNYMH{*U?gH@hzk%NvG9@fa56g}60t-khRB#CQGu5|Fk{hhHVi?3 zh6aoaBFtDaD)x4Dwzc>6ns@nj`T_xqHJg3SzFl-hY1N{Gin~~|csf@V|CQ>Nlq4JF z+_dhO@WRt@_m~7t zHry>Wt&`t|^D~4btu~z6;G)}be#Vi^u;Ca$v2@$;wMA5jUK>tpCzn1OZeP%cY&bnr zxQy8FjSPYs<8Rg(r)zHcuqKQrrm{7KmnHZ@-33c&ao2i?7PoG|xqgd|8u3FUoV&V+ zvUN4_6xz92$-9WBkj_m>{@sn>-Na8y{=bQ*5Y9a#`PYf3pD1$^l7EGGdNj`+m;6tN zr_j!gNdDi6r;yI|N&W}KQz+-UCI39}tBKbo{~Ymai1$mr8T`Nmcv%h^`PUEw@A)RM zh5gV7Tr=`B&k<|nLkopF0U4){Efk)|n2gh*1tVX*^&+BajKAPLe1Yr>e+Qkz7wWfk z2od;YXa3Tsjr=Rd_|NCNdpc*Pj$_3$W~RN8%+UH;sD=L915*FolW=v&*nUcST=2l% z=%#bjHM$%PhtHE>@hX&05Gbe_T@3h`|3{J^G9LexbTIwCo5qu$H>L~s8dWbEm)_6b zSoF4rz144lAFKW2_x#n38g8csIglg`A8Z0Y<}{D3pY?-jY4H@*zJqO-Ti zU~%^F+#|3l^+(0ipFeip$mix~LRYBQd)*(EijdzHX?_v7}Kw~jWfBcM%8~B z`TsTYFB#8Gsz+O)?)}BZeCR(;hpvoIRpmoh=KcXq%!Dpmo-V`Fhftj(_H^j7)VVzO zDs%!(ET<-t9>mR_s>feH#)(=tF z#r?b`;Bs=%e7PKdka4;;&Lri_=dtB zg%8Z=8;Wi=7Iu{2jeuwLM%l`Yu1Pxnf@Z%MGG4(y4n7dfF9r_G#})C*MUkpZH}~3%tztZ&&{HuKcwQcv#$U#TdU(W$b<< z_d23i_t4?sp9BvFKOHnLOq3?{uP>luv+P~W_A1&E;Kt2h%j3xWOza)<;`EvFr zAlDFQdUzJcx5u*Y0Q7apX|BXb-sbT>>1y*de$gHBXlJV1JWXGyF+Bd0s|-);c=P?QlWQQD*yBTVv6XPOD9tN=G$Fk@%*jxqRZlWi{PJC z|KvL!?BtFID1B437dJE5_@ct^YMQd=_jTIXqVi#jh{;-A))+slc}9QPJBKZBcZOq7NuKpy;TgCl!54(QhjH ztfJDn?X#KXx! zZ8Vn745yM>tIzNAYfag7E_p<|YiG;u-MhDGP4W0>VuuZD-DYdGa@CEyq}8P_5z-f+ zo{G4;I8W_HZhQ&n`B{$F2%g8~_$pE9`nyG~;CWN7Unh9}mE$)Q=V>{<^t&g?-C~WH zuhZ?SvhK!RK2_m*x$!-8wjy5Pd#LnZFDBF`wY?EHRs+s!D90N_YrSrVWZjJ~uDqVu zg>Lbo;yO}}ZxFQI?<{Vt29@T$TWl2k-OX;}rn_IQ6XkfL7^{fiwB$QA*}03WUdanB zH`U@T`V3!IXnn21Zj!VAw63}k|L)a#nLe$rgikndpTeEb1KRJZ!gqH1%tA#id*Yz1 zFOBCTz{&r-!~aRCzx2BN4e(0i`iAo3Resihr}8`w^53^sC$_l1`ZDT-YYLZpd%$YZ zVZx6)@Lj;Gusi%MHQ(yU8Ongt=XtA3)EalCem*MwG>D-F*0c;hFY%?N)56x22z@^UC`EyMD=ho|S%<#`#t0XX$*t$1Q}0r=N3v(%xjHJP-u4BEEJRT$4EB zui^|=mLS?)PuELbU)}@vL*Z87SJm~Bd&sb8U&enYaLsaAcBXy!N_c!3KWBkAV4hE? zdETVFeGNGEXG-;lf1lhT{VZL_zPF73m!zMvE=r~iXKMHRs@-a(@-wNwG#};~a82ph z$$G@I0rQ#HPxkXs;Fa|62JWqJ-3{sICc&To*iSd`O7p=aeb>@_o4x2Kjq9S;C%eh_ z*AeMwo#2n2@*4s)PT(N@DW%WtKCb*9SGaVB(-)N=XI{`*g?rU}iz$O|Nt~@q^lz8J zr-4&`5wCk}@vp!&W^D8o;51MC>vW0AZx^W1@61YhO7BX2n*&v?$H3{jINSX)^eO(% zJf%_iuau`GBI#@GtMgzFl8Z_?L}oT&MktF2*+phFWe&zu{o%M7 zMV3#-4Clr~B$XJ6$Fi}g?+PCGr4}V)3lO?vaw9o7eTKd>_xSxa4%|HFb( zs!?}f7v~EpS5mjxscYpRRn%Ul&5*r8?nyR{@kPeQIB=ukv>YPPJqLpOLS|@x2W4}~ z=yM%;j%LVE3P#5P!7;dh&z^&!9?A0#(z`HU>pXen_@UYLMA^UO*zb0%Vy_qP19%Cs_D zI-4zb?YCyh-H(K>=y1|Rz8L~as+E)GOiBS$$zPEa-ZWzAV#1orb2Ck3;PC~1FtAHa z(t%tO(=?Ur#w<0XnUpycPDYWTSITg+#a-s+@yKK%T=AkIv92rwt#Te5^7#Uo+}2$0 z4`*UBl#i-*ZT)kfl3;giGlq3RnEN*MqJUG1)&Qe%vOVuhv;)Hdt-}e0kY5zH3q{91AydO5J6nUQuDzb1tm>)&O zZqM)G^U8jf6&26tN^L-Kf7y+b|GdMV-;ZXM{a-se%tY( zXZz0rr>@dHM1}V!`0pv4@p9Tf4;yNV?Rh`+vif@yr@oVa3AQwU*q-+bu6{uKAHtUA zF5C0I2>-nc|6Pk(4vO=i$MuAxecnG=*a88Hv%kzUy#gJ3|Ap2^Wjpvyew4Qf3mXj*F<6SiW7*w&$YwY0zKy|Z z#fez96q`}Up&h5inYMOXXX-dpYwe5#ae#K}G*)eC?Q|Hc(+#4HRVkxl`aAdCvw8dS zwsrc4f8{cH=bqpBxc8oS-+lY;J=_;=S?l$91Q)OPiXd*}JY7Q8Rfx)fWEIvR&J(&= zBrX(_fmGm6mlC2@jp1>E!9eKqiU~QT!O0qOev03u1;lbn!Yo{2i&m%WEIPt7EK z31PGGHy3}$JC_VT|M!RQX$rr7`ox`^FTCTv@7?pO{qOrvz4}l8uI8Q3LZxi!gyUH* z(#y)=6mHE$pXQ$%{wQ!a|H(3Vx=g!ImeCIa*YM{oEdVqp2)?R}|9c^G>*wAw`157( zb7k-iW!n9{)Sn?nrs}9+UdyWxk3zp%ED%H5c7<5veu>W)2ORibrSHUFgBgu$NUc-s z>j+%IOU=ZS>{i3{NN3CvB$G%cqFD^ft`)m8 z*Of`gs9BEDPDdo>KC&i?&Og)@bex0rS*+pMttlC0J-STrI&8ud(6w_h8V5+us8XHk{hvqT6tO zXOS#o!x4aDX|>_gi>MHrZMb@6N$GYQ?zic8+Hm!%meL*@KF_A#XTv$RB;IYq=h*Zk z{iiD<`zkJ)tBJ^-L9?Rp351dUmnx4~N~0@gK{UE}Hm+5RbkvCNB;oMMQIy3~iKkmJ zJS2H9@pKD@2POaU1>k+eKP~xx5l^q-;e(PtMLgY_;Q`6NNj%+>;oXw|3-NR-hI=Ic z2jb}#3~!hGZ;8j;5yP#Lf06j9#OsoOo_M-7!$HYELpyPB$?p^pCxuWpS+5#`;4j=7^TR_tQu|H&USYbtHeR@FCGdkE63x3Y$I~ z9o<*AnE1${%hfyMX;FCj+~{cSnSA&(hS2|#w)KeeR~^aUd$zC$rsRxX>b1YgABRdc z22u z)zGb>{Ag%XsI6uH;)`c$h~WOEL~m)%pJ~p&-m--5XJzE@IbUJ)6ZqZpuBp|&!Sk;r zf2t*aW(_=y&i-qp|A;5D>YdyvS`cpA8oE8SHMA{c92pqv@drl`Rr05n3=h`uwOx2M zYO!=Kg%`fo8%^dC*Jz95^h^rRLf^G*p!C2#jph#$#bA1fA}Gf}1twD~R+J!UCFme% z5R{(R9#DGj2SA5FPk>UHZ4u$Qd!z95ReKgrpHeyCnNm$S{U&Wd8&@hFBJTP^Tn-uO zSE6qtr0B0+>z{W+)wH`RcZ<~vuDx>k<(CpnI(Xd0N%(CgAmp!p(AzX)viC-`Y{?1s z+}+wDdo;yIKbd@1zpQqsEe&IS2y{|i6>c8;=!B2Z^vTthpQj+-3q6Y4n9hb`JHG?` z6ZGRUyL_7z%YL3FIqa{q%kQ$}G=}Mj;c>_lByaRrf5+SCpZAb2?AP{BYV_B9yCUKb zJ~%nzZ|I-0-mho;4IzIp5UZzli{>yP z6J;U-6A_q*z(fQlA}|qwi3m(YU?Kt&5txX;Ls0v?p$t(;hdK=@u!Tv+&+8pRdekxjHXhsCaB8$g)7u6G~3|4^&wG(PyJ+ z;`_Whk>Z)}yb6owJ?=rT#mmhYf&EI=Ki<2Z2aJk+kC=ELU8txHGycY>eHtpfpTc|Q zb1hixo}$YdlJlAM7n|5H&EvKyr)CGb| z>vNK;{YGtlAXpcutzBXXv}M8C`e1!G?M8I^H0Y{dA$VSw>Q5GK z^T8*k2%bl!`jt3Y(Cv_{`>;F7^VTl(iSg&8B=?DFVx&^HtIE0$PyI=k`{ffj=XJ%$ zpSO}DpQsX=+EceT;=}0~=Q)((GsOW{{aJ#x8J)!^&M)S7*kwLE)x6%6;&TKYBRGps zT!6d}H+-((^E|takDhk5o|NMA#a>r@!MO8ovhxXEEyujjvNTD&KRSk3HCl%~Slyic zr}fv1`=UAC1LT?T?G8MkaOZo2_ESALuczZ1Dr$KYx5)bVc-{@1{0}<(KPdIb-Yhk6#Cl1HT0GijTSY{drp9e2`V6y5*PSD(xe2OUvLoaBaN0 zxE=UR+xjy}>Fg|{zXy1=%YAtmxLX{ak^UD5K1pQ%&lBz)pWkv6_@%gC0>`gZNg^Vr=BB@;~5MXDWPZKB(tWp6$S{O5t?uOC=$%LM#GK{n@T? zdBy_SRZ?Fm*~m)Zl+VNK1B;rJpB~l!hm_z#++Vl+pDktlr_12`WxM0!`KZ!&=JWib zjGw6rr*m(6nJ;md_hT$$X3boCdmx6~lpC5h8ZFJYv>_>IEceGSyNwuS{~#;Kh^LK? zWO_$5X~dDmgFK&HpNOTqdy)w=5f7|fv8v8p$)L<2Bbv!XcOmV?%>%&I)rZtq-B!|OwB<>mE zh*F5G*(i*4EgKp`EyjkmYi|j+8Ev7)mM|Gn9#XOOcqt(Bd4#d%Yd3|~H#Z3@*+AEf1=X2y@l@4F#NsUXfGPbO{b<0i58`FKYwH*nwIfbsK zVu^5XxS>ncg|X#-YBm^!ycV3Cx@x7r$5eKa1&JPr3^sI@Cpc3FEa6*KYsxwY4xhlZJ)O&gujR2&Iy zW7%Z3yC>spSdN>P!6(I>Q`bt;xLl*^p0`#q8z>X4WN5`4vGF-I zkm0sO$w1Y5lBNjAa0O5ebfm!|qYqb^4j9O!W$IfX(WxHu&N!Sf2k*$Mvp>j|GwT_& zd~p4a7!1*H6uE`4OPkan5X!6zAhAvauoiV=eX%cn|5u%US7K=|{tn^qCC=~W?|XJm zy7qDz82YBhYfKjYuHyV@P2o)Vy~=zoDrfKw&Gvm>U5fe?K)++DupR&2uuvhcMP(ZP z*nZHfgF~){0yZmJ0gU?2_V~pwOB1emWfblCdu|>Xpzywg#aTYMPV`3n(VhUe&)X!rz;_Rr|cJLiS|iwEsFViYxEyaQ^O)Qsn(2sK~yFGuujwpMX`@+hg zNJWu_>HXmB_WYfDQf=gLf0bFW|IB~OVb9;gBg+0#3c9Uuy9^DWVsD@K(PrbPAr&-ahNuQg?VQPI+>IPJghu;=e^UD@;RQg-9Cf68Ic-|GjI{o~X*TXDwo zS;*}D=kLC{D$B?jFK7G5q2|XQhnc^-`2RIH+jH`-!Iqk0d)_BFp#taBck(A;OZ{hi z{vJR1IqlzuEzNzl=Y0qMe<%F^OVn~woPQjbJ&yKyf8s3VB%(O`%RJNfpkwcUaUVk? zYvgNLqa?NoMlEBopV64G0zt zTBeZ-*0p}D-BQ=>$K4MqyC2u3eq0HPz;@k=ugX?FE!|o>QKZo#QXgc$zjM!-+<9DT zx9)$OWbQe?_wPLJx#ygF?)jFdYNbU{m<$$n9V5t{?dB-`%2-Ji2L-N-WivOM$)>R^ zU~KrgIfY_9CF2W1wT$h8Pep9Sugsz&$}Dc4kntoP&15V+q?qgt1-D4*@%};`lrdvY zjvzVm^~7WjBCh8N86OmW92c>aBar0cLM|@kWSlSfWi0bYd86MtL0@Na10vW>k??9L zCSD3Pzl->Jx^DnUi;Hn6&9zk8J(v?vEVrzwrmh=E~cj1&e7|1;w%mjZ7l| zIE@IArgoMIzs5w*55S*Ef5-%1VxpgJD<^)b;io`k(tp+jA2Y#^GV%W@6aM2S__sKI z1as%Okz&jay%fTT^VtOUu(O`S@>0+7O??^pO9G}D7cDF?F zxQ*i-%s(<2f05%E8%W`2Xs_)-f1nLblxbRXd$2aX-P#0ymyIboFgu=lNUt4Qrv({AtWMj8aYd{V=v_>C1LWu(84rl?tFX98CAsp86Obc}Q+42n=Dwb7hrLF~R zRaNCOfZ77rLOrd`cg=TQMb)WyGNP*?1n(d8zD;5JAN3Uq?^}qjK<3wosh^>H>y4*x z$78|Dx_SFzEHe86bj2#`0Zf5puN5?cqZ3-Q$?pAveqm}op?P0#^kbZ8zr#Qitenqj zz{@_E2t@|G@i|puz#IGNG6NnCC4$?4&q-hz^BVBE27HYHKiq)dV8D+t;Oh-|>Jw#X zG2ll@B;rm3-eJIdd(POsy|yREI+^#LzKAXU4v5~KBleecropQo18H#P zW$d-vys`iB_Pje#v##=3Up;yx@3F%J`4kNX9Bhjoy?77p6Mggn7XR|g z!NJn=u}{6btK;6-wiDjitKQz|3GZ_?xo$4x?X5l$^Slx-yf`@MDeYSkJM7)P?X)-c zbMJHR5jsoEb3FbD^d!h9Il06k$w%V902y-en5Qp30h-|5QE%_IczhlJQW*0*A6JG5 zr@1{4PR2Y3<8g9QmpB>!oKzh;EV2;uJcC>;)~&}p2Uf)T(AaCJmh}4K<+0<;K4b>@ zJMKN^IZfqp%yWvGG<-PS>pAtp;2K>0p_vPLF4KNAL$9v+onCH>Foi2$hJrDIy#6SCDa4_b1vwsQjgm{4r z$KMs$=@LtKO#J5pOFcmBHE--#toq^jf8gfo^}HGL9O;c7@gDl+Q0*-Rd(XBbmYCJi z{ojH>j}AT4yIV-pYbx>`J>xy}?of`aiT55q$fbSW9Y^*-1b0&6Zfx2k+P@o>eVR%` zuk3TwpB?iI;7WCHq1Q9eTYWB8eWs^xF!o|k+zNKI+B$0LdEch~6h(K!+dKT_ZrC3D zP3igGx-$?w8UNxl%0;|i1CPMz+54>^tTYgi0T%z6Aj~rmPz@~p&w@~BAn*ctSSR#G zrVDYPsO4q&>qgBE2};btJ@!oK9RT6(9-wwmi~BBOYf~iX>B_Y z|F1s{4)T^R5HIi|_&35%ha(cpv-xAf8e00k_^(k->6Jz*^p-pzTk^y42f>PFFZ_QH z4GaE1+*>!$8$B0`#-;zeVs$%X(d~IVi=jj?@8k`5D{sJto3*ztjx6ko=a5_F+*yv$ zvvBSLu(J$Uo`qi#*3fSG9WWlQ@zzO|Vr-rC2s` zi?DiyakdwDZU;UE)=*&w;#7R;{Vkq6vFL@~=oizY7h(g(5@^~}6aNfayfN#H_-jb) zsrY8a`ij_KMP0?Zs@*exKHP~C+C7ir+RE7Z%Gg^~v*~$e_a6RIjZY=fdp?XfOW%?G zdsXcHs@VAz&@fnd%G>jj;$8AV^nDue+_JIa){2c4w^e8_?HTGJ{`eAk41HoqMB`Qp z`^Cdd#xD!_S0esY#MKzxJM}5R)lNPKXzgfrE)b}24l^(~Tf62-|ar zL4?fwjLiU@_@DR$wusk}ztS;obzbh@*tfH#6Rw%FV8%2;6VD3#>X8>ad|?%i{Ch3S zM`Wq00@Fk5N?U5GxJScOnlh@oU%DN#)rY)N8Ca_d-3c9*H%J8!#8ZWz9cA?{>{$H< zKK0k!7BP}PZ{l|XW%&m}NPjHvb6uq8LHzci(|wHe>@w>4VUnInpxaUQyo{ut8+4Zl zS1#yzNRu6ks4Uh2&mb2d#4<Qplxu$g7P7{}pn8QeW@i3# zigMMfK<>0So>r9yEU%~Wd?WveqLlv&@Mjgrw^ii}FjNBhIc^RNVBOIeFplCOHKsLm3KBn4BqUs%0@E5gh2eUXcrQcKGz#*4 z%y=D4yl0&#U@>gQ8zViO6z@}Md`v;oKe;#L zfhPr;&rlerNBn)FNb-m#`8+u5c_hcOP9e|7)}YYBF@>>u#GJ$2JSFjV0ZYH7y==iR zVN8j5ehy~o@|YTNSlS&B@J>M&;{WfFe2<-Ks0))J3ipcmArb#X#LtTOsEB_d;`c;+ zUc_0V9gY$4tdw@ijo`9s`SPosMRg6)j!4vbm207^WZt4Ehf41%UF0fR=qfFptrMK{ zOG+1&EGk*T8ryuB40qwRR%@`sS>`Hnl{kwcp=ihL&IJn>Em^W;wzH_Mt*gD*fGeBL zZbRd+a>IOPi1cFN2F;R;!O{tckZNAGD%Z7DddF+6!R7Zkc!e}UwOQXm!fM%Q$vO)x z8+Je88!YzS)GCI3m!L)oahhL;vgsWa%XtV4FCt+HSRMs}iwV+GlGLP=ehj)!(v7qT zMJFN7tSdo1M%FY-E~Vc_nhm$!iO8y)9nl4-0%+xrs@2g0pa6|sId4Voh%18MR zQuHT#H83pydjxzY08aUw1KDedJn}JI$aCe3TLBv>uSm+5oZ|$WK$!r}cVYZIV8n$3M~RVcSwNclmg2w6dQS~C3b<4 zcN4Jp;-@Sg;uSgHD@oT32?)|tApMM_mZnL)B}vQEq&^18fj&}Ml_oVFXimC5O==NH zYf0*cG^ve}RGTKX1*C^a>YHg&KbE9h(xhnN@b@I8DO*sFqRsqCVw-g=Z!-ncaktmv zrvwenE_(*`;RSC?+7`v0XfQf0$Bt#l#rP@r>gK6k3R1Zw?a@hONRZk<`VmPzl9C@m ze?rn9OUaa=p8|avo^Q%O>UrQTd>84bw#=CXXBoIS=d(H|_dg@&wGt07$#Tv~rVFO(SkBcbrVjkD%*uO`MDHLh zbxXQUr>EBVlc4{GwkCOb9%<`{F`t;25 zD!Tf`_$fu1Ci@4et7dTB1S*4=z9JCD%s)csI+qZu)m{&NHr>uo;9^2XI(|K+vWsDwT z%K9##e~6!DzdFXUw|)^unn>OX48U9Kbqe**W2vz1c+F1XpYXFhsgASk?VbZP;>ZF$ z?p%s^yk&3O^@!O}4kz>pQ5xzg>yJY51^kp6>K7(j_HOkXq3-4IL#e3;4U4&Ce)2S6 zY}P6C$e;R6ASUq?U8Xbvbn+AtrbLNKxXI_xKUtK?;~_fCI+dE}6dFiO{XTK<6kVqL z1fY{rmXA?mojR$NC=A?3DcBXoyy-Mmbm zz*Q|owbzqr#J6@LMzwF)idg5pak$QVn0UuhQxUuo!Q07s+4NshyPt!SPszXDsp#2J zEd2R#rQDV92Pjq6KMS8X;ipa%-q&;QIaK6?#-NDdW%6)TLza?Phx9BYt>u#o5e>8R=FF6l%1p;7o9f6PJJB&xsl)8a zvXH5c%27+lU!8kRt_9N~b%~-nAUTFrj#3@KqR?%lltsC!BR5wEvnGK?86M^WFX76^ zFU8Cf&*jQd3z5jC1jcYKrNf~!RF2YFa*MfI41WzOp=rbj?glxrbbR^v`MHxYb9D?M zcPV*gx%0u8m+%WfzObLGD<7G#mn-cRBv8V~QC5ZW#j^qpg+;JCDGwW4T_~J_EcZC+ zF=c3sjakOY44`M5tdx!-t_`_2p;X2ZwG{arzfdG5q$q(Kq-J754G`#1X7SRQJOie$ z%gu!sQ}Q@wYCeygSMlfysf;@yR81pO62aJXm$GV`OF3MNvLSO&~&(#}k|>#nEtxHX0XWFJduv7;B3b zitWbD9noSwODuM|hW=YS8r!1&Kr!|~3Ti`ZB+UM5HO%GGl}H0=zHmECZ1-&Ng#)e@ z%7KocSH95>+8XL=Y-Gr<*wY!=+!+Xi5gjJ8sw~?g`*pQQu~~BLqwR(E>n(Ff+26M1 z*>~D3S@v>UUe-;?iL9IK51<-uu@_hs+r%986N_bg}HKDZkBzNEh{Uc zZfYVkps9A3uyQ=jie;7}wA;&(*dxqDq?w2?a~@_?wRc;2mfC7>f+2OB%f{?$V4^rj zeNTlR+Z}R`?tMo8>4-C&?bav}}2@tZ-(g%aV;& zYqg*TO|s=8pD22X;PJYpvJ=j6K2{HEwp7CbvM-J%Me>Yic8<3zCqP ztsY;kXYKX1B^nE2hca%N(6z+5{*tU=?djw`g zX`w)yuRGvRMm7dJ!qN5=PG934(bf#&0qP2pbb^!gCL_avJG92Ie*0!>ZKh6}mE=PD zqQaAwN5YyHp^1=5L6!x&8(Xj@9mr6Yl4N>MUP{=+-u%+WV0))86wsu0?Qa6U+dXSr z)9SKzzQ!^#oBHz?D*x+U{5m`#9hq9o`~_*54@W}5j^?jiRyw=6kAJCwufx%=#~ZUU zTawr=n4vi*Xr?|~Qrsl>LM9w-Ff|FvT7M5saw;6_$9whC)@a<{1pue@Lm47IgPHbrlX!1FgqKim)DDkIN zq@@*~1oE+MJK_ezmv{83U1@2;sn!TG*;O-?vvr!Mwp5c-Lz)EY+0bsTD)rUSK&z^> zLBx$bu8sIQQlC<_k@*-lC+Ah2rb#eAXWM!Iw{JcU9mf-m>b!#SfJVGPg%em)vb z4CPs5K8q|sZhS1*u!(OMrlJe_vC%ijjVUQMF6Zj8T%mhiEEvgI&Oxz)DrY5c3YZIj z^^1zBa+yUpWt37eabA}ZuO{{dB=cJn`vH>iHYWECB;&JKruXeC-ulb;^vV2oCg1lb zni|Wx1^0?l!XWw2EC7CE1zq`0h3%KK=VwQl#R`>dujw^yK4(S0?;O z){+rlz-ZfZYEapz#J&zAO~vkDxt}8$Kbp~JWvM}BWAI&lCj3|?zsEGnsI;3ytbr%v z$FuH?_z7v>ACsKQEkfstMj{g1;gSPfK7{_7T1lOAc6M z#odx#o>+~;-7W$$Ifv0Wq#_&4;G#*&Sc`PB^!ue9`~|vb(sc*Nk6`pwD+P%2KpPPXs60jcnIrIf!S57lW3oRaG}EtEkd$ zSh=#+vrb!Av8>8NLP_3Yeq}`PlR22S;-)nf)s@Sce(HqV%}q02{kV;< za;8V>sTIi@4F`6}b2xBB25m9K@fdBGjmYyfjAwWxrolM1-{5Wa@hj!3x z@+-|6xW>#Ujc9b#q{B8H-+ zN-}1b7RxB7(E686Qj!h^Nj-SP?KT_}k~m2u{m7CeKB_Kq$8bgpKNN+z!kgRC$Pq_E zdfXyYG_wqKGFL}15^&*Ml6etdGjri(qN~LhZecF}<_-w!aU`Tu#P-r8Km&~yLP(gYKFKIX|TD%PBbdb?73W zixN|c1U@wlO8IV!o0GZ)Vg-k2%%%ssh-GvQ61n(E`96yq5bZ+5=AQFb^UJ8mh)&6nd zvFnK6gTx}|P4fJ^RC}rLn~M6GjA| zdAWWf&nL_m6-)gO1!-TlqkDie+L!Ar7sQf<QjoDe z&)0Fr>p7!t}msCxnPU1e?m048NkxBUba8^{G$Ffll`()Tn&39g_vspe*rR7`HTPn diff --git a/pthread_test/CDSPass/uninit.cc b/pthread_test/CDSPass/uninit.cc deleted file mode 100755 index f6b682f4ea56417a5e0d8eb53a7d3ec3eb5de0b7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21872 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 diff --git a/pthread_test/addr-satcycle.cc b/pthread_test/addr-satcycle.cc deleted file mode 100644 index a3d970b9..00000000 --- a/pthread_test/addr-satcycle.cc +++ /dev/null @@ -1,69 +0,0 @@ -/** - * @file addr-satcycle.cc - * @brief Address-based satisfaction cycle test - * - * This program has a peculiar behavior which is technically legal under the - * current C++ memory model but which is a result of a type of satisfaction - * cycle. We use this as justification for part of our modifications to the - * memory model when proving our model-checker's correctness. - */ - -#include -#include -#include - -#include "model-assert.h" - -using namespace std; - -atomic_int x[2], idx, y; - -int r1, r2, r3; /* "local" variables */ - -static void *a(void *obj) -{ - r1 = idx.load(memory_order_relaxed); - x[r1].store(0, memory_order_relaxed); - - /* Key point: can we guarantee that &x[0] == &x[r1]? */ - r2 = x[0].load(memory_order_relaxed); - y.store(r2); - return NULL; -} - -static void *b(void *obj) -{ - r3 = y.load(memory_order_relaxed); - idx.store(r3, memory_order_relaxed); - return NULL; -} - -int user_main(int argc, char **argv) -{ - pthread_t t1, t2; - - atomic_init(&x[0], 1); - atomic_init(&idx, 0); - atomic_init(&y, 0); - - printf("Main thread: creating 2 threads\n"); - pthread_create(&t1,NULL, &a, NULL); - pthread_create(&t2,NULL, &b, NULL); - - pthread_join(t1,NULL); - pthread_join(t2,NULL); - printf("Main thread is finished\n"); - - printf("r1 = %d\n", r1); - printf("r2 = %d\n", r2); - printf("r3 = %d\n", r3); - - /* - * This condition should not be hit because it only occurs under a - * satisfaction cycle - */ - bool cycle = (r1 == 1 && r2 == 1 && r3 == 1); - MODEL_ASSERT(!cycle); - - return 0; -} diff --git a/pthread_test/bug1.cc b/pthread_test/bug1.cc deleted file mode 100644 index 16d2b594..00000000 --- a/pthread_test/bug1.cc +++ /dev/null @@ -1,74 +0,0 @@ -/** - * @file iriw.cc - * @brief Independent read and independent write test - */ - -#include -#include -#include - -#define N 14 -//#include "wildcard.h" -//#include "model-assert.h" - -using namespace std; - -std::atomic_int x, y; -int r1, r2, r3, r4; /* "local" variables */ - -static void *a(void *obj) -{ -// x.store(1, memory_order_seq_cst); - return NULL; -} - - -static void *b(void *obj) -{ - y.store(1, memory_order_seq_cst); - return NULL; -} - -static void *c(void *obj) -{ - r1 = x.load(memory_order_acquire); - r2 = y.load(memory_order_seq_cst); - return NULL; -} - -static void *d(void *obj) -{ - r3 = y.load(memory_order_acquire); - r4 = x.load(memory_order_seq_cst); - return NULL; -} - - -int user_main(int argc, char **argv) -{ - pthread_t threads[20]; - - atomic_init(&x, 0); - atomic_init(&y, 0); - - printf("Main thread: creating %d threads\n", N); - - for (int i = 0; i< N; i++) - pthread_create(&threads[i],NULL, &a, NULL); - - for (int i=0; i - -#include "pthread.h" -#include "librace.h" -#include "stdatomic.h" -#include "mutex.h" -#include - -cdsc::mutex * m; -cdsc::condition_variable *v; -int shareddata; - -static void *a(void *obj) -{ - m->lock(); - while(load_32(&shareddata)==0) - v->wait(*m); - m->unlock(); - return NULL; -} - -static void *b(void *obj) -{ - m->lock(); - store_32(&shareddata, (unsigned int) 1); - v->notify_all(); - m->unlock(); - return NULL; -} - -int user_main(int argc, char **argv) -{ - pthread_t t1, t2; - store_32(&shareddata, (unsigned int) 0); - m=new cdsc::mutex(); - v=new cdsc::condition_variable(); - - pthread_create(&t1,NULL, &a, NULL); - pthread_create(&t2,NULL, &b, NULL); - - pthread_join(t1,NULL); - pthread_join(t2,NULL); - return 0; -} diff --git a/pthread_test/deadlock.cc b/pthread_test/deadlock.cc deleted file mode 100644 index 43828192..00000000 --- a/pthread_test/deadlock.cc +++ /dev/null @@ -1,47 +0,0 @@ -#include -#include - -#include "librace.h" - -pthread_mutex_t x; -pthread_mutex_t y; -uint32_t shared = 0; - -static void *a(void *obj) -{ - pthread_mutex_lock(&x); - pthread_mutex_lock(&y); - printf("shared = %u\n", load_32(&shared)); - pthread_mutex_unlock(&y); - pthread_mutex_unlock(&x); - return NULL; -} - -static void *b(void *obj) -{ - pthread_mutex_lock(&y); - pthread_mutex_lock(&x); - store_32(&shared, 16); - printf("write shared = 16\n"); - pthread_mutex_unlock(&x); - pthread_mutex_unlock(&y); - return NULL; -} - -int user_main(int argc, char **argv) -{ - pthread_t t1, t2; - - pthread_mutex_init(&x, NULL); - pthread_mutex_init(&y, NULL); - - printf("Main thread: creating 2 threads\n"); - pthread_create(&t1,NULL, &a, NULL); - pthread_create(&t2,NULL, &b, NULL); - - pthread_join(t1,NULL); - pthread_join(t2,NULL); - printf("Main thread is finished\n"); - - return 0; -} diff --git a/pthread_test/insanesync.cc b/pthread_test/insanesync.cc deleted file mode 100644 index bcc34ad7..00000000 --- a/pthread_test/insanesync.cc +++ /dev/null @@ -1,72 +0,0 @@ -#include -#include -#include -#include - -#include "librace.h" -#include "model-assert.h" - -using namespace std; - -atomic_int x, y; -atomic_intptr_t z, z2; - -int r1, r2, r3; /* "local" variables */ - -/** - This example illustrates a self-satisfying cycle involving - synchronization. A failed synchronization creates the store that - causes the synchronization to fail. - - The C++11 memory model nominally allows r1=0, r2=1, r3=5. - - This example is insane, we don't support that behavior. -*/ - - -static void *a(void *obj) -{ - z.store((intptr_t)&y, memory_order_relaxed); - r1 = y.fetch_add(1, memory_order_release); - z.store((intptr_t)&x, memory_order_relaxed); - r2 = y.fetch_add(1, memory_order_release); - return NULL; -} - - -static void *b(void *obj) -{ - r3 = y.fetch_add(1, memory_order_acquire); - intptr_t ptr = z.load(memory_order_relaxed); - z2.store(ptr, memory_order_relaxed); - return NULL; -} - -static void *c(void *obj) -{ - atomic_int *ptr2 = (atomic_int *)z2.load(memory_order_relaxed); - (*ptr2).store(5, memory_order_relaxed); - return NULL; -} - -int user_main(int argc, char **argv) -{ - pthread_t t1, t2, t3; - - atomic_init(&x, 0); - atomic_init(&y, 0); - atomic_init(&z, (intptr_t) &x); - atomic_init(&z2, (intptr_t) &x); - - pthread_create(&t1,NULL, &a, NULL); - pthread_create(&t2,NULL, &b, NULL); - pthread_create(&t3,NULL, &c, NULL); - - pthread_join(t1,NULL); - pthread_join(t2,NULL); - pthread_join(t3,NULL); - - printf("r1=%d, r2=%d, r3=%d\n", r1, r2, r3); - - return 0; -} diff --git a/pthread_test/iriw.cc b/pthread_test/iriw.cc deleted file mode 100644 index 42ba9364..00000000 --- a/pthread_test/iriw.cc +++ /dev/null @@ -1,71 +0,0 @@ -/** - * @file iriw.cc - * @brief Independent read and independent write test - */ - -#include -#include -#include - -#include "wildcard.h" -#include "model-assert.h" - -using namespace std; - -atomic_int x, y; -int r1, r2, r3, r4; /* "local" variables */ - -static void *a(void *obj) -{ - x.store(1, memory_order_seq_cst); - return new int(1); -} - -static void *b(void *obj) -{ - y.store(1, memory_order_seq_cst); - return new int(2); -} - -static void *c(void *obj) -{ - r1 = x.load(memory_order_acquire); - r2 = y.load(memory_order_seq_cst); - return new int(3); -} - -static void *d(void *obj) -{ - r3 = y.load(memory_order_acquire); - r4 = x.load(memory_order_seq_cst); - return new int(4); -} - - -int user_main(int argc, char **argv) -{ - pthread_t t1, t2, t3, t4; - - atomic_init(&x, 0); - atomic_init(&y, 0); - - printf("Main thread: creating 4 threads\n"); - pthread_create(&t1,NULL, &a, NULL); - pthread_create(&t2,NULL, &b, NULL); - pthread_create(&t3,NULL, &c, NULL); - pthread_create(&t4,NULL, &d, NULL); - - pthread_join(t1,NULL); - pthread_join(t2,NULL); - pthread_join(t3,NULL); - pthread_join(t4,NULL); - printf("Main thread is finished\n"); - - /* - * This condition should not be hit if the execution is SC */ - bool sc = (r1 == 1 && r2 == 0 && r3 == 1 && r4 == 0); - printf("r1 = %d, r2 = %d, r3 = %d and r4 = %d\n", r1, r2, r3, r4); - MODEL_ASSERT(!sc); - - return 0; -} diff --git a/pthread_test/iriw_wildcard.cc b/pthread_test/iriw_wildcard.cc deleted file mode 100644 index adea420f..00000000 --- a/pthread_test/iriw_wildcard.cc +++ /dev/null @@ -1,70 +0,0 @@ -/** - * @file iriw.cc - * @brief Independent read and independent write test - */ - -#include -#include -#include - -#include "wildcard.h" -#include "model-assert.h" - -using namespace std; - -atomic_int x, y; -int r1, r2, r3, r4; /* "local" variables */ - -static void *a(void *obj) -{ - x.store(1, wildcard(1)); - return NULL; -} - -static void *b(void *obj) -{ - y.store(1, wildcard(2)); - return NULL; -} - -static void *c(void *obj) -{ - r1 = x.load(wildcard(3)); - r2 = y.load(wildcard(4)); - return NULL; -} - -static void *d(void *obj) -{ - r3 = y.load(wildcard(5)); - r4 = x.load(wildcard(6)); - return NULL; -} - - -int user_main(int argc, char **argv) -{ - pthread_t t1, t2, t3, t4; - - atomic_init(&x, 0); - atomic_init(&y, 0); - - printf("Main thread: creating 4 threads\n"); - pthread_create(&t1,NULL, &a, NULL); - pthread_create(&t2,NULL, &b, NULL); - pthread_create(&t3,NULL, &c, NULL); - pthread_create(&t4,NULL, &d, NULL); - - pthread_join(t1,NULL); - pthread_join(t2,NULL); - pthread_join(t3,NULL); - pthread_join(t4,NULL); - printf("Main thread is finished\n"); - - /* - * This condition should not be hit if the execution is SC */ - bool sc = (r1 == 1 && r2 == 0 && r3 == 1 && r4 == 0); - //MODEL_ASSERT(!sc); - - return 0; -} diff --git a/pthread_test/mo-satcycle.cc b/pthread_test/mo-satcycle.cc deleted file mode 100644 index d0a60559..00000000 --- a/pthread_test/mo-satcycle.cc +++ /dev/null @@ -1,71 +0,0 @@ -/** - * @file mo-satcycle.cc - * @brief MO satisfaction cycle test - * - * This program has a peculiar behavior which is technically legal under the - * current C++ memory model but which is a result of a type of satisfaction - * cycle. We use this as justification for part of our modifications to the - * memory model when proving our model-checker's correctness. - */ - -#include -#include -#include - -#include "model-assert.h" - -using namespace std; - -atomic_int x, y; -int r0, r1, r2, r3; /* "local" variables */ - -static void *a(void *obj) -{ - y.store(10, memory_order_relaxed); - x.store(1, memory_order_release); - return NULL; -} - -static void *b(void *obj) -{ - r0 = x.load(memory_order_relaxed); - r1 = x.load(memory_order_acquire); - y.store(11, memory_order_relaxed); - return NULL; -} - -static void *c(void *obj) -{ - r2 = y.load(memory_order_relaxed); - r3 = y.load(memory_order_relaxed); - if (r2 == 11 && r3 == 10) - x.store(0, memory_order_relaxed); - return NULL; -} - -int user_main(int argc, char **argv) -{ - pthread_t t1, t2, t3; - - atomic_init(&x, 0); - atomic_init(&y, 0); - - printf("Main thread: creating 3 threads\n"); - pthread_create(&t1,NULL, &a, NULL); - pthread_create(&t2,NULL, &b, NULL); - pthread_create(&t3,NULL, &c, NULL); - - pthread_join(t1,NULL); - pthread_join(t2,NULL); - pthread_join(t3,NULL); - printf("Main thread is finished\n"); - - /* - * This condition should not be hit because it only occurs under a - * satisfaction cycle - */ - bool cycle = (r0 == 1 && r1 == 0 && r2 == 11 && r3 == 10); - MODEL_ASSERT(!cycle); - - return 0; -} diff --git a/pthread_test/normal_compile.sh b/pthread_test/normal_compile.sh deleted file mode 100755 index 56cba5a5..00000000 --- a/pthread_test/normal_compile.sh +++ /dev/null @@ -1,9 +0,0 @@ -#g++ -o test.o test.cc -Wall -g -O3 -I.. -I../include -L.. -lmodel - -export LD_LIBRARY_PATH=/scratch/random-fuzzer - -if [ "$2" != "" ]; then - g++ -o "$1.o" $1 -Wall -g -O3 -I.. -I../include -L.. -lmodel -else - gcc -o "$1.o" $1 -Wall -g -O3 -I.. -I../include -L.. -lmodel -fi diff --git a/pthread_test/protect/mutex_test.cc b/pthread_test/protect/mutex_test.cc deleted file mode 100644 index 9a84b1d1..00000000 --- a/pthread_test/protect/mutex_test.cc +++ /dev/null @@ -1,41 +0,0 @@ -#include - -#include "threads.h" -#include "librace.h" -#include "stdatomic.h" -#include - -int shareddata; -pthread_mutex_t m; - -static void* a(void *obj) -{ - int i; - for(i=0;i<2;i++) { - if ((i%2)==0) { - pthread_mutex_lock(&m); - store_32(&shareddata,(unsigned int)i); - printf("shareddata: %d\n", shareddata); - pthread_mutex_unlock(&m); - } else { - while(!pthread_mutex_trylock(&m)) - thrd_yield(); - store_32(&shareddata,(unsigned int)i); - printf("shareddata: %d\n", shareddata); - pthread_mutex_unlock(&m); - } - } -} - -int user_main(int argc, char **argv) -{ - thrd_t t1, t2; - pthread_mutex_init(&m, NULL); - - thrd_create(&t1, (thrd_start_t)&a, NULL); - thrd_create(&t2, (thrd_start_t)&a, NULL); - - thrd_join(t1); - thrd_join(t2); - return 0; -} diff --git a/pthread_test/pthread_mutex_test.cc b/pthread_test/pthread_mutex_test.cc deleted file mode 100644 index 55bea220..00000000 --- a/pthread_test/pthread_mutex_test.cc +++ /dev/null @@ -1,69 +0,0 @@ -#include -#include -#define NTHREADS 2 -void *thread_function(void *); -//pthread_mutex_t mutex1; - -int counter=0; - -class Box { -public: -// int counter; - - static Box& getInstance() { - static Box instance; - return instance; - } - - void addone() { - pthread_mutex_lock(&pool_mutex); - counter++; - pthread_mutex_unlock(&pool_mutex); - } - -private: - Box() { - pthread_mutex_init(&pool_mutex, NULL); - counter = 0; - } - pthread_mutex_t pool_mutex; -}; - -int user_main(int argv, char **argc) -{ -// void *dummy = NULL; -// pthread_mutex_init(&mutex1, NULL); /* PTHREAD_MUTEX_INITIALIZER;*/ - -// pthread_t thread_id[NTHREADS]; -// int i, j; - - Box::getInstance().addone(); - -/* for(i=0; i < NTHREADS; i++) - { - pthread_create( &thread_id[i], NULL, &thread_function, NULL ); - } - - for(j=0; j < NTHREADS; j++) - { - pthread_join( thread_id[j], NULL); - } -*/ - - printf("Final counter value: %d\n", counter); - /* - for (i=0;i -#include -#include -#include - -#define N 4 -//#include "wildcard.h" -//#include "model-assert.h" - -using namespace std; - -atomic x(1); -atomic y(1); - -int r1, r2, r3, r4; /* "local" variables */ - -static void *a(void *obj) -{ - x.store(1, memory_order_relaxed); - y.store(1, memory_order_relaxed); - - return new int(1); -} - - -static void *b(void *obj) -{ - y.store(1, memory_order_relaxed); - - return new int(2); -} - -static void *c(void *obj) -{ - r1 = x.load(memory_order_acquire); - r2 = y.load(memory_order_relaxed); - - return new int(3); -} - -static void *d(void *obj) -{ - r3 = y.load(memory_order_acquire); - r4 = x.load(memory_order_relaxed); - - return new int(4); -} - - -int main(int argc, char **argv) -{ - printf("Main thread starts\n"); - - x.store(2, memory_order_relaxed); - y.store(2, memory_order_relaxed); - - r1 = x.load(memory_order_relaxed); - printf("%d\n", r1); - -// x.compare_exchange_strong(r1, r2); -// r3 = x.load(memory_order_relaxed); - -// printf("%d\n", r3); - - printf("Main thread is finished\n"); - - return 0; -} diff --git a/pthread_test/uninit.cc b/pthread_test/uninit.cc deleted file mode 100644 index 075e2acf..00000000 --- a/pthread_test/uninit.cc +++ /dev/null @@ -1,57 +0,0 @@ -/** - * @file uninit.cc - * @brief Uninitialized loads test - * - * This is a test of the "uninitialized loads" code. While we don't explicitly - * initialize y, this example's synchronization pattern should guarantee we - * never see it uninitialized. - */ -#include -#include -#include - -//#include "librace.h" - -std::atomic_int x; -std::atomic_int y; - -static void *a(void *obj) -{ - int flag = x.load(std::memory_order_acquire); - printf("flag: %d\n", flag); - if (flag == 2) - printf("Load: %d\n", y.load(std::memory_order_relaxed)); - return NULL; -} - -static void *b(void *obj) -{ - printf("fetch_add: %d\n", x.fetch_add(1, std::memory_order_relaxed)); - return NULL; -} - -static void *c(void *obj) -{ - y.store(3, std::memory_order_relaxed); - x.store(1, std::memory_order_release); - return NULL; -} - -int user_main(int argc, char **argv) -{ - pthread_t t1, t2, t3; - - std::atomic_init(&x, 0); - - printf("Main thread: creating 3 threads\n"); - pthread_create(&t1,NULL, &a, NULL); - pthread_create(&t2,NULL, &b, NULL); - pthread_create(&t3,NULL, &c, NULL); - - pthread_join(t1,NULL); - pthread_join(t2,NULL); - pthread_join(t3,NULL); - printf("Main thread is finished\n"); - - return 0; -} -- 2.34.1