Merge branch 'charm' of charmgit:charm into charm
authorGengbin Zheng <gzheng@illinois.edu>
Tue, 23 Mar 2010 21:48:29 +0000 (16:48 -0500)
committerGengbin Zheng <gzheng@illinois.edu>
Tue, 23 Mar 2010 21:48:29 +0000 (16:48 -0500)
examples/charm++/satisfiability/Makefile
examples/charm++/satisfiability/Solver.C
examples/charm++/satisfiability/Solver.h
examples/charm++/satisfiability/SolverTypes.h
examples/charm++/satisfiability/example_50.cnf [new file with mode: 0644]
examples/charm++/satisfiability/example_9000.cnf [new file with mode: 0644]
examples/charm++/satisfiability/example_simple.cnf
examples/charm++/satisfiability/main.C
examples/charm++/satisfiability/verify/main.C [new file with mode: 0644]
src/arch/lapi/conv-mach-smp.sh
src/conv-core/cpuaffinity.c

index ae22ab6761dcc08809c9dc96295b7c5c7814634d..ae849affef24d737c1bff09d27f47f09dbdc8de1 100644 (file)
@@ -10,7 +10,7 @@ sat : main.o Solver.o
 main.o : main.C main.decl.h main.def.h 
        $(CHARMC) -o main.o main.C 
 
-Solver.o : Solver.C SolverTypes.h
+Solver.o : Solver.C SolverTypes.h Solver.h
        $(CHARMC) -o Solver.o Solver.C
 
 #util.o : util.C
index 3cdc12023b81bc5873d732776e62815369e68323..d79246ce7ca659c09a735be00764f8e0aa850c74 100644 (file)
@@ -11,7 +11,7 @@ extern int grainsize;
 
 SolverState::SolverState()
 {
-
+    unsolved_clauses = 0; 
     var_frequency = 0;
 }
 
@@ -20,6 +20,10 @@ inline int SolverState::nVars()
     return var_frequency; 
 }
 
+int SolverState::clausesSize()
+{
+    return clauses.size();
+}
 Var SolverState::newVar(bool sign, bool dvar)
 {
     int v = nVars();
@@ -32,6 +36,33 @@ void SolverState::attachClause(Clause& c)
 
 }
 
+
+int SolverState::unsolvedClauses()
+{
+    int unsolved = 0;
+    for(int i=0; i< clauses.size(); i++)
+    {
+        if(clauses[i].size() > 0)
+            unsolved++;
+    }
+
+    return unsolved;
+}
+
+void SolverState::printSolution()
+{
+    for(int _i=0; _i<var_size; _i++)
+    {
+        if(occurrence[_i] == -2)
+            CkPrintf(" TRUE ");
+        else if(occurrence[_i] == -1)
+            CkPrintf(" FALSE ");
+        else
+            CkPrintf(" Anything ");
+    }
+}
+
 /* add clause, before adding, check unit conflict */
 bool SolverState::addClause(CkVec<Lit>& ps)
 {
@@ -84,6 +115,19 @@ bool SolverState::addClause(CkVec<Lit>& ps)
     }
     clauses.push_back(Clause());
     clauses[clauses.size()-1].attachdata(ps, false);
+    unsolved_clauses++;
+    // build the linklist for each literal pointing to the clause, where the literal occurs
+    for(int i=0; i< ps.size(); i++)
+    {
+        Lit lit = ps[i];
+
+        if(toInt(lit) > 0)
+            whichClauses[2*toInt(lit)-2].push_back(clauses.size()-1);
+        else
+            whichClauses[-2*toInt(lit)-1].push_back(clauses.size()-1);
+
+    }
+
     return true;
 }
 
@@ -101,269 +145,209 @@ void SolverState::assignclause(CkVec<Clause>& cls )
 Solver::Solver(SolverState* state_msg)
 {
 
-    CkVec<Clause> next_clauses;
     /* Which variable get assigned  */
-    Lit assigned_var = state_msg->assigned_lit;
+    Lit lit = state_msg->assigned_lit;
 #ifdef DEBUG    
-    CkPrintf("\n\nNew chare: literal = %d, occurrence size=%d, level=%d \n", toInt(assigned_var), state_msg->occurrence.size(), state_msg->level);
+    CkPrintf("\n\nNew chare: literal = %d, occurrence size=%d, level=%d \n", toInt(lit), state_msg->occurrence.size(), state_msg->level);
 #endif    
     SolverState *next_state = copy_solverstate(state_msg);
     
     //Unit clauses
-    map<int, int>  unit_clauses;
-
     /* use this value to propagate the clauses */
-    for(int i=0; i<(state_msg->clauses).size(); i++)
-    {
-        Clause cl = ((state_msg->clauses)[i]);
-        CkVec<Lit> new_clause;
-        bool satisfied = false;
-#ifdef DEBUG    
-//        CkPrintf("\n");
-#endif
-        for(int j=0; j<cl.size();  j++)
-        {
-            Lit lit = cl[j];
-#ifdef DEBUG    
-        //    CkPrintf("%d   ", toInt(lit));
-#endif
-            if(lit == assigned_var)
-            {
-                satisfied = true;
-                break;
-            }else if( lit == ~(assigned_var))
-            {
-            } else
-            {
-                new_clause.push_back(lit);
-            }
-        }
-        if(satisfied)
-        {
-            for(int j=0; j<cl.size();  j++)
-            {
-                Lit lit = cl[j];
-                if(lit != assigned_var)
-                {
-                    int int_lit = toInt(lit);
-                    (next_state->occurrence[abs(int_lit)-1])--;
-                    if(int_lit > 0)
-                        (next_state->positive_occurrence[abs(int_lit)-1])--;
-                }
-            }
-        } else if(new_clause.size() == 0 )
-        {
-        
-            /* conflict */
-            return;
-        }else if(new_clause.size() == 1)
-        {
-            /*unit clause */
-            Lit lit = new_clause[0];
-            if(unit_clauses.find(-toInt(lit)) !=unit_clauses.end())
-            {
-#ifdef DEBUG
-                CkPrintf("conflict detected by unit progation, size=%d\n", unit_clauses.size());
-#endif
-                return;
-                /* conflict*/
-            }else
-            {
-                (unit_clauses[toInt(lit)])++;
-                int int_lit = toInt(lit);
-                int_lit>0?state_msg->occurrence[int_lit-1]=-2:state_msg->occurrence[-int_lit-1]=-1;
-#ifdef DEBUG
-                CkPrintf(" unit clause %d=%d, size=%D\n", toInt(lit), unit_clauses[toInt(lit)], unit_clauses.size());
-#endif
-            }
-        }
-        else if(new_clause.size() > 1)
-        {
-            Clause clsc(new_clause, false);
-            next_clauses.push_back(clsc);
-        }
-    } /* all clauses are checked*/
+    // deal with the clauses where this literal is
+    int _unit_ = -1;
    
-    if(next_clauses.size() == 0)
+unit_propagation:while(1){
+    int pp_ = 1;
+    int pp_i_ = 2;
+    int pp_j_ = 1;
+
+    if(toInt(lit) < 0)
     {
-        /* one solution is found*/
-        /* print the solution*/
-        CkPrintf("one solutions found level=%d parallel\n", state_msg->level);
-       /* 
-        for(int _i=0; _i<state_msg->var_size; _i++)
-        {
-            if(state_msg->occurrence[_i] == -2)
-                CkPrintf(" TRUE ");
-            else if(state_msg->occurrence[_i] == -1)
-                CkPrintf(" FALSE ");
-            else
-                CkPrintf(" Anything ");
-        }*/
-        CkPrintf("\n");
-        mainProxy.done();//highest priority
-        //CkExit();
-        return;
-    }else
+        pp_ = -1;
+        pp_i_ = 1;
+        pp_j_ = 2;
+    }
+
+    next_state->occurrence[pp_*toInt(lit)-1] = -pp_i_;
+    
+    //CkPrintf(" index=%d, total size=%d, original msg size=%d\n", pp_*2*toInt(lit)-pp_i_, next_state->whichClauses.size(), state_msg->whichClauses.size());
+
+    CkVec<int> &inClauses = next_state->whichClauses[pp_*2*toInt(lit)-pp_i_];
+    CkVec<int> &inClauses_opposite = next_state->whichClauses[pp_*2*toInt(lit)-pp_j_];
+
+    // literal with same sign, remove all these clauses
+    for(int j=0; j<inClauses.size(); j++)
     {
-        /* make a decision and then fire new tasks */
-        /* if there is unit clause, should choose these first??? TODO */
-        /* TODO which variable to pick up */
-        /*unit clause literal and also which occurrs most times */
-        while(!unit_clauses.empty())
+        int cl_index = inClauses[j];
+
+        Clause& cl_ = next_state->clauses[cl_index];
+        //for all the literals in this clauses, the occurrence decreases by 1
+        for(int k=0; k< cl_.size(); k++)
         {
-           //CkPrintf(" parallel propagation unit clauses size=%d, non unit size=%d, assigned var=%d\n", unit_clauses.size(), next_clauses.size(), toInt(assigned_var));
-            int first_unit = (*(unit_clauses.begin())).first;
-           //assign this variable
-            for(int _i=0; _i<next_clauses.size(); _i++)
+            Lit lit_ = cl_[k];
+            if(toInt(lit_) == toInt(lit))
+                continue;
+            next_state->occurrence[abs(toInt(lit_)) - 1]--;
+            if(toInt(lit_) > 0)
             {
-                Clause& cl = next_clauses[_i];
-               
-                //reduce the clause
-                for(int j=0; j<cl.size(); j++)
+                next_state->positive_occurrence[toInt(lit_)-1]--;
+                //remove the clause index for the literal
+                for(int _i = 0; _i<next_state->whichClauses[2*toInt(lit_)-2].size(); _i++)
                 {
-                    Lit lit = cl[j];
-                    if(toInt(lit) == first_unit)//this clause goes away
-                    {
-                        for(int jj=0; jj<cl.size(); jj++)
-                        {
-                            Lit lit_2 = cl[jj];
-                            (next_state->occurrence[abs(toInt(lit_2))-1])--; 
-                            if(toInt(lit_2) > 0)
-                                (next_state->positive_occurrence[abs(toInt(lit_2))-1])--; 
-                        }
-                        next_clauses.remove(_i);
-                        _i--;
-                       break; 
-                    }else if (toInt(lit) == -first_unit)
+                    if(next_state->whichClauses[2*toInt(lit_)-2][_i] == cl_index)
                     {
-                        cl.remove(j);
-                        j--;
+                        next_state->whichClauses[2*toInt(lit_)-2].remove(_i);
+                        break;
                     }
                 }
-                if(cl.size()==0){ // conflict
-                    return;
-                }else if(cl.size() == 1)// new unit clause
+            }else
+            {
+                for(int _i = 0; _i<next_state->whichClauses[-2*toInt(lit_)-1].size(); _i++)
                 {
-                    unit_clauses[toInt(cl[0])]++;
-                
-                    next_clauses.remove(_i);
-                    _i--;
+                    if(next_state->whichClauses[-2*toInt(lit_)-1][_i] == cl_index)
+                    {
+                        next_state->whichClauses[-2*toInt(lit_)-1].remove(_i);
+                        break;
+                    }
                 }
             }
-            /*remove this unit clause */
-            unit_clauses.erase(unit_clauses.begin());
         }
+            next_state->clauses[cl_index].resize(0);
 
-        }
+    }
+   
+    for(int j=0; j<inClauses_opposite.size(); j++)
+    {
+        int cl_index_ = inClauses_opposite[j];
+        Clause& cl_neg = next_state->clauses[cl_index_];
+        cl_neg.remove(-toInt(lit));
+        
+        //becomes a unit clause
+         if(cl_neg.size() == 1)
+         {
+             next_state->unit_clause_index.push_back(cl_index_);
+         }else if (cl_neg.size() == 0)
+         {
+                return;
+         }
+    }
+
+
+    _unit_++;
+    if(_unit_ == next_state->unit_clause_index.size())
+        break;
+    Clause cl = next_state->clauses[next_state->unit_clause_index[_unit_]];
+
+    while(cl.size() == 0){
+        _unit_++;
+        if(_unit_ == next_state->unit_clause_index.size())
+            break;
+        cl = next_state->clauses[next_state->unit_clause_index[_unit_]];
+        
+    };
+
+    if(_unit_ == next_state->unit_clause_index.size())
+        break;
+    lit = cl[0];
+    }
+    /***************/
 
-    if(next_clauses.size() == 0)
+    int unsolved = next_state->unsolvedClauses();
+    if(unsolved == 0)
     {
-        CkPrintf(" one solutions found after propagation \n");
+        CkPrintf("One solution found in parallel processing \n");
+        
+#ifdef SOLUTION
+        next_state->printSolution();
+#endif
+
         mainProxy.done();
-        //CkExit();
         return;
     }
-        int max_index = get_max_element(next_state->occurrence);
+    int max_index = get_max_element(next_state->occurrence);
 #ifdef DEBUG
-        CkPrintf("max index = %d\n", max_index);
+    CkPrintf("max index = %d\n", max_index);
 #endif
-        if(next_state->occurrence[max_index] <=0)
-        {
-            CkPrintf("Unsatisfiable\n");
-            mainProxy.done();
-            //CkExit();
-            return;
-        }
-
-
-        //if() left literal unassigned is larger than a grain size, parallel 
-        /* When we start sequential 3SAT Grainsize problem*/
-        next_state->assignclause(next_clauses);
-        next_state->var_size = state_msg->var_size;
-
-        SolverState *new_msg2 = copy_solverstate(next_state);;
-        new_msg2->var_size = state_msg->var_size;
-
-        next_state->level = state_msg->level+1;
-       
+    //if() left literal unassigned is larger than a grain size, parallel 
+    ///* When we start sequential 3SAT Grainsize problem*/
+   
+    /* the other branch */
+    SolverState *new_msg2 = copy_solverstate(next_state);;
+    new_msg2->var_size = state_msg->var_size;
 
-        int lower = state_msg->lower;
-        int higher = state_msg->higher;
-        int middle = (lower+higher)/2;
-        int positive_max = next_state->positive_occurrence[max_index];
-        if(positive_max >= next_state->occurrence[max_index] - positive_max)
-        {
-            next_state->assigned_lit = Lit(max_index+1);
-            next_state->occurrence[max_index] = -2;
-        }
-        else
-        {
-            next_state->assigned_lit = Lit(-max_index-1);
-            next_state->occurrence[max_index] = -1;
-        }
-        bool satisfiable_1 = true;
-        bool satisfiable_0 = true;
+    next_state->level = state_msg->level+1;
 
-        if(next_state->clauses.size() > grainsize)
-        {
-            next_state->lower = lower + 1;
-            next_state->higher = middle;
-            *((int *)CkPriorityPtr(next_state)) = lower+1;
-            CkSetQueueing(next_state, CK_QUEUEING_IFIFO);
-            CProxy_Solver::ckNew(next_state);
-        }
-        else //sequential
-        {
-            satisfiable_1 = seq_solve(next_state);
-            if(satisfiable_1)
-            {
-                CkPrintf(" One solutions found by sequential algorithm\n");
-                mainProxy.done();
-                //CkExit();
-                return;
-            }
-        }
+    int lower = state_msg->lower;
+    int higher = state_msg->higher;
+    int middle = (lower+higher)/2;
+    int positive_max = next_state->positive_occurrence[max_index];
+    if(positive_max >= next_state->occurrence[max_index] - positive_max)
+    {
+        next_state->assigned_lit = Lit(max_index+1);
+        next_state->occurrence[max_index] = -2;
+    }
+    else
+    {
+        next_state->assigned_lit = Lit(-max_index-1);
+        next_state->occurrence[max_index] = -1;
+    }
+    bool satisfiable_1 = true;
+    bool satisfiable_0 = true;
 
-        new_msg2->level = state_msg->level+1;
-        if(positive_max >= new_msg2->occurrence[max_index] - positive_max)
-        {
-            new_msg2->assigned_lit = Lit(-max_index-1);
-            new_msg2->occurrence[max_index] = -1;
-        }
-        else
-        {
-            new_msg2->assigned_lit = Lit(max_index+1);
-            new_msg2->occurrence[max_index] = -2;
-        }
-        if(new_msg2->clauses.size() > grainsize)
+    if(unsolved > grainsize)
+    {
+        next_state->lower = lower + 1;
+        next_state->higher = middle;
+        *((int *)CkPriorityPtr(next_state)) = lower+1;
+        CkSetQueueing(next_state, CK_QUEUEING_IFIFO);
+        CProxy_Solver::ckNew(next_state);
+    }
+    else //sequential
+    {
+        satisfiable_1 = seq_solve(next_state);
+        if(satisfiable_1)
         {
-
-            new_msg2->lower = middle + 1;
-            new_msg2->higher = higher-1;
-            *((int *)CkPriorityPtr(new_msg2)) = middle+1;
-            CkSetQueueing(new_msg2, CK_QUEUEING_IFIFO);
-            CProxy_Solver::ckNew(new_msg2);
+            CkPrintf(" One solutions found by sequential algorithm\n");
+            mainProxy.done();
+            return;
         }
-        else
-        {
-            satisfiable_0 = seq_solve(new_msg2);
+    }
 
-            if(satisfiable_0)
-            {
-                CkPrintf(" One solutions found by sequential algorithm\n");
-                mainProxy.done();
-                //CkExit();
-                return;
-            }
+    new_msg2->level = state_msg->level+1;
+    if(positive_max >= new_msg2->occurrence[max_index] - positive_max)
+    {
+        new_msg2->assigned_lit = Lit(-max_index-1);
+        new_msg2->occurrence[max_index] = -1;
+    }
+    else
+    {
+        new_msg2->assigned_lit = Lit(max_index+1);
+        new_msg2->occurrence[max_index] = -2;
+    }
+    unsolved = new_msg2->unsolvedClauses();
+    if(unsolved > grainsize)
+    {
 
-        }
+        new_msg2->lower = middle + 1;
+        new_msg2->higher = higher-1;
+        *((int *)CkPriorityPtr(new_msg2)) = middle+1;
+        CkSetQueueing(new_msg2, CK_QUEUEING_IFIFO);
+        CProxy_Solver::ckNew(new_msg2);
+    }
+    else
+    {
+        satisfiable_0 = seq_solve(new_msg2);
 
-        if(!satisfiable_1 && !satisfiable_0)
+        if(satisfiable_0)
         {
-            CkPrintf("Unsatisfiable through sequential\n");
+            CkPrintf(" One solutions found by sequential algorithm\n");
             mainProxy.done();
-            //CkExit();
+            return;
         }
+
+    }
+
 }
 
 /* Which literals are already assigned, which is assigned this interation, the unsolved clauses */
@@ -373,10 +357,9 @@ Solver::Solver(SolverState* state_msg)
 long long int computes = 0;
 bool Solver::seq_solve(SolverState* state_msg)
 {
-       
-    CkVec<Clause> next_clauses;
     /* Which variable get assigned  */
-    Lit assigned_var = state_msg->assigned_lit;
+    Lit lit = state_msg->assigned_lit;
+       
 #ifdef DEBUG
     CkPrintf("\n\n Computes=%d Sequential SAT New chare: literal = %d,  level=%d, unsolved clauses=%d\n", computes++, toInt(assigned_var), state_msg->level, state_msg->clauses.size());
     //CkPrintf("\n\n Computes=%d Sequential SAT New chare: literal = %d, occurrence size=%d, level=%d \n", computes++, toInt(assigned_var), state_msg->occurrence.size(), state_msg->level);
@@ -385,147 +368,117 @@ bool Solver::seq_solve(SolverState* state_msg)
     
     //Unit clauses
     /* use this value to propagate the clauses */
-    map<int, int> unit_clauses;
 #ifdef DEBUG
     CkPrintf(" remainning clause size is %d\n", (state_msg->clauses).size());
 #endif
-    for(int i=0; i<(state_msg->clauses).size(); i++)
-    {
-        Clause cl = ((state_msg->clauses)[i]);
-        CkVec<Lit> new_clause;
-        bool satisfied = false;
-#ifdef DEBUG    
-        //CkPrintf("\n");
-#endif
-        for(int j=0; j<cl.size();  j++)
-        {
-            Lit lit = cl[j];
-#ifdef DEBUG    
-        //    CkPrintf("%d   ", toInt(lit));
-#endif
-            if(lit == assigned_var)
-            {
-                satisfied = true;
-                break;
-            }else if( lit == ~(assigned_var))
-            {
-            } else
-            {
-                new_clause.push_back(lit);
-            }
-        }
-        if(satisfied)//one literal is true in the clause
-        {           // the occurrence of all other literals in this clause decrease by 1 since this clause goes away
-            for(int j=0; j<cl.size();  j++)
-            {
-                Lit lit = cl[j];
-                if(lit != assigned_var)
-                {
-                    int int_lit = toInt(lit);
-                    (next_state->occurrence[abs(int_lit)-1])--;
-                    if(int_lit > 0)
-                        (next_state->positive_occurrence[abs(int_lit)-1])--;
-                }
-            }
-        } else if(new_clause.size() == 0 ) //this clause is unsatisfiable
-        {
-        
-            /* conflict */
-            return false;
-        }else if(new_clause.size() == 1) //unit clause
-        {
-            /*unit clause */
-            Lit lit = new_clause[0];
-            if(unit_clauses.find(-toInt(lit)) != unit_clauses.end()) // for a variable, x and ~x exist in unit clause at the same time
-            {
-                CkPrintf("conflict detected by unit progation\n");
-                return false;
-                /* conflict*/
-            }else
-            {
-                unit_clauses[toInt(lit)]++;
-            }
 
-        }
-        else if(new_clause.size() > 1)
-        {
-            Clause clsc(new_clause, false);
-            next_clauses.push_back(clsc);
-        }
-    } /* all clauses are checked*/
-   
-    //CkPrintf(" After assignment, unit clauses = %d, unsolved clauses=%d\n", unit_clauses.size(), next_clauses.size());
+    int _unit_ = -1;
+    while(1){
+    int pp_ = 1;
+    int pp_i_ = 2;
+    int pp_j_ = 1;
 
-    if(next_clauses.size() == 0)
+    if(toInt(lit) < 0)
     {
-        /* one solution is found*/
-        /* print the solution*/
-        //CkPrintf("Inside sequential, done!! one solutions found level=%d by sequential SAT\n", state_msg->level);
-        /*
-        for(int _i=0; _i<state_msg->var_size; _i++)
-        {
-            if(state_msg->occurrence[_i] == -2)
-                CkPrintf(" TRUE ");
-            else if(state_msg->occurrence[_i] == -1)
-                CkPrintf(" FALSE ");
-            else
-                CkPrintf(" Anything ");
-        }*/
-        CkPrintf("\n");
-        return true;
-    }else
+        pp_ = -1;
+        pp_i_ = 1;
+        pp_j_ = 2;
+    }
+
+    next_state->occurrence[pp_*toInt(lit)-1] = -pp_i_;
+    
+    CkVec<int> &inClauses = next_state->whichClauses[pp_*2*toInt(lit)-pp_i_];
+    CkVec<int> &inClauses_opposite = next_state->whichClauses[pp_*2*toInt(lit)-pp_j_];
+
+    // literal with same sign, remove all these clauses
+    for(int j=0; j<inClauses.size(); j++)
     {
-        /*   assigned all unit clause literals first*/
-        while(!unit_clauses.empty())
-        {
-#ifdef DEBUG
-            CkPrintf("unit propagation, unit clauses=%d, unsolved clauses=%d\n", unit_clauses.size(), next_clauses.size());
-#endif
-            int first_unit = (*(unit_clauses.begin())).first;
+        int cl_index = inClauses[j];
 
-            //assign this variable
-            for(int _i=0; _i<next_clauses.size(); _i++)
+        Clause& cl_ = next_state->clauses[cl_index];
+        //for all the literals in this clauses, the occurrence decreases by 1
+        for(int k=0; k< cl_.size(); k++)
+        {
+            Lit lit_ = cl_[k];
+            if(toInt(lit_) == toInt(lit))
+                continue;
+            next_state->occurrence[abs(toInt(lit_)) - 1]--;
+            if(toInt(lit_) > 0)
             {
-                Clause& cl = next_clauses[_i];
-                //reduce the clause
-                for(int j=0; j<cl.size(); j++)
+                next_state->positive_occurrence[toInt(lit_)-1]--;
+                //remove the clause index for the literal
+                for(int _i = 0; _i<next_state->whichClauses[2*toInt(lit_)-2].size(); _i++)
                 {
-                    Lit lit = cl[j];
-                    if(toInt(lit) == first_unit)//this clause goes away
-                    {
-                        for(int jj=0; jj<cl.size(); jj++)
-                        {
-                            Lit lit_2 = cl[jj];
-                            (next_state->occurrence[abs(toInt(lit_2))-1])--; 
-                            if(toInt(lit_2) > 0)
-                                (next_state->positive_occurrence[abs(toInt(lit_2))-1])--; 
-                        }
-                       break; 
-                    }else if (toInt(lit) == -first_unit)
+                    if(next_state->whichClauses[2*toInt(lit_)-2][_i] == cl_index)
                     {
-                        cl.remove(j);
-                        j--;
+                        next_state->whichClauses[2*toInt(lit_)-2].remove(_i);
+                        break;
                     }
                 }
-                if(cl.size()==0){ // conflict
-                    return false;
-                    //_i--;
-                }else if(cl.size() == 1)// new unit clause
+            }else
+            {
+                for(int _i = 0; _i<next_state->whichClauses[-2*toInt(lit_)-1].size(); _i++)
                 {
-                    unit_clauses[toInt(cl[0])]++;
-                    next_clauses.remove(_i);
-                    _i--;
+                    if(next_state->whichClauses[-2*toInt(lit_)-1][_i] == cl_index)
+                    {
+                        next_state->whichClauses[-2*toInt(lit_)-1].remove(_i);
+                        break;
+                    }
                 }
             }
-            /*remove this unit clause */
-            unit_clauses.erase(unit_clauses.begin());
         }
+            next_state->clauses[cl_index].resize(0);
+    }
+   
+    for(int j=0; j<inClauses_opposite.size(); j++)
+    {
+        int cl_index_ = inClauses_opposite[j];
+        Clause& cl_neg = next_state->clauses[cl_index_];
+        cl_neg.remove(-toInt(lit));
+            //becomes a unit clause
+         if(cl_neg.size() == 1)
+         {
+             next_state->unit_clause_index.push_back(cl_index_);
+         }else if (cl_neg.size() == 0)
+         {
+    //            CkPrintf(" conflict found in seqential testing!\n");
+                return false;
+         }
+    }
+   
+    _unit_++;
+    if(_unit_ == next_state->unit_clause_index.size())
+        break;
+    Clause cl = next_state->clauses[next_state->unit_clause_index[_unit_]];
+    
+    while(cl.size() == 0){
+        _unit_++;
+        if(_unit_ == next_state->unit_clause_index.size())
+            break;
+        cl = next_state->clauses[next_state->unit_clause_index[_unit_]];
+        
+    };
 
-        //CkPrintf("After unit propagation, unit size = %d, unsolved = %d\n", unit_clauses.size(), next_clauses.size());
-        if(next_clauses.size() == 0)
-            return true;
+    if(_unit_ == next_state->unit_clause_index.size())
+        break;
+    
+    lit = cl[0];
+    }
+   
+   
+    int unsolved = next_state->unsolvedClauses();
+    if(unsolved == 0)
+    {
+        CkPrintf("One solution found\n");
+#ifdef SOLUTION
+        next_state->printSolution();
+#endif
+        return true;
+    }
+    
+    /**********************/
+    
         /* it would be better to insert the unit literal in order of their occurrence */
-
         /* make a decision and then fire new tasks */
         /* if there is unit clause, should choose these first??? TODO */
         /* TODO which variable to pick up */
@@ -534,14 +487,6 @@ bool Solver::seq_solve(SolverState* state_msg)
 #ifdef DEBUG
         CkPrintf("max index = %d\n", max_index);
 #endif
-        if(next_state->occurrence[max_index] <=0)
-        {
-            CkPrintf("****Unsatisfiable in sequential SAT\n");
-            return false;
-        }
-
-
-        next_state->assignclause(next_clauses);
         next_state->var_size = state_msg->var_size;
         next_state->level = state_msg->level+1;
 
@@ -581,8 +526,7 @@ bool Solver::seq_solve(SolverState* state_msg)
             return true;
         }
 
-        CkPrintf("Unsatisfiable through sequential\n");
+        //CkPrintf("Unsatisfiable through sequential\n");
         return false;
-    }
 
 }
index 4699bcc0d1cd9c2b23b67bafa39eb965a6573f63..a50ce602dbcb0e755d097652de3471b7fd516595 100644 (file)
@@ -12,6 +12,8 @@ public:
 
     int nVars();
 
+    int clausesSize();
+    
     Var newVar (bool polarity = true, bool dvar = true);
     
     bool addClause(CkVec<Lit>& lits);
@@ -20,16 +22,22 @@ public:
 
     void assignclause(CkVec<Clause>& );
 
+    int  unsolvedClauses();
+    
+    void printSolution();
 
     CkVec<Clause>   clauses;
     Lit             assigned_lit;
     int             var_size;
+    int             unsolved_clauses;
 
     int             var_frequency; // 1, -1, 1 freq = 3
     CkVec<int>      unit_clause_index;
     // -2 means true, -1 means false, 0 means anything, > 0 means occurrence
     CkVec<int>      occurrence; 
     CkVec<int>      positive_occurrence; 
+    //2 * N (positive, negative)
+    CkVec< CkVec< int > >   whichClauses;
     int             level;
    
     int             lower;
@@ -64,7 +72,19 @@ public:
            new_state->occurrence[_i] = org->occurrence[_i];
            new_state->positive_occurrence[_i] = org->occurrence[_i];
        }
-        new_state->level = org->level;
+       new_state->level = org->level;
+       int _size = org->whichClauses.size();
+       new_state->whichClauses.resize(_size); 
+       for(int i=0; i<_size; i++)
+       {
+           int _sub_size = org->whichClauses[i].size();
+           new_state->whichClauses[i].resize(_sub_size);
+
+           for(int j=0; j<_sub_size; j++)
+           {
+               new_state->whichClauses[i][j] = org->whichClauses[i][j];
+           }
+       }
        return new_state;
     }
 
index 1a30e812841e31e9ba34e54c0968a4d64c96588c..e11ed2911c25e8337af84bd9f2ea3de4afe9ebcb 100644 (file)
@@ -28,9 +28,9 @@ OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWA
 template<class V> 
 int get_max_element(const V& ps) {
 
-    int max_index = 0;
-    int max = ps[0];
-    for(int __i=1; __i<ps.size(); __i++)
+    int max_index = -1;
+    int max = -1;
+    for(int __i=0; __i<ps.size(); __i++)
     {
         if(ps[__i] > max)
         {
@@ -38,7 +38,6 @@ int get_max_element(const V& ps) {
             max_index = __i;
         }
     }
-
     return max_index;
 }
 
@@ -155,8 +154,15 @@ public:
         for (int i = 0; i < ps.size(); i++) data[i] = ps[i];
     }
 
-    void remove(int i){
-        data.remove(i); 
+    void remove(int v){
+        for(int i=0; i<data.size(); i++)
+        {
+            if(toInt(data[i]) == v)
+            {
+                data.remove(i);
+                return;
+            }
+        }
     }
     // -- use this function instead:
     int          size        ()      const   { return data.size(); }
@@ -180,6 +186,7 @@ public:
     void         strengthen  (Lit p);
 
 
+    void        resize  (int __size)  {data.resize(__size); }
     void pup(PUP::er &p) {
         for(int i=0; i<size(); i++)
             p|data[i];
diff --git a/examples/charm++/satisfiability/example_50.cnf b/examples/charm++/satisfiability/example_50.cnf
new file mode 100644 (file)
index 0000000..f281f4d
--- /dev/null
@@ -0,0 +1,53 @@
+c SAT07-Contest Parameters: unif2p p=7 nbc2=2803 nbc3=6541 v=3500 seed=1286605994
+c Uniform UNKNOWN (2+p)-SAT Instance nbc2=2803, nbc3=6541, p=0.70, nbv=3500, seed=1286605994
+p cnf 3500 50
+-1765 -1070 0
+-1298 -3068 0
+-2907 -225 0
+776 -3004 0
+578 1958 0
+-1372 1977 0
+1900 -2858 0
+-1841 -488 0
+-104 -1745 0
+-599 -1021 0
+-424 -88 0
+2289 1997 0
+-2443 2011 0
+-910 -1746 0
+-174 3232 0
+2267 -2120 0
+1778 272 0
+1676 -2380 0
+-2538 -3299 0
+-2059 691 0
+2248 -1315 0
+-3189 2467 0
+664 -1877 0
+2418 1800 0
+-861 -3070 0
+3364 -1135 0
+917 -227 0
+2728 -476 0
+-119 -1132 0
+-1351 -3170 0
+-2297 1445 0
+-2043 -1910 0
+1816 1939 0
+3429 582 0
+-507 -320 0
+1726 -1209 0
+2585 -1652 0
+-2440 -2450 0
+-2867 2451 0
+-139 813 0
+2340 135 0
+-2325 -3113 0
+1524 -2565 0
+727 -1593 0
+2614 247 0
+1065 -2790 0
+3091 -1842 0
+-2600 -1685 0
+1904 -207 0
+2535 -59 0
diff --git a/examples/charm++/satisfiability/example_9000.cnf b/examples/charm++/satisfiability/example_9000.cnf
new file mode 100644 (file)
index 0000000..3618583
--- /dev/null
@@ -0,0 +1,9003 @@
+c SAT07-Contest Parameters: unif2p p=7 nbc2=2803 nbc3=6541 v=3500 seed=1286605994
+c Uniform UNKNOWN (2+p)-SAT Instance nbc2=2803, nbc3=6541, p=0.70, nbv=3500, seed=1286605994
+p cnf 3500 9000
+-1765 -1070 0
+-1298 -3068 0
+-2907 -225 0
+776 -3004 0
+578 1958 0
+-1372 1977 0
+1900 -2858 0
+-1841 -488 0
+-104 -1745 0
+-599 -1021 0
+-424 -88 0
+2289 1997 0
+-2443 2011 0
+-910 -1746 0
+-174 3232 0
+2267 -2120 0
+1778 272 0
+1676 -2380 0
+-2538 -3299 0
+-2059 691 0
+2248 -1315 0
+-3189 2467 0
+664 -1877 0
+2418 1800 0
+-861 -3070 0
+3364 -1135 0
+917 -227 0
+2728 -476 0
+-119 -1132 0
+-1351 -3170 0
+-2297 1445 0
+-2043 -1910 0
+1816 1939 0
+3429 582 0
+-507 -320 0
+1726 -1209 0
+2585 -1652 0
+-2440 -2450 0
+-2867 2451 0
+-139 813 0
+2340 135 0
+-2325 -3113 0
+1524 -2565 0
+727 -1593 0
+2614 247 0
+1065 -2790 0
+3091 -1842 0
+-2600 -1685 0
+1904 -207 0
+2535 -59 0
+-3251 307 0
+2898 -289 0
+-1644 -65 0
+-3232 -3141 0
+1094 -2553 0
+635 1633 0
+-2556 -3267 0
+1658 -2147 0
+2450 1886 0
+853 358 0
+2710 1705 0
+-3275 -1764 0
+2827 1061 0
+1552 -2501 0
+1032 -2196 0
+2093 599 0
+-3297 2888 0
+-1159 3146 0
+-167 -2808 0
+2696 808 0
+1887 -1984 0
+-1062 545 0
+-3251 1283 0
+83 2885 0
+-865 -528 0
+-2017 2391 0
+1523 -2124 0
+2769 -2741 0
+-1300 -1093 0
+-2209 954 0
+-878 -303 0
+618 840 0
+1959 5 0
+-1540 -2659 0
+593 281 0
+-713 1017 0
+746 873 0
+-247 -1414 0
+564 -2085 0
+1404 2663 0
+-791 -338 0
+-1563 -1893 0
+777 2017 0
+1696 -2 0
+1643 1896 0
+2701 -3013 0
+1526 -945 0
+-1021 -2791 0
+2775 642 0
+2624 -2992 0
+1208 -1390 0
+1041 1844 0
+-2265 -1072 0
+49 1230 0
+2182 -1004 0
+-2282 1514 0
+3423 -2393 0
+1189 2447 0
+3392 1800 0
+-1727 115 0
+-382 1957 0
+-1772 2005 0
+-1860 156 0
+3303 -2197 0
+-323 2272 0
+-2972 408 0
+-1554 -295 0
+-2350 -272 0
+1597 3162 0
+-1915 321 0
+1175 -915 0
+-2145 -702 0
+-701 -479 0
+691 -3036 0
+3093 2025 0
+-240 1173 0
+1026 1704 0
+-2502 -3214 0
+2501 1152 0
+-240 -113 0
+1326 1112 0
+1477 760 0
+-477 3011 0
+-1581 -2553 0
+-1519 2046 0
+-2781 695 0
+2387 -2927 0
+-200 66 0
+130 41 0
+1825 -2675 0
+85 3018 0
+-2869 772 0
+-2827 1407 0
+1075 -388 0
+-448 2587 0
+-2853 2173 0
+330 1088 0
+-3014 955 0
+2448 -1263 0
+-2542 2703 0
+1350 -475 0
+-2710 -2386 0
+-677 305 0
+625 3011 0
+1190 -3109 0
+-860 -300 0
+1036 1623 0
+-96 1945 0
+-1434 371 0
+3282 301 0
+729 -487 0
+3081 -2308 0
+-595 -1473 0
+2480 -1261 0
+3335 92 0
+-208 1377 0
+-956 -2285 0
+-1003 1195 0
+3190 -3085 0
+-1678 41 0
+-309 -227 0
+-3286 -2803 0
+-871 3052 0
+-1430 2720 0
+-2675 3121 0
+-590 1909 0
+-2496 3050 0
+3385 -2946 0
+1104 2982 0
+1160 511 0
+-1677 -3109 0
+-990 -1991 0
+-333 341 0
+-2426 -1202 0
+242 2096 0
+342 -321 0
+-1214 2335 0
+-2085 904 0
+-2907 3368 0
+2840 560 0
+3469 -595 0
+-3150 -317 0
+2547 19 0
+-453 -834 0
+-141 -540 0
+-2514 2487 0
+1955 2317 0
+-713 967 0
+-276 3076 0
+-3357 3317 0
+2303 1793 0
+-174 921 0
+2295 -2539 0
+-2903 3230 0
+380 -2651 0
+-1422 1773 0
+-1679 1623 0
+-1239 439 0
+1275 2796 0
+-1358 -1762 0
+1676 1461 0
+2325 2436 0
+-3236 296 0
+1704 2855 0
+-3415 1417 0
+-2417 1194 0
+587 1639 0
+-705 2096 0
+700 -3459 0
+-1246 -2228 0
+480 2138 0
+-1091 -2065 0
+-2470 -2158 0
+1837 1577 0
+340 868 0
+3115 3425 0
+-3020 -3338 0
+-2278 -1746 0
+-1089 -1440 0
+1876 -3184 0
+-3486 2231 0
+1692 747 0
+22 -3076 0
+1078 3450 0
+-2884 -1361 0
+1853 -918 0
+3490 1621 0
+2363 2711 0
+3145 -672 0
+1747 3367 0
+-3032 1404 0
+-2443 -1206 0
+-1141 -3487 0
+-2174 -2435 0
+3262 529 0
+-1859 973 0
+-1179 2839 0
+3062 -1193 0
+2148 3203 0
+-449 2915 0
+3475 1083 0
+306 -811 0
+571 -2192 0
+1078 432 0
+1308 1682 0
+-2475 -3463 0
+1971 -2212 0
+-573 -509 0
+-1028 -2695 0
+1608 -1401 0
+1345 -1107 0
+-3256 1179 0
+-1309 -1933 0
+-2235 -1405 0
+1559 3125 0
+1742 -2679 0
+-1724 602 0
+-1879 -2009 0
+2094 2146 0
+-1154 -2913 0
+-2685 -2745 0
+-3239 2125 0
+-765 3429 0
+1882 1776 0
+-981 3435 0
+-880 2583 0
+-1559 -1322 0
+1054 1674 0
+2079 1658 0
+1568 3115 0
+2031 1339 0
+-2151 -516 0
+1992 2491 0
+2394 -2343 0
+2803 -3164 0
+898 594 0
+-2257 1293 0
+2533 -2656 0
+450 1475 0
+108 -2233 0
+2441 -1470 0
+2797 -1786 0
+-476 -2455 0
+-2788 850 0
+1799 -1868 0
+3050 1895 0
+1517 -2600 0
+-1860 224 0
+-2556 -2135 0
+-2005 452 0
+1871 355 0
+-2454 2702 0
+-3347 -1583 0
+2092 -2896 0
+-3346 -1734 0
+3328 -2506 0
+151 -735 0
+1560 1136 0
+-592 -1088 0
+-2695 296 0
+-1358 1937 0
+1856 58 0
+3328 -3407 0
+-249 2038 0
+52 -2555 0
+-459 1542 0
+1680 -594 0
+2918 3415 0
+-2768 -725 0
+-3183 -2825 0
+2574 2666 0
+-1644 -3222 0
+475 3307 0
+2466 1983 0
+478 1519 0
+-3466 671 0
+3284 -358 0
+2179 -2477 0
+-2414 575 0
+2845 -2252 0
+-2573 753 0
+3407 -2182 0
+1812 -280 0
+1633 -1011 0
+2347 882 0
+-1050 2277 0
+-1500 519 0
+-3149 663 0
+-1329 -258 0
+-650 1620 0
+-2640 -738 0
+2849 2188 0
+3116 2720 0
+2927 628 0
+-849 -1769 0
+418 -2718 0
+346 -2982 0
+1916 -3456 0
+3000 -1828 0
+2441 544 0
+84 -2722 0
+-1260 435 0
+997 2606 0
+-1135 3160 0
+1299 -2476 0
+-243 -769 0
+-3125 2091 0
+3112 -622 0
+-2397 2704 0
+3194 2266 0
+-1843 -2104 0
+-3194 958 0
+-906 706 0
+-2365 -890 0
+571 554 0
+2113 3376 0
+-1020 1167 0
+-2219 1403 0
+1302 -38 0
+1771 1987 0
+928 -324 0
+666 1781 0
+-692 1418 0
+-10 314 0
+-373 -1742 0
+-1412 -3153 0
+3151 208 0
+-685 -597 0
+1385 1405 0
+2133 -3286 0
+2020 -2129 0
+2496 -3059 0
+423 -1961 0
+945 -1047 0
+1303 -2016 0
+3448 99 0
+32 -3382 0
+1189 1488 0
+-870 -1739 0
+-2559 2734 0
+2598 1315 0
+2807 -636 0
+-115 2595 0
+-1763 1395 0
+698 458 0
+-943 1595 0
+-2062 1678 0
+-1130 -602 0
+2106 269 0
+-777 2021 0
+-55 954 0
+-309 112 0
+-124 -2892 0
+2515 2879 0
+820 2198 0
+-1968 -2176 0
+-1215 1985 0
+3349 -2883 0
+-1621 1720 0
+-2684 2936 0
+2401 374 0
+-3314 -2492 0
+-809 -2582 0
+-488 3350 0
+-202 -194 0
+-2340 3453 0
+3412 2389 0
+4 1903 0
+652 319 0
+2030 1098 0
+-500 2116 0
+-1437 -2691 0
+300 -1688 0
+-2459 -3099 0
+3313 1466 0
+312 -2220 0
+-2146 -1427 0
+1849 -14 0
+-2704 3337 0
+-594 -2278 0
+-1910 -32 0
+-2106 -3239 0
+1618 1735 0
+-1074 -2891 0
+2992 395 0
+-3342 -189 0
+2537 -3184 0
+2551 -523 0
+2427 -1829 0
+185 2951 0
+-2772 231 0
+-1639 -65 0
+439 -2471 0
+-867 2825 0
+2684 -3033 0
+971 2696 0
+611 -930 0
+-2591 2598 0
+-1566 -2207 0
+-2450 -835 0
+2730 -3169 0
+2464 3498 0
+-1502 -3383 0
+3086 2369 0
+-102 -991 0
+-179 -1054 0
+-2916 1448 0
+2032 -1253 0
+-2088 -1356 0
+3414 2699 0
+885 387 0
+-1659 -666 0
+2555 952 0
+1745 977 0
+-1766 3025 0
+1207 -1558 0
+1698 -845 0
+-768 -3027 0
+-2625 2122 0
+2669 2544 0
+-944 -956 0
+2000 -348 0
+857 562 0
+-649 -1858 0
+-1533 -458 0
+-2746 -451 0
+-3397 -2655 0
+1860 -789 0
+1693 -1992 0
+177 -457 0
+2212 3098 0
+3138 1707 0
+-657 -3470 0
+-2148 1773 0
+2994 1110 0
+-2625 656 0
+142 1009 0
+1487 -1352 0
+2484 -3058 0
+2404 -3292 0
+3428 -2963 0
+-183 620 0
+-2162 -1028 0
+-127 -2103 0
+831 -587 0
+-1077 -2515 0
+2888 2182 0
+3336 -1351 0
+1735 1840 0
+2049 1593 0
+688 -1997 0
+804 -1083 0
+211 452 0
+-108 1348 0
+1538 1286 0
+2003 1138 0
+3450 2155 0
+1935 -2708 0
+-2868 3436 0
+1804 -1806 0
+2688 -3301 0
+-1724 2290 0
+-1178 -1136 0
+2711 -3418 0
+1749 1158 0
+2320 -2806 0
+-1569 1859 0
+259 1886 0
+-2422 -2241 0
+2835 -408 0
+1105 192 0
+-316 2975 0
+2182 2248 0
+-997 2688 0
+794 2438 0
+1211 -498 0
+2511 -778 0
+268 2356 0
+2729 -1688 0
+-2656 -1608 0
+1794 -2338 0
+1907 1856 0
+2572 -252 0
+-1617 414 0
+3488 -2471 0
+2377 1629 0
+374 -1148 0
+-977 867 0
+3110 2060 0
+1230 -716 0
+-1208 584 0
+1718 -3451 0
+2188 -1961 0
+248 2668 0
+-3404 -151 0
+-3071 151 0
+721 697 0
+-2626 -2253 0
+-2380 3157 0
+332 -2302 0
+-2028 -83 0
+852 -2897 0
+3067 1637 0
+-564 -1817 0
+-498 -3236 0
+425 3455 0
+1323 3402 0
+-2719 -674 0
+-2967 22 0
+7 -1074 0
+-2466 2210 0
+-997 -814 0
+-3039 1117 0
+2536 -2768 0
+683 -2012 0
+1373 1147 0
+3441 1157 0
+587 -3020 0
+1441 2581 0
+-2255 432 0
+442 -1757 0
+-2619 -3336 0
+194 -3202 0
+1032 -2405 0
+2017 -920 0
+-2292 -2155 0
+-2169 2669 0
+-1128 2717 0
+-1147 1047 0
+-1998 -66 0
+-2729 257 0
+616 -1234 0
+2723 1735 0
+2592 -1745 0
+-1624 -2184 0
+513 -821 0
+2373 1926 0
+2749 -3061 0
+1759 2238 0
+2478 1506 0
+2124 -3214 0
+-129 -2476 0
+2372 1003 0
+-2559 1045 0
+-191 2300 0
+1461 -1417 0
+1677 2092 0
+126 2355 0
+3337 -3465 0
+27 1718 0
+99 -1783 0
+1044 588 0
+2296 673 0
+-1247 3475 0
+-2243 -78 0
+2163 1117 0
+1001 -1966 0
+21 3425 0
+2903 2777 0
+-1033 1680 0
+-2751 -84 0
+941 -3421 0
+-2124 -2051 0
+-2431 -2787 0
+748 -959 0
+1434 -889 0
+2589 1283 0
+-29 3450 0
+-1814 -3277 0
+92 -2437 0
+-3195 3003 0
+-654 -2058 0
+41 2170 0
+-398 2311 0
+3223 -3109 0
+-3056 2530 0
+-3092 624 0
+-2003 -1899 0
+-548 -323 0
+-190 2603 0
+1896 -1705 0
+-830 -1780 0
+-609 303 0
+-946 1533 0
+-1638 221 0
+1717 1838 0
+20 3465 0
+1041 440 0
+340 1730 0
+2659 1722 0
+-1398 -3430 0
+-1357 -2881 0
+-119 3134 0
+1720 -599 0
+-132 1949 0
+-3131 608 0
+1031 1139 0
+2346 -3456 0
+1385 -2586 0
+-1348 2235 0
+1567 3301 0
+3340 -1526 0
+962 1143 0
+-2361 562 0
+586 81 0
+1061 3174 0
+-3422 1686 0
+725 -2736 0
+2289 2078 0
+2936 -2099 0
+77 -990 0
+1491 2329 0
+-3252 -1507 0
+2446 -3257 0
+-3440 137 0
+-1863 -2956 0
+1909 -2780 0
+-1636 1742 0
+-1119 650 0
+782 1186 0
+1888 1345 0
+-373 3200 0
+2545 -976 0
+2709 1558 0
+-1964 -2463 0
+-2216 1812 0
+-3436 2444 0
+1939 -1251 0
+2821 1160 0
+197 -4 0
+696 -149 0
+1409 -1022 0
+2544 -3472 0
+-688 -1092 0
+744 1340 0
+-164 3009 0
+1685 -2676 0
+1528 1124 0
+-158 2128 0
+2977 -1438 0
+-3133 -3279 0
+3192 944 0
+906 -3119 0
+-1374 -552 0
+3296 -1441 0
+2406 46 0
+335 -629 0
+-1822 1832 0
+-3476 1775 0
+-2480 -103 0
+-1502 -953 0
+2348 -2433 0
+1232 -3466 0
+-2936 2700 0
+2183 -3081 0
+1895 -1958 0
+3021 1537 0
+2950 1885 0
+1361 326 0
+841 2351 0
+3131 -2209 0
+-2326 -2336 0
+-1237 -1513 0
+3329 1501 0
+202 1350 0
+1178 -603 0
+2571 2745 0
+-186 1984 0
+411 2382 0
+2101 245 0
+3134 -2969 0
+1727 2311 0
+507 1581 0
+-3395 721 0
+-3111 -2377 0
+1561 -3112 0
+1553 -1208 0
+-3211 -3491 0
+-3209 -2306 0
+429 -3363 0
+1277 2619 0
+-126 -136 0
+3306 3033 0
+-3372 -3338 0
+1138 -1577 0
+2497 192 0
+-1026 -139 0
+-113 -2389 0
+1445 -2561 0
+-1348 -1307 0
+1708 -2519 0
+3484 3002 0
+-3401 1968 0
+-2645 -1102 0
+1156 -1625 0
+1243 -2658 0
+-2021 758 0
+-915 -1021 0
+-2904 701 0
+-2396 508 0
+-1281 1194 0
+1135 -596 0
+37 59 0
+-2734 -467 0
+-935 -1122 0
+3290 971 0
+2182 -2081 0
+-1873 3373 0
+1564 79 0
+-3362 -1489 0
+2894 1178 0
+764 -3381 0
+2869 48 0
+-3145 1852 0
+2689 -2902 0
+-3020 715 0
+-341 282 0
+1467 101 0
+3317 2988 0
+2923 -2278 0
+371 1450 0
+-3343 -1841 0
+233 93 0
+-517 836 0
+-1600 1060 0
+-2887 427 0
+2438 -3283 0
+2783 -652 0
+-886 -3169 0
+1902 -3260 0
+2752 -1886 0
+659 -626 0
+338 -1824 0
+-2846 -2427 0
+2165 -144 0
+-770 1101 0
+2896 2385 0
+2278 3431 0
+-1996 1299 0
+-1038 -1412 0
+-110 1100 0
+1987 -1238 0
+2235 2099 0
+2176 1161 0
+467 -2868 0
+2188 775 0
+-1116 3338 0
+497 -29 0
+-985 61 0
+-1154 122 0
+2679 2893 0
+-1919 -2925 0
+-598 -1630 0
+-1592 3469 0
+977 1361 0
+1055 -2080 0
+-2517 -1510 0
+-3438 -58 0
+-351 469 0
+4 -1154 0
+-2185 3387 0
+1688 -2983 0
+3160 638 0
+-2232 2753 0
+-1357 1417 0
+2394 -410 0
+925 1514 0
+771 -1529 0
+1952 3231 0
+-1270 2804 0
+57 -1644 0
+2659 -35 0
+-1659 -1810 0
+2926 -3297 0
+3096 -1278 0
+478 3321 0
+722 -2568 0
+-2266 2921 0
+1813 -1110 0
+1961 -1487 0
+2596 -672 0
+2014 -2371 0
+1779 -1976 0
+2956 -1185 0
+-1349 2168 0
+-2124 -2436 0
+-2653 -1408 0
+-1189 -1233 0
+2690 -2305 0
+-2373 -2814 0
+1324 2907 0
+-3086 956 0
+-845 1049 0
+-1212 3405 0
+29 -1478 0
+707 1501 0
+-1114 -1100 0
+-1480 -637 0
+-1703 -82 0
+636 -2223 0
+660 949 0
+3255 -2236 0
+-2166 1001 0
+2923 2769 0
+2807 -522 0
+782 90 0
+1203 -272 0
+-1208 3320 0
+2265 -239 0
+1621 -1802 0
+2687 -3160 0
+-1805 2645 0
+-2796 -1898 0
+-826 -2562 0
+-2158 368 0
+-1828 1733 0
+-954 2611 0
+946 2862 0
+216 -2242 0
+-1449 -3131 0
+1053 -822 0
+-15 407 0
+-2718 -2038 0
+961 1638 0
+2242 -989 0
+-1662 -3320 0
+-2872 397 0
+3447 1564 0
+-1555 -2878 0
+2269 241 0
+-558 2533 0
+2548 3433 0
+1419 -977 0
+-1272 1458 0
+-2858 1462 0
+-1881 304 0
+1911 1503 0
+-2966 2166 0
+521 -1542 0
+-1868 -859 0
+2395 -2868 0
+-2633 808 0
+-2680 1295 0
+-1795 995 0
+-1279 -884 0
+741 -767 0
+-747 -831 0
+-282 2402 0
+-25 2841 0
+2594 -1146 0
+-2418 -2833 0
+-538 -917 0
+-2825 2561 0
+1349 1327 0
+2136 1210 0
+-346 1592 0
+1880 3026 0
+-1081 -2747 0
+-3112 711 0
+-2407 -1967 0
+3426 1796 0
+-854 3369 0
+-1779 -1905 0
+1189 -2495 0
+929 -542 0
+-2692 2008 0
+-1867 2454 0
+844 -2504 0
+-1946 -2043 0
+-422 2288 0
+-2988 -825 0
+689 244 0
+1839 -126 0
+-573 -3335 0
+1350 -3213 0
+-3208 -2963 0
+3015 -953 0
+-3416 2136 0
+433 80 0
+2779 2739 0
+1108 -2148 0
+1497 620 0
+-770 1541 0
+2548 2130 0
+2508 -1999 0
+-2823 1826 0
+-95 877 0
+2228 -491 0
+-2980 1516 0
+1121 -324 0
+2467 2367 0
+2867 -77 0
+579 796 0
+2710 3157 0
+1026 2178 0
+-649 -3088 0
+-1806 -1105 0
+3239 1316 0
+-3292 -220 0
+-1179 1031 0
+-2373 1660 0
+948 886 0
+1850 1726 0
+-2231 2626 0
+2417 -3463 0
+-1658 -861 0
+1461 607 0
+1378 -898 0
+3465 1832 0
+-373 2885 0
+2280 1220 0
+2423 -1547 0
+576 -3495 0
+2788 182 0
+1936 3389 0
+2427 64 0
+3344 3302 0
+-1112 2438 0
+-296 -902 0
+-502 558 0
+-458 3310 0
+-1408 -495 0
+-781 -3157 0
+1170 2097 0
+1615 -1229 0
+-1085 2617 0
+-322 -598 0
+2467 -1901 0
+1707 2671 0
+-1702 2958 0
+-49 2188 0
+-2335 -2232 0
+2683 3174 0
+-126 -1647 0
+2309 1271 0
+3399 -700 0
+1381 1220 0
+-3035 2063 0
+-3292 803 0
+1535 2574 0
+2994 984 0
+-1038 66 0
+1374 1121 0
+-1008 2878 0
+-1690 -1970 0
+-1274 -809 0
+-1282 -3191 0
+1145 -33 0
+-1012 257 0
+-147 -1896 0
+-1659 2793 0
+-1336 1554 0
+-2766 -751 0
+555 -1605 0
+-3170 1153 0
+-60 1453 0
+-2202 -3121 0
+-2032 -369 0
+1032 2856 0
+1830 1894 0
+-933 1636 0
+703 3324 0
+-1035 1187 0
+2161 2166 0
+-848 -3211 0
+3302 3069 0
+3240 3202 0
+-3335 2666 0
+739 2254 0
+-540 -1814 0
+-3052 2669 0
+-2140 2574 0
+-3121 2366 0
+-2364 256 0
+-858 -173 0
+1552 1459 0
+139 232 0
+-2289 2254 0
+1546 -53 0
+-2757 3172 0
+1411 1799 0
+-471 -2378 0
+2011 2021 0
+1889 -2353 0
+-191 -2706 0
+1129 820 0
+2882 2859 0
+3498 1015 0
+1068 -1682 0
+1368 -2866 0
+-3109 3441 0
+1365 -25 0
+-1377 -534 0
+689 1680 0
+2225 2208 0
+69 130 0
+2535 2673 0
+2371 280 0
+-3424 -3477 0
+2514 2842 0
+2731 2895 0
+1229 -3489 0
+-2112 2175 0
+-1919 3315 0
+617 -1355 0
+-1026 1467 0
+-1856 2237 0
+-1444 1259 0
+1454 -593 0
+1727 -2635 0
+-2778 -2519 0
+114 -2149 0
+1321 217 0
+-1638 3295 0
+-3126 -862 0
+109 -1742 0
+-2773 -744 0
+-2916 -1339 0
+-1188 -3390 0
+-2690 -2032 0
+-2042 -2857 0
+-431 -173 0
+-1182 1124 0
+-3154 2853 0
+-1700 3427 0
+-3475 -3308 0
+-1621 2464 0
+1735 1321 0
+3244 455 0
+-3328 -230 0
+1661 -2300 0
+719 241 0
+-1748 33 0
+-1431 -2885 0
+-3037 363 0
+2844 -1547 0
+-2360 -2760 0
+2629 -3197 0
+-843 2103 0
+148 478 0
+2510 -117 0
+-350 -3492 0
+-1349 1158 0
+2037 -3279 0
+1207 3085 0
+2028 -1124 0
+1278 931 0
+-2069 -3319 0
+-1919 1518 0
+-2937 -2155 0
+1864 -1478 0
+2517 1297 0
+294 557 0
+163 -1691 0
+1406 2864 0
+529 1052 0
+-2618 -1215 0
+-580 -2840 0
+-3181 -2843 0
+-2072 -2420 0
+1521 1187 0
+-1156 3122 0
+-1998 -2535 0
+-1667 1473 0
+2657 -2839 0
+2556 2178 0
+2995 -933 0
+2160 -433 0
+-2828 1862 0
+996 3044 0
+467 -2020 0
+2166 2919 0
+-2679 1057 0
+936 471 0
+-1255 1998 0
+1256 93 0
+-548 1067 0
+-3437 -1036 0
+2689 -2538 0
+-3047 -2675 0
+-714 -461 0
+3465 2081 0
+2335 -1132 0
+-3007 674 0
+-3179 1597 0
+-2350 19 0
+-2188 2892 0
+-1012 460 0
+2297 3375 0
+1852 3480 0
+2532 -777 0
+-2337 2092 0
+3189 -1630 0
+2821 -76 0
+-703 -3243 0
+1533 -3439 0
+1123 -2590 0
+-1768 161 0
+181 -2837 0
+2386 1031 0
+1617 613 0
+-808 -2446 0
+155 -3224 0
+-2391 2016 0
+2976 -2988 0
+174 -2043 0
+-584 -2870 0
+2808 1545 0
+-3060 -1862 0
+-2846 1877 0
+2996 -1187 0
+-1263 1899 0
+-807 -1981 0
+-1034 1333 0
+-1903 1088 0
+-1102 2135 0
+1289 1029 0
+1303 133 0
+1005 2684 0
+1022 -3005 0
+2469 -2809 0
+-2009 -1621 0
+-1343 1621 0
+-1839 3107 0
+751 260 0
+39 2852 0
+-1713 3310 0
+-3118 -1063 0
+799 2089 0
+1012 3218 0
+-2917 -1300 0
+-1594 881 0
+-1540 -899 0
+-1533 2622 0
+2285 2479 0
+1746 489 0
+412 1851 0
+2787 -279 0
+-2906 -3458 0
+-2484 3344 0
+1978 2103 0
+992 -3255 0
+-156 1679 0
+2274 944 0
+-1246 -610 0
+-863 2736 0
+-2465 -1268 0
+-31 -1972 0
+1853 2019 0
+-1798 2620 0
+-506 -353 0
+-2967 1966 0
+592 -1245 0
+-3462 -1722 0
+3173 -375 0
+-601 1711 0
+-2920 -1797 0
+2002 -3170 0
+1715 -1787 0
+1320 -1893 0
+2827 -3365 0
+-117 1715 0
+-1076 -2992 0
+-936 -628 0
+1431 1573 0
+3341 -2439 0
+1265 -2737 0
+-977 995 0
+767 -3091 0
+2446 672 0
+3395 1697 0
+-1365 -1185 0
+1249 -2727 0
+-499 2644 0
+-2390 848 0
+-3010 170 0
+2702 1160 0
+1066 1668 0
+1995 -1789 0
+-2188 2654 0
+-2230 -1024 0
+-45 -992 0
+2048 -2302 0
+182 1834 0
+2232 -1030 0
+-1324 757 0
+-2561 3177 0
+-2019 1184 0
+-710 -3477 0
+-2376 -3189 0
+2807 -2481 0
+-961 -2370 0
+306 -2988 0
+2597 1448 0
+2789 -2906 0
+3454 -2055 0
+-2797 1417 0
+-2999 -2595 0
+-3095 1793 0
+2389 -247 0
+562 824 0
+-3479 -1316 0
+-3395 575 0
+-1311 -511 0
+1161 2279 0
+3033 -2965 0
+-2949 -3183 0
+-1920 -1032 0
+3163 2140 0
+626 2409 0
+-676 369 0
+2112 2593 0
+-2807 432 0
+-2745 -1467 0
+-1152 530 0
+-1077 2052 0
+-3416 -381 0
+646 -1062 0
+2272 3307 0
+-2309 655 0
+271 -455 0
+-982 1707 0
+-3069 -1704 0
+297 -1385 0
+-946 753 0
+1055 -2913 0
+-3245 709 0
+1619 169 0
+-2450 1404 0
+2543 -2063 0
+1847 -2757 0
+-522 -2355 0
+-2407 3059 0
+1422 -3286 0
+1691 3220 0
+1858 -1698 0
+512 737 0
+-2712 1666 0
+-3066 3201 0
+-1564 1555 0
+-1663 431 0
+-84 -751 0
+-712 1584 0
+-360 3375 0
+2882 -426 0
+-3411 -3151 0
+-3013 3064 0
+1407 -1547 0
+-2231 -2653 0
+2195 -588 0
+-375 1975 0
+-1952 -1605 0
+-2461 -3427 0
+-621 -1847 0
+-2429 -1210 0
+-2528 -3403 0
+-1234 -72 0
+-2459 -2834 0
+2831 67 0
+-3157 2616 0
+-201 -988 0
+-2120 -954 0
+-745 1382 0
+-1419 1030 0
+340 -2581 0
+1762 -2132 0
+3223 -2374 0
+369 1496 0
+-533 -1390 0
+1818 -200 0
+1006 -2334 0
+-2867 1576 0
+965 -2505 0
+2571 -318 0
+-3334 1672 0
+682 772 0
+-2151 -366 0
+-1004 -3029 0
+2148 933 0
+-1726 1220 0
+3165 -1917 0
+1360 -1028 0
+-1426 -1395 0
+-2367 -3321 0
+828 1485 0
+-752 340 0
+-2876 913 0
+-280 -293 0
+2355 2180 0
+-944 -1407 0
+2407 -976 0
+1468 2291 0
+-982 -625 0
+1288 -1133 0
+2236 -1765 0
+676 -2460 0
+-767 -3244 0
+-847 579 0
+-452 -1028 0
+2350 713 0
+92 1565 0
+-2302 2043 0
+-1242 53 0
+2365 1448 0
+152 -1342 0
+2342 -753 0
+3473 1211 0
+1597 -2154 0
+3262 -3068 0
+-2916 3101 0
+1918 2575 0
+2167 -414 0
+1713 3317 0
+-175 -3347 0
+2348 -2470 0
+2981 -2133 0
+-1342 -1306 0
+-3310 1414 0
+-561 2509 0
+-1010 1545 0
+1178 -3276 0
+1930 1499 0
+-680 -1222 0
+-1591 -2903 0
+-1554 -189 0
+-1615 -3090 0
+2089 -1402 0
+-1521 2320 0
+808 550 0
+-1718 15 0
+-2516 2557 0
+-1091 38 0
+2667 -507 0
+-1828 2956 0
+2194 14 0
+-304 -2912 0
+-930 -348 0
+-2009 -1544 0
+-1599 1631 0
+2559 -1832 0
+-1894 2507 0
+-2434 638 0
+2820 1341 0
+-2985 734 0
+-714 -3061 0
+1442 -247 0
+-1705 2229 0
+-45 2489 0
+2899 2160 0
+3458 2959 0
+-3448 -2400 0
+1553 3346 0
+714 -1489 0
+-510 -1696 0
+113 2977 0
+-984 -2095 0
+3461 2215 0
+51 -2695 0
+2474 -2930 0
+1228 -2793 0
+-2181 -597 0
+2517 -1404 0
+2716 2786 0
+-2845 582 0
+2135 2723 0
+969 2182 0
+-13 -469 0
+-886 3181 0
+542 2256 0
+2569 2187 0
+-1039 -1983 0
+2852 3189 0
+-1860 -171 0
+-828 -2772 0
+464 2080 0
+-3000 -915 0
+-2038 -3100 0
+3329 -2890 0
+-3259 1251 0
+-437 596 0
+3349 -1626 0
+3119 -1517 0
+637 -1432 0
+-1857 -178 0
+-2017 1501 0
+-1563 -2713 0
+2264 -431 0
+-1402 1498 0
+-1793 1927 0
+-520 1494 0
+-40 1292 0
+-1771 -2292 0
+1246 2132 0
+1183 -629 0
+1807 2646 0
+-2086 958 0
+-266 1790 0
+-2828 -1942 0
+2707 -1264 0
+-1203 1264 0
+347 1756 0
+-1238 -1474 0
+-3445 2751 0
+1263 -2409 0
+3092 -2315 0
+-482 1787 0
+490 -665 0
+-3105 -639 0
+-1823 1480 0
+1280 -2604 0
+-73 3254 0
+-2063 -2864 0
+2861 574 0
+-2434 -3030 0
+-1910 1114 0
+-2123 -1466 0
+-647 6 0
+-2399 -3150 0
+964 -308 0
+1565 1181 0
+-1349 768 0
+-615 -3205 0
+-492 -539 0
+-2571 3060 0
+1451 -1644 0
+-2174 -2821 0
+696 2664 0
+-2799 -3186 0
+2099 930 0
+750 1738 0
+1453 -356 0
+781 -241 0
+-2981 -2580 0
+3176 -1292 0
+1529 -2631 0
+-800 -1475 0
+-2769 -2112 0
+3038 1260 0
+2626 -1513 0
+1531 2138 0
+136 -2665 0
+-3118 -183 0
+-912 -1973 0
+1629 -1110 0
+2350 916 0
+-71 2878 0
+-290 2603 0
+-2643 2831 0
+2457 -2590 0
+-2452 3219 0
+2086 1574 0
+1638 -1112 0
+2405 2375 0
+-701 -1672 0
+-2642 -2810 0
+-2015 -1062 0
+635 -3044 0
+-2925 -2949 0
+-954 1724 0
+-206 3078 0
+-1362 1586 0
+204 -3052 0
+532 -1129 0
+1001 17 0
+-2342 1222 0
+-2323 -3276 0
+-1692 2367 0
+-834 -1007 0
+-396 758 0
+-2350 -3443 0
+2670 1927 0
+-3261 1805 0
+-1503 369 0
+196 -102 0
+-1644 -284 0
+-912 1173 0
+-383 1906 0
+2238 2113 0
+-2920 1577 0
+2482 1283 0
+-2907 -810 0
+1796 1489 0
+-3380 -2416 0
+-3064 -2099 0
+-2018 -2677 0
+2353 -2163 0
+-1828 952 0
+120 1294 0
+-386 2628 0
+3015 2120 0
+-2389 186 0
+1124 1898 0
+-2789 -398 0
+2363 3413 0
+2799 1500 0
+-3099 -2444 0
+-1397 2166 0
+-2187 -307 0
+1822 3028 0
+-2777 -2587 0
+-2500 -206 0
+-2044 2053 0
+-983 760 0
+2847 566 0
+-1274 -1655 0
+-18 -1037 0
+-2453 -1284 0
+-1990 294 0
+3355 -2352 0
+618 3241 0
+-957 2182 0
+203 1046 0
+-1980 -1436 0
+-1162 336 0
+3036 1844 0
+-1990 -2515 0
+-2637 244 0
+-2270 1355 0
+484 -29 0
+-2784 -2162 0
+-275 -3261 0
+2569 1552 0
+-1715 131 0
+2032 2049 0
+510 923 0
+2276 2505 0
+-2314 3445 0
+108 -2861 0
+-2203 1819 0
+2716 3376 0
+3265 -1134 0
+-2651 -2965 0
+1974 -2439 0
+2664 8 0
+476 3074 0
+-2058 -965 0
+1555 -2031 0
+2653 -1700 0
+-1913 -714 0
+-2515 -723 0
+565 1737 0
+-1104 1206 0
+1696 -2162 0
+3213 -1012 0
+2410 -2038 0
+-1450 480 0
+3070 926 0
+1371 3073 0
+1310 -1665 0
+-3053 494 0
+148 -1501 0
+2282 -1129 0
+2055 -2754 0
+3403 -3367 0
+-926 -1557 0
+2442 733 0
+2438 2666 0
+-1766 3239 0
+2314 1775 0
+251 -2285 0
+2568 -2310 0
+1271 1942 0
+-2969 994 0
+-1127 -2162 0
+-623 -2055 0
+985 802 0
+-3031 -893 0
+-1979 2086 0
+-1216 16 0
+3071 1183 0
+1956 -950 0
+-402 -3146 0
+938 -3412 0
+3492 -1721 0
+-3289 2803 0
+-2290 2813 0
+2284 -2491 0
+1287 -894 0
+2349 2823 0
+-1455 274 0
+-668 816 0
+897 182 0
+1649 -2452 0
+-874 444 0
+-1093 -1511 0
+-3108 -2121 0
+748 -1207 0
+412 -1096 0
+1664 -1740 0
+948 -3246 0
+-1406 -3036 0
+462 1936 0
+-2913 434 0
+2351 976 0
+-498 1802 0
+162 1990 0
+1309 886 0
+-2150 -1353 0
+2829 -2335 0
+867 1345 0
+716 2799 0
+833 -2665 0
+2456 2241 0
+363 -943 0
+-959 -428 0
+-2460 -3164 0
+-2669 1579 0
+-2769 314 0
+1202 -3051 0
+3386 -3365 0
+3182 -1460 0
+-2835 -1716 0
+-730 -3402 0
+424 1478 0
+-1564 3126 0
+2481 -816 0
+3051 -2217 0
+2582 1779 0
+-686 -2307 0
+-2140 -313 0
+2666 2559 0
+-3279 2680 0
+94 2174 0
+-2245 -2756 0
+-3357 -1233 0
+-54 1201 0
+2750 -759 0
+-529 -759 0
+1286 -2783 0
+355 -2407 0
+768 -3022 0
+571 -1309 0
+250 2864 0
+2054 1042 0
+-572 -2693 0
+-2873 -795 0
+3269 -1723 0
+2039 571 0
+-1710 2320 0
+-2370 2707 0
+-2669 -2922 0
+-2635 2525 0
+2263 -806 0
+1668 -2294 0
+1677 1559 0
+-1145 -3022 0
+2221 1635 0
+1969 208 0
+-2911 -2360 0
+-92 1751 0
+3101 -490 0
+657 -2704 0
+3299 -2548 0
+2891 298 0
+-411 -2700 0
+2772 16 0
+2537 -727 0
+260 -1483 0
+1533 1129 0
+1256 -1021 0
+-1095 1997 0
+2139 2096 0
+726 1428 0
+703 2179 0
+-319 2368 0
+1881 -438 0
+-2324 2102 0
+-1899 1133 0
+3192 -3478 0
+1923 879 0
+-3368 2645 0
+-248 -310 0
+729 -1144 0
+-3029 2523 0
+3147 1931 0
+-746 -1038 0
+2692 2267 0
+3088 263 0
+1950 26 0
+-731 2764 0
+3013 -568 0
+1988 894 0
+-714 -3180 0
+2387 1897 0
+-1733 2694 0
+308 -775 0
+2363 956 0
+1135 1053 0
+-627 3189 0
+1210 749 0
+3406 -3383 0
+1146 372 0
+-2443 699 0
+2521 1508 0
+-2273 -977 0
+-2683 -556 0
+150 2424 0
+826 -3282 0
+-102 -3025 0
+1444 626 0
+2961 -3136 0
+-2797 -3365 0
+-108 1478 0
+-2871 -2600 0
+-2276 -879 0
+-1196 -334 0
+-326 2544 0
+3254 2155 0
+993 1196 0
+2934 -1859 0
+1902 -2331 0
+-1869 -793 0
+2954 -246 0
+-2333 1945 0
+-437 -927 0
+658 -2905 0
+-1372 -1939 0
+1661 346 0
+134 1336 0
+-608 2647 0
+-301 -709 0
+-3472 -1792 0
+143 598 0
+2300 2450 0
+-604 976 0
+1186 2328 0
+-499 3321 0
+2292 1166 0
+-1859 1726 0
+1029 2238 0
+-2736 -1971 0
+2839 1707 0
+-1807 -2206 0
+505 811 0
+-1196 -2109 0
+-3099 -2580 0
+1649 3288 0
+823 349 0
+-1361 1594 0
+-3238 -640 0
+2483 1037 0
+-379 -489 0
+-2480 1562 0
+2372 -35 0
+-1447 -3198 0
+1848 2328 0
+-2364 -406 0
+222 -146 0
+391 2190 0
+3030 2343 0
+-1776 586 0
+1046 1167 0
+443 1263 0
+-910 -1998 0
+512 1875 0
+-3448 3437 0
+3203 -1107 0
+-1305 1240 0
+-353 227 0
+-2446 391 0
+-2257 1679 0
+1743 2941 0
+2579 2988 0
+-3336 2865 0
+1550 -2269 0
+421 -2434 0
+-1834 2172 0
+-553 169 0
+716 -2477 0
+2024 1213 0
+-3232 -129 0
+124 -2605 0
+-3465 -1028 0
+1382 -1158 0
+2622 495 0
+-2393 2485 0
+2511 -2066 0
+3378 2135 0
+-479 -2677 0
+-1756 -2276 0
+3155 -2105 0
+-3265 752 0
+3092 2062 0
+1910 -1591 0
+-2507 -1954 0
+3435 1993 0
+-2852 -1015 0
+-2950 2827 0
+-3093 140 0
+1193 -1744 0
+2138 -2768 0
+-1350 1468 0
+-1014 -2740 0
+-509 1361 0
+2402 967 0
+2165 955 0
+-1724 1115 0
+1986 -200 0
+3162 1170 0
+325 -1369 0
+2558 2287 0
+-1841 -2926 0
+-2523 2593 0
+-686 2945 0
+-1142 -1825 0
+3417 250 0
+1492 -590 0
+-557 3155 0
+2566 -2681 0
+2089 1649 0
+2499 2300 0
+-789 -2093 0
+2303 -1557 0
+2442 -1797 0
+3226 2250 0
+-845 -3397 0
+-345 -817 0
+1183 46 0
+3207 3364 0
+588 -2426 0
+-2374 -1609 0
+2289 -1749 0
+2291 2297 0
+-2402 -3046 0
+1270 1680 0
+-2827 -2632 0
+569 -3029 0
+-952 -546 0
+-2435 1140 0
+-2060 3237 0
+-3386 -486 0
+726 -1532 0
+-392 -946 0
+1436 2252 0
+-2573 -3160 0
+-233 -3349 0
+2360 -391 0
+376 -1769 0
+2161 2547 0
+-2285 1381 0
+-290 -2395 0
+-2405 -229 0
+2927 -1502 0
+93 2328 0
+-2337 -3371 0
+-2846 2973 0
+-394 -893 0
+2598 1854 0
+-1101 1113 0
+1896 -1483 0
+1228 982 0
+-833 -273 0
+2527 -2381 0
+-1783 3379 0
+-372 1354 0
+3046 2357 0
+457 651 0
+1310 -174 0
+1617 358 0
+-964 -2118 0
+774 1863 0
+-2852 -1234 0
+-2514 2693 0
+2295 -2705 0
+-1519 1602 0
+-1989 -1866 0
+2930 -2554 0
+-2855 -383 0
+2171 -2685 0
+487 1245 0
+3005 1558 0
+1987 1051 0
+-617 2835 0
+927 -2710 0
+-3424 -749 0
+-2935 2906 0
+3376 -3127 0
+-2508 -3362 0
+-1309 313 0
+2181 -3301 0
+-515 -1902 0
+-335 -1798 0
+2875 -3037 0
+177 -414 0
+-1032 414 0
+912 2052 0
+1694 2016 0
+227 3172 0
+-952 2182 0
+2684 -1545 0
+-3025 867 0
+23 3253 0
+1322 1094 0
+-441 -953 0
+2010 2508 0
+1285 2976 0
+-252 -23 0
+-2137 1494 0
+-2648 1361 0
+142 224 0
+-1279 -196 0
+962 353 0
+-617 -1707 0
+1540 638 0
+2841 -1227 0
+-2226 3137 0
+1581 -544 0
+2111 -3185 0
+2084 1608 0
+-1029 -2517 0
+1321 47 0
+1907 -1150 0
+-1343 -2723 0
+-1597 -1443 0
+-3357 1400 0
+-2753 -1856 0
+-965 882 0
+-1923 -138 0
+622 -2602 0
+868 275 0
+2628 2279 0
+-1857 402 0
+-2207 -180 0
+-2886 -2794 0
+1997 -2343 0
+74 -161 0
+2665 -3224 0
+-3014 -2243 0
+-2995 2865 0
+1242 3064 0
+-1568 -1407 0
+-1778 1303 0
+876 -694 0
+2626 -1644 0
+116 1822 0
+-1365 -1770 0
+-1586 2211 0
+-901 2776 0
+-1518 -3421 0
+1382 69 0
+-1368 -3206 0
+-1616 -2283 0
+2716 -1361 0
+1169 1439 0
+-765 -2081 0
+1923 633 0
+-2038 3235 0
+-1775 2177 0
+-565 -135 0
+-3230 -413 0
+-3021 3025 0
+1403 3442 0
+-1112 -332 0
+-3379 -2974 0
+-1516 1837 0
+-2511 -2933 0
+-2394 1757 0
+-1983 -1069 0
+-441 -2191 0
+-1557 510 0
+655 2203 0
+1805 -2451 0
+-884 -3111 0
+1299 -2970 0
+-2109 2315 0
+3395 2093 0
+-477 2179 0
+2916 -1202 0
+-30 604 0
+-1580 -1654 0
+-341 2358 0
+-307 1831 0
+-3054 -3006 0
+529 3284 0
+2382 3038 0
+1152 -1868 0
+643 -3015 0
+-2026 -1186 0
+-2433 -505 0
+1871 1654 0
+2980 -873 0
+-2758 -1014 0
+2619 3436 0
+1291 1451 0
+-775 -656 0
+2134 1665 0
+-1885 -304 0
+1004 -1681 0
+-3116 492 0
+-3210 -512 0
+-2058 2599 0
+-2251 -1782 0
+1514 2324 0
+779 -1213 0
+-2657 2920 0
+3474 643 0
+-153 1962 0
+2640 -2190 0
+-2921 1045 0
+-1837 1195 0
+-1764 3498 0
+506 1706 0
+2726 3322 0
+2224 -2289 0
+-1599 -2238 0
+-3224 -1936 0
+-2215 815 0
+2307 -402 0
+2027 3113 0
+-1608 -2195 0
+-2443 -33 0
+2481 -42 0
+3072 -1318 0
+-3207 1938 0
+2734 2472 0
+-1261 2111 0
+-3272 2320 0
+-3041 -2213 0
+3030 -3149 0
+-1067 2589 0
+-1970 -3432 0
+-160 -97 0
+-1122 934 0
+-1941 2170 0
+1268 -3091 0
+-2004 -2791 0
+-549 -44 0
+-2129 2253 0
+3039 -2274 0
+-555 -2592 0
+-1439 -559 0
+-3071 1592 0
+218 -1646 0
+2986 254 0
+3375 1650 0
+-2930 2602 0
+2587 2168 0
+-246 1318 0
+-1285 -1564 0
+1103 1693 0
+-837 41 0
+-774 -356 0
+-592 2652 0
+2408 2490 0
+-3129 1136 0
+2417 -1559 0
+-828 -1057 0
+2776 3251 0
+2588 434 0
+86 510 0
+2795 -699 0
+-1415 -3196 0
+846 -918 0
+-3284 -3463 0
+2099 -2543 0
+-269 -1487 0
+-2084 2717 0
+2709 2847 0
+2888 205 0
+-3233 1846 0
+733 340 0
+-1740 -1128 0
+-1322 1712 0
+-2463 -946 0
+-1618 -3216 0
+-3389 -2830 0
+2607 -78 0
+-2935 2918 0
+1187 -684 0
+61 3264 0
+1981 -2973 0
+1174 -1991 0
+-580 -117 0
+-768 3244 0
+2481 -2214 0
+1744 2083 0
+1389 -2357 0
+1078 2831 0
+96 -502 0
+2721 -560 0
+698 268 0
+-123 -1340 0
+-3331 -1020 0
+1686 -1005 0
+-2369 1023 0
+-1981 3003 0
+2657 -3345 0
+2496 -1677 0
+-1081 1159 0
+-1954 308 0
+-2553 -3360 0
+-929 -312 0
+724 -3242 0
+1688 -1281 0
+-2750 2721 0
+1530 -1439 0
+-2841 315 0
+1597 -3080 0
+-1949 -1387 0
+-302 2675 0
+-3033 230 0
+-1661 2064 0
+2636 -2656 0
+2182 3275 0
+3192 -2817 0
+711 -1937 0
+-1834 2036 0
+-1522 -3161 0
+126 2274 0
+1401 2697 0
+2123 -1201 0
+-2447 -2326 0
+-1064 3426 0
+537 -932 0
+1685 -1006 0
+-678 760 0
+-557 2591 0
+371 2494 0
+140 -3297 0
+-1168 -1224 0
+264 505 0
+-3011 -3171 0
+904 901 0
+1342 2385 0
+1194 356 0
+3262 -558 0
+-3043 2488 0
+-2476 -2941 0
+-1359 39 0
+-1381 -2064 0
+-384 366 0
+1125 124 0
+725 -384 0
+3329 -388 0
+1296 -81 0
+-3086 -3010 0
+-2966 1814 0
+-2756 3131 0
+-3342 1365 0
+2746 -3286 0
+-1968 -457 0
+1110 1167 0
+219 2676 0
+-769 749 0
+-1733 1080 0
+2939 628 0
+-706 246 0
+-3481 3422 0
+200 245 0
+1222 215 0
+2659 1244 0
+1575 -161 0
+1054 -795 0
+-1951 3272 0
+3415 2609 0
+49 -1844 0
+2907 1557 0
+3500 -2068 0
+1161 2586 0
+1804 -2542 0
+-486 -3350 0
+1258 -1594 0
+-3139 -1067 0
+3231 -3434 0
+1498 -3265 0
+-3262 657 0
+1644 158 0
+2487 -2805 0
+2535 1909 0
+-2275 1464 0
+704 1599 0
+-1940 3072 0
+3024 -1435 0
+1168 -208 0
+1832 2758 0
+3065 291 0
+-1216 2391 0
+-2202 -1902 0
+-2884 3340 0
+-1533 1260 0
+2247 -342 0
+1286 2725 0
+-915 -436 0
+545 2578 0
+-2926 1749 0
+-1823 -1033 0
+150 -2529 0
+284 -2738 0
+2984 2445 0
+128 386 0
+-153 1521 0
+1547 2456 0
+-2067 -2600 0
+-854 1595 0
+-1006 -2686 0
+912 319 0
+1502 1164 0
+-933 -2672 0
+2369 -1782 0
+1291 1388 0
+1441 -246 0
+620 -3298 0
+2464 -2913 0
+-906 271 0
+-2495 537 0
+2982 1013 0
+401 -2267 0
+-30 1549 0
+641 265 0
+-135 2884 0
+-2544 -2474 0
+2028 2356 0
+-677 951 0
+-2601 2010 0
+1257 -1194 0
+930 2757 0
+-1037 2829 0
+-3082 269 0
+1009 2075 0
+-1985 560 0
+323 2821 0
+3473 2425 0
+2105 2515 0
+-2860 1104 0
+-1292 1567 0
+2645 2999 0
+1078 -3191 0
+2503 -2224 0
+1760 -2248 0
+-2874 -2961 0
+1290 1013 0
+-247 -1045 0
+2549 -2411 0
+948 -1848 0
+-3482 -1587 0
+1788 -1808 0
+-1855 -1780 0
+-1727 -2707 0
+-3217 -165 0
+2335 -1500 0
+322 3076 0
+-2319 -3294 0
+2960 -1284 0
+1691 1295 0
+146 -1274 0
+-815 1387 0
+698 -494 0
+2761 915 0
+-2403 -850 0
+-1913 22 0
+2023 -2620 0
+-896 -260 0
+-3489 2913 0
+2013 -1334 0
+2351 2243 0
+-320 -1192 0
+146 -445 0
+-2685 -3430 0
+-1772 -1421 0
+2964 209 0
+3214 -255 0
+-421 936 0
+-3416 882 0
+2835 2959 0
+615 -1538 0
+-370 -1007 0
+-517 1308 0
+-608 -2932 0
+-1137 2047 0
+-1276 827 0
+2660 1427 0
+282 1474 0
+788 696 0
+979 -3298 0
+-630 -1475 0
+2621 1558 0
+-593 -1813 0
+-3086 3059 0
+-848 739 0
+1871 2026 0
+1724 -315 0
+-923 698 0
+1218 -2790 0
+3079 -595 0
+-951 -2040 0
+1548 2781 0
+-2585 -25 0
+2233 113 0
+-1272 3158 0
+540 247 0
+2528 2095 0
+382 -2279 0
+-1598 1868 0
+-2417 -2040 0
+1168 -2456 0
+-615 356 0
+-2995 580 0
+369 -1790 0
+361 1503 0
+3074 -2075 0
+-1100 -816 0
+1590 1517 0
+-1420 -2658 0
+-3040 -421 0
+-3028 -2568 0
+-1826 2793 0
+-1242 2929 0
+1077 -1987 0
+-1945 2192 0
+-2157 -2792 0
+-681 2112 0
+1464 -2755 0
+-31 888 0
+-2680 543 0
+-976 1238 0
+1474 729 0
+-2526 3452 0
+-3129 1259 0
+1194 -531 0
+-2402 -148 0
+1607 -789 0
+-1215 1208 0
+1302 -744 0
+-2169 -2693 0
+-892 -2376 0
+1888 -831 0
+-5 2237 0
+1145 1339 0
+3419 39 0
+-3458 3325 0
+192 -535 0
+2040 54 0
+-2371 -3452 0
+-2565 338 0
+-2142 -1476 0
+-1459 2539 0
+-1440 -2512 0
+-324 -2657 0
+-2904 -2875 0
+2918 -875 0
+-1858 2546 0
+-1608 3492 0
+-1958 -37 0
+-780 1295 0
+-1652 117 0
+-2643 2490 0
+-2465 -3490 0
+-1292 171 0
+-1690 572 0
+2100 47 0
+-2030 474 0
+2658 -1529 0
+2075 -2785 0
+-919 -3263 0
+138 1767 0
+616 1078 0
+-1153 2103 0
+-2212 -309 0
+2232 -50 0
+2552 -2200 0
+-3224 2343 0
+-3258 -527 0
+-1858 1323 0
+-729 1278 0
+-550 1634 0
+-2029 -3 0
+-2726 2150 0
+1631 2903 0
+2333 1998 0
+-352 1985 0
+1316 -1182 0
+-2208 427 0
+2340 -2019 0
+502 1629 0
+2074 -1504 0
+1128 -1559 0
+2651 2051 0
+2580 -1711 0
+-341 2441 0
+1853 -1806 0
+-1427 -1561 0
+2345 -1655 0
+3469 1123 0
+563 1057 0
+-2738 2716 0
+-141 2213 0
+319 -3030 0
+-519 2863 0
+-1660 373 0
+613 1423 0
+1685 1678 0
+-1727 -1962 0
+-2341 2781 0
+2103 -2963 0
+-2645 1092 0
+-328 -1609 0
+-1377 -2492 0
+-509 2571 0
+2959 941 0
+3482 2150 0
+579 1303 0
+-2923 -1602 0
+-3258 -1732 0
+3146 2073 0
+1822 3012 0
+1478 -1024 0
+-2831 2122 0
+-1367 -1634 0
+-2201 -1125 0
+201 -190 0
+1918 44 0
+-1761 -2586 0
+-3179 -2413 0
+-681 -2092 0
+1901 2822 0
+1484 1711 0
+391 -1807 0
+-2062 550 0
+418 -2044 0
+-2708 -2261 0
+-3227 43 0
+1110 -417 0
+-2848 -2777 0
+-694 1016 0
+324 1676 0
+1319 -2865 0
+-2817 414 0
+2537 912 0
+-347 2670 0
+3089 966 0
+-2825 3269 0
+1229 -1103 0
+107 437 0
+1502 -3162 0
+1209 -2843 0
+2749 2507 0
+1209 1051 0
+-1263 3234 0
+2258 606 0
+-287 -1539 0
+985 1819 0
+-1776 -3304 0
+1555 -3228 0
+2901 -399 0
+-411 -1407 0
+3465 2261 0
+-642 2209 0
+-1073 1321 0
+-2221 1044 0
+-1119 -3481 0
+3494 -3476 0
+1943 4 0
+-1823 527 0
+2550 -510 0
+2154 -619 0
+2964 -1784 0
+-1578 -2181 0
+174 -1869 0
+-1869 3062 0
+2218 2666 0
+-975 2328 0
+-2480 3216 0
+2054 -859 0
+-2275 3202 0
+-1969 -3048 0
+545 2309 0
+-3261 2725 0
+1435 -2518 0
+-1582 2434 0
+682 -1694 0
+-2485 -753 0
+-1694 -1611 0
+2338 2303 0
+2575 -1795 0
+2981 -813 0
+2910 -3325 0
+1176 1553 0
+-908 -1093 0
+2298 -1151 0
+-2301 -653 0
+421 520 0
+-566 1830 0
+-3335 -961 0
+-2474 235 0
+-3043 2006 0
+1532 343 0
+-1444 -820 0
+-756 -1382 0
+-927 671 0
+-717 -1538 0
+-1644 -3294 0
+3283 765 0
+1815 -3276 0
+-2369 -175 0
+-1612 557 0
+2467 43 0
+-340 -1385 0
+3214 1607 0
+1921 -1973 0
+1428 -1029 0
+-2009 3088 0
+-923 1189 0
+757 -1402 0
+183 -3116 0
+-2157 -1578 0
+423 3228 0
+1084 546 0
+-938 -2253 0
+-2378 -323 0
+-1602 -2334 0
+3257 2082 0
+-1679 -461 0
+2698 -2207 0
+-1723 -1962 0
+-134 -1818 0
+-582 517 0
+2410 -2759 0
+-2351 -2870 0
+-1828 -2046 0
+3149 -342 0
+1046 -1965 0
+982 2075 0
+-2934 -2187 0
+963 -2974 0
+-43 384 0
+-325 -1000 0
+1204 2158 0
+2052 -3197 0
+1548 -2366 0
+2088 145 0
+-1333 1536 0
+1535 2167 0
+3242 471 0
+2303 2217 0
+1016 858 0
+3375 -2665 0
+2216 -452 0
+2470 2325 0
+2927 2598 0
+1370 -2539 0
+314 1176 0
+-980 -2622 0
+-768 -1563 0
+-534 -2064 0
+-2257 -52 0
+-3111 1529 0
+-2737 -3499 0
+-1890 1716 0
+2046 1319 0
+2785 1520 0
+-420 693 0
+310 -203 0
+-1771 293 0
+2631 -419 0
+2447 -2473 0
+2955 -3040 0
+-80 -1025 0
+-1300 -2916 0
+-2127 2673 0
+-2865 1503 0
+-3130 2517 0
+116 -627 0
+-3353 3400 0
+-287 807 0
+-298 3230 0
+-876 3317 0
+2753 -1939 0
+-1865 3252 0
+-1736 -254 0
+1704 914 0
+-479 862 0
+252 -1131 0
+3500 2147 0
+5 378 0
+-953 1375 0
+-2258 811 0
+3395 2344 0
+-1945 3154 0
+-570 -3188 0
+-2184 -1370 0
+-1678 -3058 0
+-1980 -941 0
+2251 -2249 0
+-3443 1501 0
+625 -1435 0
+-101 1492 0
+1604 1491 0
+-1997 -2470 0
+-2877 -1858 0
+1962 -789 0
+-1614 1721 0
+2598 -1393 0
+-65 2290 0
+416 -836 0
+1460 2307 0
+-1687 131 0
+3304 -2420 0
+-1287 -2478 0
+2745 956 0
+-420 -1564 0
+-1676 650 0
+634 -611 0
+-311 -2050 0
+-694 3060 0
+-668 -2262 0
+-1687 1354 0
+-1938 2773 0
+-1158 2842 0
+-1189 -1425 0
+-1476 416 0
+-1453 283 0
+-1145 -2642 0
+1822 -266 0
+-2643 939 0
+428 3438 0
+1048 918 0
+2771 559 0
+-878 2533 0
+3439 -976 0
+-2658 2895 0
+1521 986 0
+1280 1743 0
+2136 3293 0
+960 -1918 0
+3054 976 0
+-3450 2762 0
+2822 -971 0
+-355 2958 0
+27 2539 0
+2367 -3015 0
+-2462 -684 0
+-18 150 0
+1578 -3 0
+1132 -1415 0
+-3001 -2433 0
+-2752 -1731 0
+-2333 -584 0
+-1550 -2201 0
+-2906 431 0
+-1986 2495 0
+-1705 -1590 0
+-1761 -3290 0
+1891 -1117 0
+-611 419 0
+116 -642 0
+1101 2177 0
+-2226 3429 0
+-3188 -774 0
+1420 -728 0
+1869 942 0
+2738 -1400 0
+-1406 -2792 0
+-2821 -3187 0
+2776 928 0
+971 -2212 0
+3280 2049 0
+-1850 880 0
+-3293 476 0
+-380 2380 0
+-193 3306 0
+-1605 -3435 0
+-1356 -2381 0
+-1719 -2984 0
+578 -2699 0
+-809 -2645 0
+-1900 3132 0
+1494 -564 0
+182 1200 0
+-3362 -2666 0
+-1997 44 0
+2639 -1714 0
+-1059 -2144 0
+990 2469 0
+-907 1668 0
+-612 587 0
+-2600 2580 0
+2921 -178 0
+-3292 1632 0
+-3248 -2147 0
+758 2674 0
+-2078 -1136 0
+-244 -1885 0
+-1534 -1649 0
+757 3094 0
+2473 1594 0
+3493 1193 0
+-3072 547 0
+-629 -2075 0
+-1364 -2191 0
+-2514 -2462 0
+-3047 1180 0
+-1337 481 0
+-545 2572 0
+1800 277 0
+-104 -1699 0
+-544 -3440 0
+3485 -14 0
+2705 3045 0
+3084 2554 0
+1498 1230 0
+1608 2579 0
+566 1278 0
+-180 -1403 0
+3250 2630 0
+3472 2232 0
+-1618 -1427 0
+2500 2122 0
+15 -2539 0
+152 -1529 0
+-974 -1388 0
+2282 1876 0
+-632 -1766 0
+-148 -3279 0
+2273 -2967 0
+1686 1770 0
+-1440 3322 0
+2426 -2309 0
+656 1053 0
+2986 -1470 0
+433 -720 0
+231 -2347 0
+-1703 -276 0
+-3402 -1587 0
+-2853 -2933 0
+-2758 -1678 0
+1938 -2851 0
+-2158 1540 0
+-555 3172 0
+-2757 -3289 0
+-331 846 0
+2109 1574 0
+-341 3240 0
+-2747 -3012 0
+647 -2607 0
+3183 1895 0
+2906 1023 0
+-84 -3120 0
+876 647 0
+-2899 -946 0
+-3225 -2837 0
+2102 -155 0
+1210 -2053 0
+3409 1129 0
+-2014 -1475 0
+-2963 2512 0
+1561 3322 0
+1878 697 0
+-1451 -574 0
+2381 -2801 0
+3490 -982 0
+-1802 -2712 0
+-761 2413 0
+1781 -561 0
+1082 799 -1149 0
+-1062 -1529 2652 0
+2363 500 3306 0
+2250 -91 1922 0
+2147 1075 -2259 0
+-268 -2018 2800 0
+-2562 -2265 1995 0
+999 3369 -3209 0
+-2979 1282 -3420 0
+-422 538 2493 0
+3131 -2637 326 0
+1314 2297 -3477 0
+1496 -1649 -2473 0
+-1039 3316 1521 0
+-2025 1801 -3438 0
+-1859 -52 -1217 0
+-2931 3263 2609 0
+2518 -714 1969 0
+-2024 1639 1828 0
+1574 -1601 -2914 0
+-666 1107 2267 0
+1095 1354 3424 0
+-596 1067 -3108 0
+-997 2541 3470 0
+-2295 1220 1417 0
+1934 -1906 2801 0
+1864 2368 1252 0
+-179 -1232 -3158 0
+780 2470 3290 0
+689 -483 -2479 0
+2542 -482 -452 0
+-1619 177 2032 0
+2777 -3275 3456 0
+-1348 86 556 0
+-2757 1958 3153 0
+1639 1848 3142 0
+-1903 -1115 1746 0
+7 1857 -1532 0
+2713 2548 -3197 0
+-2673 848 -2193 0
+-2067 -2696 -2452 0
+-2714 97 2934 0
+3475 -2865 -2721 0
+144 275 1231 0
+2296 2425 -1534 0
+144 -1449 -515 0
+1676 -1256 57 0
+-114 -128 -1862 0
+-374 -1281 -1198 0
+-619 -2915 -3136 0
+661 1049 -2618 0
+-2510 1292 2564 0
+953 -1379 2156 0
+429 1747 3177 0
+-721 -2937 3339 0
+1084 2352 -2608 0
+-196 2262 1881 0
+2836 503 414 0
+455 -1688 2552 0
+-1645 -1660 -3408 0
+-155 1997 -3125 0
+-475 -2721 1308 0
+562 435 1356 0
+223 -1691 512 0
+3275 514 3238 0
+-2933 1414 -2399 0
+-2533 -858 2110 0
+2854 -2808 236 0
+-637 2474 -2369 0
+-3068 1641 -78 0
+504 1271 -939 0
+-2955 3042 -1724 0
+-2478 822 866 0
+-2448 1516 329 0
+906 2528 -3479 0
+-425 -2115 2400 0
+-1864 -3024 -2167 0
+-3056 2326 2928 0
+-1435 1194 -3296 0
+3336 -1419 -3246 0
+1469 1879 -1865 0
+-3136 -2632 1634 0
+-408 2442 -1567 0
+-2424 -244 2452 0
+-1640 -739 -1151 0
+955 655 2702 0
+111 -2748 -1497 0
+-541 -2070 -1137 0
+-1350 3138 -178 0
+-1631 -877 1374 0
+-2854 1146 -1661 0
+2528 -2684 1015 0
+-2656 -2585 1036 0
+1361 281 479 0
+-3088 -2275 -979 0
+-2491 -2476 340 0
+482 2409 -1142 0
+346 1477 -1522 0
+-3150 1398 381 0
+389 -485 433 0
+2811 1795 -3058 0
+2424 -1502 3205 0
+1254 -2941 -2979 0
+-1743 -346 -2559 0
+1516 695 2110 0
+-3464 550 -3207 0
+-394 147 -3462 0
+-1039 -3400 -447 0
+1442 2007 -1830 0
+2514 512 -1846 0
+835 542 -68 0
+-1491 2379 2356 0
+1488 56 373 0
+766 2692 102 0
+337 -866 2323 0
+-3469 -1020 -1042 0
+-758 -1548 670 0
+1977 -297 45 0
+2535 -2484 83 0
+2747 1700 -1267 0
+-2822 180 -1745 0
+-1429 255 2139 0
+3380 -3081 -2647 0
+846 -436 3407 0
+-2416 937 -2764 0
+-1138 -3439 -2428 0
+2539 686 3333 0
+217 -3439 -3388 0
+-2923 767 -564 0
+377 3326 93 0
+16 1176 2548 0
+-1637 -459 879 0
+-1647 3 -892 0
+671 -624 -173 0
+-2110 665 1862 0
+-1025 1988 -1831 0
+2303 2621 -2290 0
+3053 1094 -2022 0
+2945 2301 629 0
+-1254 3023 1174 0
+2675 3261 899 0
+2197 -1559 -2463 0
+1317 785 1570 0
+-896 -1998 -1081 0
+2169 1865 752 0
+3075 1736 -1089 0
+-927 -2336 -1103 0
+2834 -3313 -1329 0
+2924 2395 1919 0
+-547 2309 2278 0
+-1949 2987 1187 0
+2819 -362 -1098 0
+-2952 384 -549 0
+-645 -436 1394 0
+-3015 2942 -851 0
+-1384 71 2983 0
+-1447 -3370 456 0
+3272 -1399 -2670 0
+1867 -1921 2855 0
+-1157 1754 692 0
+2317 1903 -2946 0
+-146 -187 -2699 0
+-983 -549 2626 0
+-829 -3034 3294 0
+-2563 -1256 1548 0
+3420 -522 -2752 0
+-3208 -858 2912 0
+-537 2527 2777 0
+-804 2644 2855 0
+2724 -3387 -2733 0
+2426 1798 974 0
+2915 -446 -576 0
+-329 -253 -2197 0
+-1008 -3134 3336 0
+2588 905 -3039 0
+407 -2789 1412 0
+3254 943 -1099 0
+-58 2631 783 0
+3339 -828 1941 0
+1960 3223 2 0
+-3001 1225 -2613 0
+2551 -3463 2566 0
+1512 2488 -2932 0
+-1971 1561 -2243 0
+-3461 -1030 66 0
+-2445 1440 1855 0
+-2805 2919 899 0
+-328 1106 3053 0
+2585 -3308 -821 0
+-646 -2752 -465 0
+-2706 -2384 3078 0
+1198 -1644 1650 0
+-2601 1452 -1293 0
+-744 2527 -1023 0
+2602 -628 3343 0
+-1172 501 -3195 0
+794 2462 1509 0
+1479 2589 -816 0
+-433 758 2111 0
+2805 3448 -3067 0
+-1024 2340 793 0
+1604 2926 524 0
+-1177 1544 -1431 0
+646 -418 1323 0
+3184 -241 -560 0
+2922 -545 3109 0
+-296 2923 -1777 0
+-656 -1948 3219 0
+1059 1741 -1768 0
+504 -191 -1082 0
+551 -2333 -2265 0
+-2432 3153 -2282 0
+-1801 883 1637 0
+126 965 671 0
+1430 -683 1919 0
+2370 2268 -65 0
+-3143 -93 -852 0
+-725 -1811 -2900 0
+2208 -2642 -1392 0
+2404 987 941 0
+-1351 1876 -1013 0
+-1151 937 3451 0
+-116 940 2283 0
+-1874 3365 -663 0
+828 578 2653 0
+1221 -1329 621 0
+1537 -2996 3014 0
+-762 122 1556 0
+2041 -3395 -945 0
+-3162 123 88 0
+-1757 -3278 -904 0
+-1925 2169 -1414 0
+-868 -1311 377 0
+3394 -2796 823 0
+344 2013 722 0
+3241 3408 -2062 0
+3417 3252 -1908 0
+-267 3341 264 0
+945 -2635 -3444 0
+480 -440 -754 0
+1092 -139 12 0
+1810 -2688 2013 0
+2726 370 358 0
+2784 789 1542 0
+-1874 1020 1014 0
+-3475 2267 3104 0
+-2315 2207 -2975 0
+2597 2999 -1267 0
+-98 -1157 -2468 0
+1620 -1219 3156 0
+-912 -837 3244 0
+-1957 1854 60 0
+-1382 28 2122 0
+-735 -1844 -3107 0
+1089 1653 -365 0
+-1040 -938 -955 0
+2317 2740 -74 0
+1998 -1955 -2334 0
+3319 -2797 1461 0
+-2474 128 1357 0
+-1934 1769 -772 0
+-52 2134 -258 0
+-2090 162 781 0
+1122 -2065 2262 0
+2820 2574 -1861 0
+-3441 -2827 3165 0
+-933 -3187 2507 0
+1774 -2200 1642 0
+930 -79 3180 0
+3019 -75 1948 0
+-2523 2229 -98 0
+-1948 -1609 -596 0
+1579 1712 -804 0
+3258 2616 -1228 0
+2176 -1295 2839 0
+-686 -1631 -210 0
+-1307 -2757 -291 0
+-31 -2221 2146 0
+1595 -1258 -1740 0
+-3006 3231 -2666 0
+-543 -929 -2765 0
+401 3296 3486 0
+3010 -1954 -1758 0
+-1255 -2504 564 0
+1496 1159 -870 0
+-295 175 -86 0
+-2362 11 -144 0
+-2243 13 -1384 0
+1296 1623 -1649 0
+1042 -2255 870 0
+-2524 -1036 -2388 0
+-2138 1608 3406 0
+-2144 1404 2844 0
+427 1924 -938 0
+-735 -3217 -679 0
+-2614 1751 2400 0
+-1271 1887 3185 0
+1129 441 -485 0
+1819 424 -2960 0
+-315 -3341 -3184 0
+-619 221 -2446 0
+-3008 158 -3094 0
+3187 1672 3254 0
+-3411 3067 1815 0
+1696 -2721 2161 0
+2055 1202 -1649 0
+-1396 364 -2551 0
+-1396 -680 -2364 0
+1723 -2006 2608 0
+-315 2449 2339 0
+-1940 389 -3169 0
+-3288 -3194 -2618 0
+109 980 80 0
+1221 2117 3091 0
+46 -2027 2941 0
+-104 -1759 -1022 0
+2530 2491 -961 0
+966 2121 -1857 0
+1789 -502 -2804 0
+1630 -3497 1844 0
+1022 818 -2440 0
+707 -2649 -192 0
+1306 1179 3103 0
+-2126 2613 1798 0
+-2719 -1266 84 0
+-2153 -1557 386 0
+-1310 -1964 790 0
+-568 3313 -2022 0
+1281 807 3274 0
+2310 2532 1707 0
+-3185 -221 -3331 0
+-1736 1700 1599 0
+-2355 -1085 -412 0
+-1582 253 2086 0
+-1492 -2518 970 0
+3138 -1085 1894 0
+466 -2055 329 0
+-1155 -2319 1349 0
+1846 -923 1818 0
+2124 -403 332 0
+-1867 -2026 -3329 0
+-366 548 -2460 0
+2573 -59 -2354 0
+-622 837 2798 0
+1052 -2462 2563 0
+-2826 2763 381 0
+-1770 2885 3167 0
+3194 -1958 -131 0
+-1160 1511 2297 0
+1149 2229 1302 0
+-2904 -2221 -1979 0
+1258 -3349 2566 0
+-2486 -1755 -2013 0
+-1755 2638 1667 0
+-573 -1283 -2926 0
+593 -3212 -996 0
+-1916 -1939 -2895 0
+-1279 -3264 2824 0
+1418 -1448 844 0
+1989 -2430 -718 0
+2355 684 -625 0
+256 432 803 0
+-3199 -1707 -1614 0
+1239 -2109 -85 0
+-2300 -869 -1844 0
+-3084 -2897 -2764 0
+1947 2561 -1714 0
+-2205 -1945 874 0
+1442 -3089 -1298 0
+3002 1746 -1327 0
+-1957 -787 1177 0
+-1374 -3070 -2002 0
+298 2695 -1118 0
+2300 2181 2609 0
+1561 76 2481 0
+3396 -2312 2291 0
+-733 3112 598 0
+-1586 -2319 3137 0
+-849 -2495 -324 0
+-3007 215 1691 0
+983 -132 -2268 0
+-3282 2587 3302 0
+1005 580 -2168 0
+3260 2153 2544 0
+-358 861 1632 0
+-3267 636 2408 0
+2321 -2403 1582 0
+1091 92 -2410 0
+1887 1775 -923 0
+-3015 2869 -1852 0
+2926 -114 1518 0
+2964 1210 -1745 0
+-571 1877 -1006 0
+-2921 -2955 -3431 0
+2014 1658 -3321 0
+2382 -1628 2807 0
+-1517 -3483 -636 0
+2017 1063 1868 0
+1180 1460 -2484 0
+1011 -836 2380 0
+2678 3403 257 0
+450 1478 999 0
+-2159 -3319 -3409 0
+-1790 -2974 -1722 0
+-1140 -2954 -1901 0
+2632 3094 -1883 0
+-1742 -1623 2764 0
+-1833 2137 1145 0
+3336 -3132 -2682 0
+-1267 586 2296 0
+2554 -63 461 0
+-1999 778 -1922 0
+-2743 1464 -1904 0
+-3423 2042 1050 0
+908 1545 -3037 0
+478 1768 -738 0
+2486 931 -2857 0
+3305 3105 3478 0
+-377 3248 -2955 0
+-142 -3113 1855 0
+2026 1240 2873 0
+-2521 1214 1622 0
+-2803 2669 2695 0
+416 -2546 -1989 0
+960 -2362 -316 0
+3222 -3048 2634 0
+2939 779 -1606 0
+-1222 -327 3315 0
+-3037 -2592 -393 0
+582 3211 -1925 0
+159 -2367 2607 0
+2126 3155 2697 0
+-1806 -2169 -808 0
+1653 2214 -2426 0
+-1826 459 -2450 0
+1561 -529 2314 0
+1927 -1681 -345 0
+-2842 1294 -781 0
+-3494 2445 3179 0
+1313 877 3039 0
+-654 -2435 1527 0
+-818 -2188 -1535 0
+-3375 -1181 2388 0
+-3269 -896 1088 0
+83 2078 671 0
+-786 2716 2506 0
+968 -696 2321 0
+2187 -3108 -3362 0
+-1829 -876 1845 0
+-3298 -864 2886 0
+-3492 -2857 -3391 0
+3450 1685 -512 0
+-2876 2700 2566 0
+979 2192 -119 0
+-318 2463 -1792 0
+2714 -2020 990 0
+433 2768 -1584 0
+-2623 -2477 -3443 0
+883 -2436 2775 0
+111 -2471 773 0
+923 -2544 -2057 0
+-1353 -972 -1107 0
+398 -14 -2051 0
+-917 -877 -2508 0
+2407 -3244 -1692 0
+2139 -503 2057 0
+-1216 -1549 -528 0
+-1242 -2885 -300 0
+1211 869 -1068 0
+-2240 2495 -1351 0
+-2500 3300 -1171 0
+2062 1765 1073 0
+-2765 -3217 70 0
+-84 1233 3368 0
+-828 -2274 -591 0
+-508 113 2594 0
+2164 171 -1264 0
+-2720 58 -2676 0
+2453 1407 -210 0
+-2485 -3382 859 0
+-1383 64 1674 0
+2779 311 765 0
+-693 2101 2420 0
+-876 -535 1557 0
+56 -1783 -1800 0
+410 507 -1177 0
+-3129 -2517 -3405 0
+-1513 -3264 1346 0
+1390 -56 -1004 0
+2669 2153 996 0
+92 134 -1878 0
+2778 -1766 -1445 0
+-1575 -2267 3070 0
+22 2334 2883 0
+1688 896 -3003 0
+793 3297 -193 0
+-2235 -3180 -1265 0
+-2170 580 677 0
+-1049 -1108 775 0
+3220 -2543 -2803 0
+2507 -1640 -1021 0
+477 -1302 256 0
+-1279 1906 3362 0
+2008 3281 -793 0
+106 -3018 -1128 0
+-1193 2416 2437 0
+1163 -3192 3068 0
+1531 2373 -2705 0
+2519 3145 -828 0
+2854 -950 -80 0
+-1191 2211 -603 0
+-42 560 730 0
+-3180 974 -2197 0
+787 -1391 -14 0
+869 -3151 1738 0
+-395 -1002 3034 0
+-252 -3370 2810 0
+938 -2860 1042 0
+2090 2771 -2258 0
+2198 2151 1444 0
+1577 -3316 -943 0
+683 -2426 2005 0
+1152 724 -1353 0
+-2068 92 -3422 0
+-622 1976 -467 0
+-3160 1758 1122 0
+2324 -395 2357 0
+-2984 -1841 -520 0
+-1971 3136 -426 0
+-913 1676 319 0
+2808 686 2953 0
+-266 112 3026 0
+-3058 -2477 -2716 0
+1092 2084 3249 0
+-285 -56 49 0
+-602 -353 -422 0
+-3094 1582 -1346 0
+-2173 115 2303 0
+-646 -516 -622 0
+1739 926 -2866 0
+2169 331 1255 0
+2326 1439 553 0
+-1513 189 -375 0
+958 -2385 250 0
+-1739 412 -282 0
+-138 -3245 1471 0
+-1221 -1847 703 0
+-1945 1624 344 0
+-1124 -3019 2775 0
+3015 1757 -177 0
+-3204 989 784 0
+447 2756 -1164 0
+1191 2175 -1741 0
+-1314 -319 2873 0
+601 607 2315 0
+-895 1098 -1466 0
+-844 385 704 0
+-58 1157 1210 0
+1249 -2262 -3355 0
+1161 -523 -2812 0
+2550 1355 -2091 0
+2028 -1232 -3033 0
+-461 -331 1822 0
+-1015 563 -1138 0
+-1412 873 -566 0
+-1270 -391 -3263 0
+-1944 1914 -703 0
+1611 -1036 -2781 0
+-3481 -2427 -73 0
+-960 -2362 -3418 0
+2016 2543 311 0
+-1386 595 1930 0
+1245 -2461 -1981 0
+-1637 -2038 2504 0
+-627 94 -1795 0
+2416 1198 -2716 0
+263 264 401 0
+-2155 2234 426 0
+-2856 2676 -2625 0
+-3 1642 -2741 0
+-107 247 3114 0
+2813 64 -734 0
+-1769 2109 -503 0
+1216 -1096 1252 0
+-2070 3472 -1351 0
+149 -868 2761 0
+3358 358 -1648 0
+385 -479 -418 0
+-1527 840 -2025 0
+2844 -3345 -806 0
+-2027 -2652 1349 0
+3377 -484 1127 0
+-1326 2048 504 0
+-2786 599 1154 0
+2216 3217 3312 0
+3256 -1476 -1233 0
+819 -530 -1344 0
+3435 -3167 -973 0
+-948 -2202 -384 0
+-669 -352 -1161 0
+907 2002 3324 0
+1705 -844 1945 0
+391 -1355 -362 0
+-229 2586 2854 0
+2285 -2069 407 0
+2799 645 195 0
+1034 -1110 634 0
+-563 1434 1082 0
+746 -3104 -240 0
+2801 2480 -1660 0
+1098 -699 2258 0
+2210 -2792 -1668 0
+-2873 950 -648 0
+2602 -3341 1224 0
+-1162 2604 1893 0
+3027 1720 -1231 0
+1119 -268 -3259 0
+-336 -665 -3439 0
+-3316 -2706 1244 0
+3237 953 -2546 0
+-3102 2335 2297 0
+-1799 -6 -326 0
+-501 2397 -1946 0
+-2478 1374 1418 0
+2112 1522 3494 0
+2411 2639 917 0
+1312 1351 1282 0
+1082 2337 -2948 0
+2313 2543 -108 0
+2804 1615 -1785 0
+1392 -1204 1940 0
+-1966 1337 1068 0
+-1493 -901 2128 0
+1111 2273 -1127 0
+-615 -1101 1254 0
+-338 80 3176 0
+-162 1770 -1459 0
+616 1487 3280 0
+-1864 1055 -1043 0
+3018 -2610 386 0
+2 -3010 2264 0
+2100 -828 -424 0
+-3207 -1737 2556 0
+-1308 2406 1556 0
+1043 -1605 1691 0
+-516 -2714 1774 0
+2711 404 743 0
+2324 1866 -1642 0
+-2076 -1840 -1811 0
+930 -968 3005 0
+-1025 -850 46 0
+-1717 -2996 2794 0
+-2946 687 2177 0
+-2233 1778 1734 0
+-467 2942 1697 0
+592 2467 -2960 0
+-565 -1770 -3295 0
+-299 2681 553 0
+3313 2110 3357 0
+1679 -3006 -1759 0
+66 424 -292 0
+-1546 -1059 917 0
+-878 95 2199 0
+-1415 3433 -102 0
+368 -113 -2900 0
+-1076 -721 -1999 0
+-1383 1869 3360 0
+3296 -499 795 0
+537 -1209 2235 0
+259 -3091 -2476 0
+-2242 -1957 1552 0
+-476 -501 -1876 0
+-1629 -1097 -1561 0
+-1325 601 2567 0
+344 1937 -3196 0
+-2426 -965 -1400 0
+1338 1950 719 0
+-2198 1996 974 0
+1685 2153 1331 0
+-1620 -544 -1609 0
+970 -2176 1417 0
+950 -1950 1093 0
+-3224 1515 3085 0
+1775 1285 54 0
+-1647 -789 -1731 0
+2429 -2932 1135 0
+1180 102 1483 0
+2297 985 2926 0
+-2798 1837 1628 0
+-3197 -65 -1965 0
+-2883 996 1998 0
+-3161 714 -2806 0
+-957 -3403 1913 0
+2509 -528 1792 0
+-2737 1931 1974 0
+-1097 1289 -170 0
+722 -2963 3092 0
+-132 370 -2489 0
+2861 -3492 -2342 0
+-2045 3272 -880 0
+871 -3102 568 0
+-1945 -3101 2726 0
+175 -3241 2890 0
+2827 -226 -2139 0
+1102 -646 1159 0
+-2620 -1 -689 0
+-1991 -1858 541 0
+784 -439 -1260 0
+-2753 -2078 -3404 0
+2045 1401 -1879 0
+-715 -1089 -3219 0
+1283 -911 -3301 0
+-723 -2166 1108 0
+990 512 -3337 0
+-285 1421 1072 0
+-745 -798 -2502 0
+110 2225 -3425 0
+-2471 -2609 -1809 0
+-1063 -576 2366 0
+-1989 2295 835 0
+3210 -1653 3412 0
+-1022 938 1042 0
+1772 1509 1149 0
+-1097 -2616 285 0
+2085 631 -2183 0
+-746 3043 2399 0
+3053 -2976 3167 0
+1353 529 2319 0
+-2679 -389 -1587 0
+3275 2947 1051 0
+-1869 -21 -694 0
+865 2340 -736 0
+857 -3444 -1449 0
+-3064 2178 2421 0
+625 436 -2600 0
+1700 -3282 2379 0
+-640 -721 -84 0
+1485 45 2326 0
+191 2121 -1841 0
+-2633 -3237 2536 0
+1055 -3304 2456 0
+-1312 1926 2574 0
+-3489 -2950 -1987 0
+1527 165 -1046 0
+-1189 970 3247 0
+-3262 -740 1637 0
+1747 2790 1480 0
+-2182 -2422 1503 0
+3407 3085 -3177 0
+2075 809 -1791 0
+-3048 1355 -1117 0
+-3482 2439 3036 0
+-1134 -1888 3348 0
+-963 -2919 3325 0
+1178 3461 -1443 0
+2540 3304 1278 0
+-3386 285 530 0
+-2743 1537 1718 0
+-1021 1138 3227 0
+3035 2862 -2890 0
+-1247 1795 -2324 0
+1972 832 1033 0
+2076 3025 1407 0
+-1496 422 2866 0
+96 1052 1895 0
+261 -2370 -693 0
+1627 -3402 -1421 0
+-319 1211 -107 0
+1085 1543 736 0
+1655 -3308 -288 0
+-3148 -1345 -2604 0
+-3211 -1202 3189 0
+-548 -2618 3350 0
+875 -827 2442 0
+-3326 -2394 3303 0
+-1336 -3230 1468 0
+1217 3063 792 0
+-1541 -2758 3097 0
+3382 42 -2888 0
+2270 3079 2346 0
+344 2332 2861 0
+2405 1479 -2997 0
+1218 -109 1695 0
+-3082 -177 2285 0
+2107 2278 -2218 0
+-1067 1305 -2634 0
+-198 -1243 6 0
+-446 -1776 1697 0
+-260 1547 -902 0
+-1 1385 -1193 0
+3401 2663 -2157 0
+1870 3336 -530 0
+351 -1064 1530 0
+2097 -538 -2225 0
+474 -947 1003 0
+-1961 -898 2109 0
+-2920 1909 91 0
+2596 -3414 -2568 0
+-2919 3232 1308 0
+-1396 682 140 0
+981 2588 -3223 0
+1432 1674 1896 0
+-2278 2205 -1150 0
+-133 -2438 525 0
+-1820 2026 762 0
+-685 765 119 0
+-968 -3129 -1390 0
+906 -2516 -2358 0
+884 733 2355 0
+65 -3178 3175 0
+-756 2181 133 0
+2007 -350 242 0
+-3159 1907 -758 0
+-2339 3254 1461 0
+-829 -2782 -116 0
+-945 2817 -2391 0
+1925 -549 2531 0
+-514 1938 863 0
+-3184 836 -2773 0
+-1545 323 -608 0
+-3283 -1310 1178 0
+-2047 -1097 -1877 0
+-3386 -2317 -1310 0
+1019 -2881 -430 0
+651 2255 2800 0
+1413 914 1681 0
+2922 1693 -2824 0
+647 -2459 1032 0
+-2643 -1262 -404 0
+677 -166 -2029 0
+2293 -2048 -2663 0
+-1797 -456 2603 0
+-58 2488 -2713 0
+2785 -2070 379 0
+2238 -28 -486 0
+1868 -1997 2484 0
+-644 -3243 770 0
+879 -2095 3344 0
+3386 -3162 3175 0
+-928 1095 815 0
+3013 858 3099 0
+2668 -623 1342 0
+1256 2219 2087 0
+1157 -1191 -427 0
+858 2778 2311 0
+-31 -2776 -3332 0
+-731 2616 -1409 0
+-2745 -2677 -2515 0
+26 -3235 989 0
+-2082 1517 -298 0
+1451 2149 -1217 0
+3100 -979 3301 0
+-2671 -1552 509 0
+-3111 738 -1750 0
+3007 -73 1690 0
+1349 698 -367 0
+-1978 -362 -2180 0
+1844 2707 3199 0
+-462 -249 -2154 0
+2926 -2328 -2682 0
+3367 -157 -528 0
+-2478 -489 -1962 0
+-3001 -520 201 0
+1923 3026 -1861 0
+668 3338 -784 0
+12 3050 1214 0
+-692 2583 3031 0
+348 -1350 -1239 0
+-1085 -2213 1831 0
+-2289 1860 -1994 0
+-1146 -3293 2174 0
+-772 1197 -545 0
+-900 3258 1759 0
+-300 658 -3453 0
+3086 -1487 -868 0
+587 1986 2708 0
+1385 24 -3335 0
+-3308 -1460 2983 0
+562 -2562 -2294 0
+208 -1256 -3323 0
+1674 -636 789 0
+818 -3323 -1254 0
+1408 -391 -626 0
+-2586 3155 -2407 0
+662 326 -808 0
+540 -558 -2641 0
+-1020 19 799 0
+-499 -2333 -1573 0
+-762 -646 2305 0
+2364 -2166 -1383 0
+-2838 -1955 -3099 0
+1242 1054 1460 0
+-2532 558 -2848 0
+822 2789 -526 0
+-1020 -1059 -2078 0
+-2659 865 -1311 0
+-2209 -1081 -312 0
+-1614 -999 707 0
+802 456 -2997 0
+-1683 371 202 0
+-1683 364 474 0
+3010 726 2445 0
+3130 -380 2729 0
+974 -2616 -120 0
+2411 2628 1043 0
+1730 2189 1772 0
+-267 -1844 -1871 0
+2029 1347 2128 0
+3495 605 -1032 0
+-1223 -2526 -2723 0
+3180 -2794 3045 0
+1030 2347 -802 0
+162 2218 -1738 0
+2083 448 -844 0
+3412 1421 2417 0
+-2506 1596 463 0
+-2864 950 -866 0
+-2429 1082 -2536 0
+-1992 -1053 -306 0
+418 462 -2654 0
+-2482 1473 -3457 0
+1717 3428 1031 0
+-918 1821 -1106 0
+-1318 1974 2037 0
+766 -2495 793 0
+-604 -3306 -352 0
+512 -2583 -1233 0
+1232 73 -649 0
+408 776 837 0
+1160 -1766 -2828 0
+1802 -2333 -2008 0
+1370 -1251 2958 0
+567 1134 241 0
+1818 249 -3030 0
+1904 -2687 -843 0
+-2727 1946 -751 0
+743 -2972 2573 0
+-976 -3118 -278 0
+392 507 -1188 0
+-1725 725 -3260 0
+2925 711 546 0
+-1824 -82 -3281 0
+-225 2294 -2866 0
+3202 1167 397 0
+-245 1945 -3032 0
+-2536 -691 -328 0
+-1208 -2524 -3447 0
+-444 3060 -15 0
+1808 -2182 -3424 0
+-1828 1199 -1138 0
+-1976 3187 3420 0
+403 -2165 -2417 0
+1731 -2283 2096 0
+215 -2012 -3377 0
+1474 2104 -1976 0
+-3402 3415 -3119 0
+3102 962 2949 0
+377 -2738 -2469 0
+-1455 1737 -1581 0
+1903 -3318 2226 0
+248 2246 -1716 0
+-3497 1886 3083 0
+836 2513 2618 0
+1406 666 539 0
+-1256 -1800 -2948 0
+2866 2653 -3357 0
+3476 -2186 -812 0
+3195 1728 1720 0
+-188 -1417 -2768 0
+3098 897 1595 0
+1922 40 -2573 0
+-1943 3250 908 0
+2397 2208 -2809 0
+1469 -53 -349 0
+-1341 -3343 1344 0
+2583 2399 840 0
+2518 518 3412 0
+2829 -2028 -2933 0
+-1964 -832 286 0
+1336 1127 -364 0
+-2616 2235 2068 0
+2985 2358 3353 0
+-1427 -1078 -717 0
+1290 -1410 1195 0
+3300 3322 209 0
+-3396 -3131 839 0
+1705 -2783 325 0
+2832 1816 -1705 0
+-919 -1711 -1615 0
+-524 -1937 2340 0
+-530 1470 866 0
+-1859 2632 3133 0
+-277 1207 -2874 0
+1124 2406 2620 0
+2240 -1933 3489 0
+-2821 3008 -680 0
+3099 -2943 180 0
+1685 1540 -2548 0
+2303 -1205 -3005 0
+1727 3469 2420 0
+933 476 -2531 0
+813 193 -859 0
+-2831 -828 -1935 0
+-1784 46 1945 0
+3313 1295 -331 0
+-3238 -1955 -1703 0
+1368 -3115 -2771 0
+-1931 -3017 2973 0
+-2633 2189 -745 0
+-2229 -805 338 0
+-238 2399 -289 0
+3178 3116 3215 0
+-3266 989 904 0
+734 -1717 2716 0
+56 3017 -1468 0
+1996 -3430 399 0
+-1495 1874 -2869 0
+3498 3234 1915 0
+1446 -675 -2070 0
+2122 -1334 -2986 0
+1494 1007 2376 0
+1641 1481 1482 0
+-1602 -3482 -2464 0
+-1974 -1045 -72 0
+2538 1740 -332 0
+3173 -2706 -3248 0
+2084 -1951 1402 0
+-914 1411 -838 0
+-2792 784 -1959 0
+3451 -3048 -1368 0
+2914 1705 1719 0
+200 2840 -367 0
+-2084 -244 -2175 0
+-368 -393 -1803 0
+-2007 3348 3442 0
+1434 -2254 -1475 0
+-1090 -774 -326 0
+-1170 -2420 -2402 0
+2494 2561 422 0
+-1738 -2616 -482 0
+-2799 -1913 1554 0
+-2025 1561 3071 0
+-439 -795 -2152 0
+453 -2466 -532 0
+376 -1815 353 0
+-2049 -712 -1205 0
+-348 -1407 2528 0
+295 1717 -2325 0
+786 -1515 2290 0
+-2638 -814 2157 0
+3249 819 -1167 0
+2726 -1752 3423 0
+-1610 -246 1306 0
+-196 1847 -1842 0
+-255 3302 1932 0
+-2236 -2664 -2141 0
+1578 1844 -1998 0
+609 -1983 -3434 0
+3425 -1880 -1838 0
+2407 -1201 3162 0
+-667 -1314 1452 0
+160 1320 -2858 0
+-268 3425 -821 0
+-2038 3486 -2516 0
+-639 -417 -131 0
+1472 1976 -627 0
+2739 2956 -2789 0
+-376 2280 -1806 0
+-158 346 -761 0
+1968 784 3238 0
+2462 -1713 494 0
+865 3125 291 0
+-2635 1970 -967 0
+-1015 -619 1268 0
+-722 2778 2119 0
+2421 -224 -2018 0
+-2972 -449 3204 0
+-1510 -1406 252 0
+254 -3496 -2627 0
+2251 -998 -1354 0
+543 696 906 0
+-1483 2096 -2973 0
+2671 637 961 0
+-2948 2155 -2085 0
+-706 1130 2363 0
+-1319 2757 171 0
+1228 539 -84 0
+1623 994 3330 0
+-3148 3167 -2220 0
+-3084 2587 1130 0
+-3196 -855 -963 0
+2614 2678 -2015 0
+-3165 -2015 -2397 0
+-2612 1122 347 0
+530 -2768 644 0
+-1067 2845 -2791 0
+2947 -2499 -1557 0
+-1386 -1150 1879 0
+1745 2090 3268 0
+-2708 -2367 -3414 0
+-2371 -3349 -2902 0
+2023 -1044 -973 0
+2034 -322 2258 0
+-3229 -3189 -3369 0
+755 3254 -1050 0
+2632 -648 -1636 0
+1620 -2397 1180 0
+1764 2227 2896 0
+784 -1488 943 0
+-3429 432 1319 0
+2849 1402 2930 0
+44 3196 -212 0
+-2310 589 559 0
+2021 2609 1815 0
+1363 -1749 1425 0
+3275 18 769 0
+713 496 3253 0
+-1284 -2682 -3098 0
+1855 1083 1625 0
+-1015 1140 -1282 0
+-2332 -3337 2232 0
+-1796 1418 3352 0
+-2999 -3232 -3007 0
+-1921 -947 2325 0
+-2400 -2060 -2603 0
+2604 897 283 0
+-3046 2572 -871 0
+-2132 59 2550 0
+-1193 -926 -472 0
+-1211 3089 2911 0
+3110 125 954 0
+134 -2486 -1462 0
+-1628 225 1957 0
+-1251 244 1787 0
+1925 87 -2767 0
+205 1510 2883 0
+736 -2962 -2220 0
+3077 -1016 2034 0
+-2575 -2621 1960 0
+-33 -405 1898 0
+-3116 2048 -2431 0
+89 945 -2888 0
+474 13 -2265 0
+-962 -1830 656 0
+-989 -673 807 0
+-1064 -1172 1547 0
+1041 3270 1186 0
+1650 -1621 3148 0
+208 -1723 -691 0
+-2326 3066 -3072 0
+-2068 -795 -247 0
+-3342 477 3272 0
+-2268 -3321 3083 0
+-773 78 1827 0
+-1373 2446 149 0
+-1311 -2653 1956 0
+-947 686 -1409 0
+-3086 -1878 -565 0
+2375 1250 332 0
+3220 228 2643 0
+-683 -2592 -2559 0
+2734 2845 1429 0
+376 930 421 0
+-214 -2832 1747 0
+1039 1367 132 0
+1642 -962 -649 0
+1781 26 -3301 0
+-1880 2468 2429 0
+804 2183 605 0
+3298 -1896 -2909 0
+1673 -2842 -1784 0
+-2654 -3373 -1191 0
+-633 -3349 2380 0
+2489 -1419 3318 0
+-1602 166 -779 0
+-2025 625 -1585 0
+-1356 -2473 -3418 0
+901 3233 -152 0
+-3026 -1795 312 0
+2968 -1228 1910 0
+-2708 957 1799 0
+-2240 -3281 883 0
+1375 249 2532 0
+3218 -3041 -3003 0
+3125 1765 -2103 0
+-2858 608 1142 0
+2856 2062 1094 0
+-2334 1227 74 0
+2982 -2316 -1304 0
+2374 788 1780 0
+813 700 -1451 0
+-327 1723 3443 0
+-1831 -1783 1358 0
+3315 1648 3361 0
+448 379 2873 0
+-625 3295 1605 0
+3166 -2052 818 0
+703 -769 -2205 0
+-842 2966 650 0
+-1942 1561 2333 0
+978 1118 781 0
+-2018 1152 1833 0
+2562 1118 1522 0
+1957 1842 -1353 0
+749 -88 -2114 0
+3243 1876 -365 0
+83 -3102 -2950 0
+-3204 -471 1843 0
+643 -855 1722 0
+1474 2002 1280 0
+-481 -208 1883 0
+-1513 -2953 -3199 0
+2550 915 -222 0
+-1512 3056 -3348 0
+1075 248 -2882 0
+-191 2549 -2219 0
+-970 2896 1347 0
+-2826 -1997 3417 0
+-2996 -3083 -295 0
+-329 751 -945 0
+-2103 3495 -1534 0
+-2083 -2445 -2926 0
+-574 -688 2490 0
+-1288 -2032 1037 0
+-299 195 1941 0
+1181 2275 1695 0
+3388 2811 -1756 0
+2624 987 1398 0
+414 1962 55 0
+1272 864 1402 0
+-2606 3348 -257 0
+1688 1819 2476 0
+3235 -2403 -1409 0
+698 -2986 -769 0
+-2158 3392 -8 0
+-2327 375 494 0
+217 775 -3180 0
+-2110 1349 -135 0
+-1313 1081 3491 0
+-337 390 1670 0
+-1522 3010 -2671 0
+2528 -2185 -1422 0
+3053 -1278 1043 0
+-160 -2245 3153 0
+-3090 884 -219 0
+-377 3050 137 0
+-3390 1607 2467 0
+438 -3058 2921 0
+-3129 2956 -821 0
+609 2599 -390 0
+-546 -1057 -653 0
+2316 357 -2616 0
+-3449 -1342 -1270 0
+-108 -343 2771 0
+2173 1574 -1372 0
+-588 2730 2013 0
+-2836 -424 -1251 0
+2515 2593 -706 0
+1119 -1260 -377 0
+2624 -409 320 0
+2661 198 2550 0
+-1773 -3040 -1579 0
+1736 1989 -950 0
+-1190 8 -29 0
+-2978 -2934 -3350 0
+-1668 659 -902 0
+576 1595 1370 0
+905 -267 -433 0
+2087 3284 571 0
+2479 2465 3435 0
+1664 -1326 -3467 0
+-2032 1400 658 0
+-3299 -2375 -955 0
+-1281 -930 1635 0
+877 -1548 -2524 0
+-2156 3085 -3010 0
+-2207 94 -1667 0
+2877 2313 -1531 0
+1060 -2807 -376 0
+3489 -1554 -1094 0
+3019 -1264 -3230 0
+2154 -2314 -2043 0
+2998 -1945 -3171 0
+-1577 2787 2719 0
+-1825 914 744 0
+456 -1756 -2865 0
+2492 3421 -264 0
+1786 3384 -1571 0
+-206 284 -531 0
+2654 -2210 -2233 0
+-2073 -3215 -907 0
+-1813 -596 1205 0
+198 -621 -3220 0
+3135 1839 -2917 0
+-2921 1224 -2136 0
+-1084 2644 -1037 0
+3378 3450 1082 0
+-1333 -643 -1360 0
+645 -288 -913 0
+1353 1774 -1964 0
+-2533 1118 -346 0
+-1727 1503 696 0
+2830 363 -482 0
+-335 2716 110 0
+-326 -461 539 0
+2508 -1972 1247 0
+2280 2541 -1150 0
+2866 1765 -452 0
+1450 -3372 -1408 0
+-793 -1444 332 0
+-178 1553 -2965 0
+-967 2274 -2026 0
+-3244 403 -1118 0
+-254 1640 3232 0
+-107 1280 -1778 0
+-33 -950 -605 0
+-886 -2159 -1579 0
+3083 -2075 2830 0
+-839 2260 -3208 0
+-2025 -2516 1365 0
+-1416 2748 2983 0
+2780 -1424 -27 0
+-2123 -824 3094 0
+-390 3235 -2910 0
+1140 -2756 -1239 0
+-949 2017 -1520 0
+-49 -1868 -2238 0
+-975 1504 -1557 0
+-1951 1529 -1095 0
+1128 -2374 -2390 0
+1004 2767 -35 0
+1020 -1585 -1556 0
+1282 1182 -828 0
+-382 -1184 965 0
+2850 -1012 2476 0
+-1835 -3239 -2999 0
+-1887 -3357 3405 0
+293 -441 -471 0
+712 547 -2764 0
+674 -103 335 0
+1586 -2557 3270 0
+1098 2573 -1626 0
+-2366 -164 3392 0
+575 1487 -2500 0
+2633 2862 -1358 0
+1814 -1865 -769 0
+-2926 -3290 2820 0
+976 3333 991 0
+-1773 329 2687 0
+509 -2502 -1055 0
+3066 3303 239 0
+-3064 2437 -1663 0
+768 3440 -277 0
+325 -2496 1808 0
+3482 1 -2186 0
+2842 423 -3181 0
+3215 326 2097 0
+-407 -1126 -3465 0
+1277 3451 943 0
+1954 -575 3408 0
+3009 -1011 -1894 0
+-593 -3436 -260 0
+-2906 1397 1014 0
+-1933 1650 -2563 0
+142 -17 2971 0
+3476 -2675 2412 0
+1678 -2677 -423 0
+147 104 360 0
+-2904 3408 -675 0
+-145 -3486 -1532 0
+-87 1936 -2493 0
+329 352 2284 0
+-2442 -602 -473 0
+162 -3253 -929 0
+2539 1244 -1235 0
+1981 -783 582 0
+-1264 -446 -415 0
+2389 -1660 -1902 0
+-451 -2008 2132 0
+-632 509 -194 0
+-1151 3065 2591 0
+1709 1056 -1968 0
+1383 -827 -346 0
+-1674 1291 -1001 0
+-3117 1092 8 0
+-1869 -3460 3092 0
+1579 -2903 3453 0
+604 -2227 -878 0
+658 -3369 2732 0
+-1871 2501 -2474 0
+-748 -167 2275 0
+3257 1058 2987 0
+531 2346 1521 0
+1829 -2274 -628 0
+-2566 -354 -1960 0
+575 -169 -3415 0
+-499 -2796 2331 0
+2567 2373 2118 0
+-1135 -2573 -2143 0
+1413 -2198 2775 0
+1093 -3365 591 0
+-205 -2950 2645 0
+-1783 1141 -3124 0
+1049 -203 -666 0
+-3321 -54 -345 0
+-2675 2678 -2699 0
+2318 -857 2404 0
+-46 1713 1341 0
+944 -2094 -2511 0
+-3492 1337 850 0
+2875 3118 2563 0
+1821 -1720 3147 0
+2679 1309 879 0
+-2227 -1539 -2968 0
+79 -2882 3005 0
+-3096 -255 931 0
+1530 -697 -1929 0
+372 35 -1998 0
+829 2735 1545 0
+2918 -1661 -3039 0
+-2529 44 1848 0
+-2100 -226 -3126 0
+3139 3260 -1677 0
+-587 -2483 -1374 0
+2022 2150 -3090 0
+-1348 -823 1401 0
+-2365 2547 -2797 0
+-1244 -2170 2110 0
+-2761 -2852 -2517 0
+2270 1517 -1221 0
+-2608 -3224 -458 0
+2600 1126 -1913 0
+-318 -2857 -660 0
+-2833 662 -1664 0
+-2910 -716 -1353 0
+2032 1003 390 0
+2880 -784 1135 0
+-927 2353 -438 0
+-1750 2932 -1954 0
+-2089 1528 -2289 0
+1240 -3340 2576 0
+-203 -3219 2461 0
+-183 2305 171 0
+2046 2512 831 0
+2573 2329 2222 0
+3481 -1938 -2204 0
+-51 2969 -3393 0
+-623 -1816 -2609 0
+-2169 -405 -2632 0
+-2147 -654 2306 0
+2093 -2836 -2108 0
+-1543 -445 -1928 0
+-2940 -411 1976 0
+-3240 -674 -1825 0
+1380 1511 1446 0
+1408 2603 568 0
+2283 -3368 -3123 0
+3064 -845 317 0
+2994 -3465 -201 0
+3473 -2260 -113 0
+-1799 244 -2263 0
+2111 -2922 -272 0
+-274 -1606 -3310 0
+-438 1978 2972 0
+-2191 259 927 0
+-1156 -1890 -126 0
+-2210 1698 715 0
+675 -1805 -2107 0
+-703 -918 2946 0
+1359 -3333 -2587 0
+1988 3485 1640 0
+1031 -2348 -1981 0
+1197 551 1436 0
+1115 -1701 -1319 0
+2422 -2782 -795 0
+3014 -2111 -3160 0
+3109 599 -3418 0
+1518 1734 614 0
+-1225 1808 261 0
+-570 2303 -1436 0
+-1721 2380 447 0
+581 2730 2011 0
+-259 260 2096 0
+1662 2602 -2745 0
+3095 -2043 -3166 0
+-1495 928 -1717 0
+-2414 -1430 3476 0
+790 3469 -2226 0
+1923 1885 -356 0
+-386 943 1848 0
+2407 1995 217 0
+-1209 -2507 -774 0
+-2580 2716 -2613 0
+1113 1828 2059 0
+-627 2133 1373 0
+2179 323 -114 0
+884 3170 461 0
+2373 -2006 -2088 0
+3030 2152 -2698 0
+40 -3155 1394 0
+-2653 1308 -745 0
+15 -2744 1519 0
+-126 -2745 1979 0
+-3248 -1033 -2865 0
+-2610 55 1578 0
+3293 -1521 206 0
+2521 -393 3403 0
+-1469 -2302 2159 0
+2045 2289 306 0
+-3308 -1058 1680 0
+-1311 3366 -2572 0
+-1596 -291 3357 0
+398 -222 2038 0
+-3479 -786 160 0
+-420 -507 -3329 0
+-613 159 -470 0
+549 -823 553 0
+1032 -2004 149 0
+134 -1123 -2394 0
+-2011 -1249 -791 0
+1203 -2216 1880 0
+591 1251 -3267 0
+-2092 -2752 2052 0
+-1136 3027 -3104 0
+40 -1233 631 0
+-2365 -3426 -3195 0
+266 733 1699 0
+-3318 1298 -885 0
+-1970 2034 -779 0
+-3416 3252 2106 0
+-3172 -2217 2051 0
+1403 -2196 -332 0
+-2635 -683 2719 0
+-282 -88 2684 0
+453 -1684 248 0
+-588 1260 3017 0
+1214 -2127 -3055 0
+-303 2607 -2621 0
+2553 -3013 -1717 0
+-6 -1295 -2375 0
+-1980 -1462 -2266 0
+3050 1897 -3388 0
+-633 140 1176 0
+-1565 2162 2869 0
+3274 -2548 1064 0
+-2611 -885 -2782 0
+1550 -3129 -507 0
+1396 3206 880 0
+-795 -1110 22 0
+-3335 3352 864 0
+-305 459 546 0
+838 -2072 -2041 0
+3482 217 -1471 0
+-570 40 1722 0
+-2157 -3357 439 0
+2924 -695 -1932 0
+-3123 3336 3236 0
+772 -1812 -2905 0
+2085 2049 1653 0
+2186 1826 2317 0
+-2763 -3007 1622 0
+-1198 -708 -2939 0
+2910 161 -1198 0
+1004 -3040 1906 0
+-3322 1500 2633 0
+-412 -2056 -1853 0
+1356 -1422 584 0
+2507 -1070 1214 0
+-2232 2049 -1770 0
+-2963 -1045 -3239 0
+1278 2073 67 0
+11 -3475 -3487 0
+2293 550 1660 0
+2129 -480 2162 0
+-1131 341 -2586 0
+-2352 -228 197 0
+1349 -1718 1641 0
+-1881 -697 -295 0
+693 -2747 3101 0
+-3422 3033 -2907 0
+341 2483 -2682 0
+863 -2887 1853 0
+-784 1460 2663 0
+336 -679 1028 0
+992 1010 -1212 0
+2643 -2174 -2120 0
+-805 -1886 -2063 0
+1218 -471 -827 0
+932 2988 -745 0
+1889 -1465 -2261 0
+-3314 728 3029 0
+3343 2330 523 0
+1966 238 -918 0
+-2069 -2227 3459 0
+-2071 -1208 1245 0
+-2711 -1371 -3046 0
+2785 1231 1117 0
+2506 -3494 2019 0
+308 -2760 -2143 0
+2006 -1065 749 0
+-3181 3368 -3398 0
+-1950 2302 796 0
+-1435 3001 -2545 0
+2339 -2106 -1887 0
+817 -1462 -106 0
+690 -2169 -838 0
+-3470 -1249 -2469 0
+-2190 -1846 -1831 0
+-3209 243 -2268 0
+2563 2523 -1464 0
+-2733 2415 2710 0
+3468 2540 -1451 0
+3261 1910 -1830 0
+-2496 910 3353 0
+1369 -2761 2939 0
+3020 -2878 73 0
+1687 -1267 -1257 0
+-2234 2857 2623 0
+884 -2725 -857 0
+-1470 -1493 2618 0
+1455 3102 -572 0
+2919 -3215 -2985 0
+-3402 -1988 -2362 0
+445 -2728 -1538 0
+2247 -2311 -238 0
+-1170 -66 2524 0
+446 2896 -2628 0
+1132 598 -1788 0
+-730 2704 1902 0
+43 249 -887 0
+-282 -2178 2827 0
+-984 3144 3432 0
+2759 -1301 -684 0
+2815 -1821 1370 0
+2759 -870 266 0
+3493 311 893 0
+3372 -2909 2257 0
+1787 -405 -1372 0
+2676 -2500 -2704 0
+-1218 1782 1469 0
+343 -2594 -132 0
+291 1863 3019 0
+2540 -2134 -893 0
+531 692 -1064 0
+3400 -1857 868 0
+229 -1287 1864 0
+-2808 -1422 1853 0
+1790 -2246 336 0
+429 -3206 -396 0
+1015 3050 1977 0
+2696 1628 1526 0
+-1900 2146 2004 0
+761 -1391 717 0
+-2644 -2592 2265 0
+3117 -3283 -2650 0
+3084 465 2326 0
+1203 2824 546 0
+-347 -1621 812 0
+-3463 -3483 2304 0
+2042 2026 1087 0
+-84 -3020 1882 0
+-2538 -2571 -2933 0
+3189 -922 1517 0
+146 -1689 -534 0
+-2375 2413 901 0
+2076 -669 1532 0
+-3441 2135 2432 0
+-2127 -1347 3429 0
+1283 843 203 0
+3463 453 3478 0
+-2374 2337 149 0
+-2092 939 -2600 0
+2293 -1989 776 0
+3003 -1992 -1529 0
+-1723 1272 366 0
+28 -3303 -2281 0
+2733 40 1598 0
+-41 -367 531 0
+-447 3200 -379 0
+1133 -2719 776 0
+-153 -2323 3167 0
+-3407 1975 2570 0
+2586 -464 1140 0
+-594 -1027 524 0
+1521 -6 560 0
+324 1585 668 0
+250 150 -520 0
+-2297 -1830 -2558 0
+254 -1055 -3444 0
+2685 3235 -2204 0
+-3472 1006 -1675 0
+-2807 -2246 649 0
+-2176 2371 -2206 0
+3475 -1079 -239 0
+2608 -2488 -2113 0
+-2635 219 141 0
+-1813 -318 2403 0
+-3324 412 1584 0
+123 -1576 -2588 0
+-2225 1237 537 0
+2403 1935 -3311 0
+1015 1521 2182 0
+2299 1502 -700 0
+-1828 1144 -2024 0
+1718 1926 -1959 0
+2804 -2133 3483 0
+3312 -67 -2331 0
+-1755 -753 -340 0
+-2842 -2274 -2070 0
+716 -1544 3241 0
+-1603 864 281 0
+-2178 1845 -1425 0
+992 1804 -2936 0
+-3196 -809 -2761 0
+-2765 3166 -2617 0
+811 1950 -954 0
+2521 -2323 -1876 0
+-1539 3427 1112 0
+1985 -1638 -2776 0
+-2172 -875 2850 0
+1242 -709 -1834 0
+-1922 -1294 1718 0
+991 -2536 -3098 0
+-278 955 875 0
+2814 2271 1383 0
+-179 1780 -2316 0
+2550 -967 1480 0
+12 2441 3387 0
+-2695 -120 -2080 0
+-379 541 1582 0
+-769 -1048 2648 0
+2660 600 2040 0
+2810 1050 -1098 0
+-289 -1102 440 0
+1403 -1075 -3467 0
+367 -917 -3283 0
+1278 1762 2569 0
+-457 2352 129 0
+2444 240 825 0
+3226 -1498 671 0
+-3458 -2199 -2453 0
+-939 -924 2108 0
+-3001 -1870 572 0
+-1801 2415 3059 0
+-2719 1966 -85 0
+-2180 174 916 0
+2860 -2857 -1054 0
+275 529 2407 0
+643 -615 2746 0
+-2795 -2958 2681 0
+-397 -3083 2240 0
+-3197 -2352 -1883 0
+-519 461 802 0
+-2148 73 -1000 0
+-2936 1284 1555 0
+-1934 -1825 -2522 0
+-2015 2163 1273 0
+773 -2702 2838 0
+600 1446 747 0
+-3491 2739 2574 0
+-1738 -2745 -2525 0
+626 485 -1906 0
+-3332 -47 -411 0
+2536 -869 1683 0
+2926 1797 2947 0
+2958 -1879 1247 0
+468 -1942 -1160 0
+-2708 3026 -25 0
+2139 -947 3041 0
+1122 -802 -1131 0
+-289 -1433 2791 0
+-3070 1051 -710 0
+-1859 3201 2672 0
+1321 2285 817 0
+1397 792 -1356 0
+-2446 -2511 312 0
+3057 1559 1393 0
+2817 2186 1136 0
+-2242 -2667 1225 0
+2852 -1921 1318 0
+2065 1422 641 0
+-2875 -1615 -804 0
+3202 2759 -2636 0
+-3245 -2851 2404 0
+-2395 3196 -1897 0
+593 -1276 1536 0
+247 -2113 1844 0
+-1369 3035 3432 0
+1021 48 2088 0
+947 706 1797 0
+1655 3064 903 0
+1346 2009 3011 0
+-2873 1897 1505 0
+-1078 -1504 -2897 0
+-76 -1073 985 0
+-3384 1758 -2069 0
+547 -309 3372 0
+2907 698 -1652 0
+3131 -1228 -354 0
+-1225 967 -1211 0
+-1666 1091 542 0
+2583 3073 -144 0
+2711 -2189 -854 0
+2110 3069 -1619 0
+462 -351 1641 0
+-3380 -2655 -3230 0
+629 785 1704 0
+3146 -478 823 0
+2175 1815 2770 0
+1665 -2776 1159 0
+-75 722 -2008 0
+2425 2763 2839 0
+-637 1881 -819 0
+-2445 -2136 1236 0
+692 -1137 -1415 0
+884 -3333 718 0
+2057 -978 2852 0
+-2286 2800 1102 0
+3371 -3111 805 0
+3412 246 -1464 0
+3342 -3149 453 0
+-1516 9 329 0
+-2809 -2847 -3281 0
+-2226 -494 1657 0
+2683 2794 -2615 0
+1089 -3105 -2131 0
+-1104 -2566 2640 0
+-472 -2008 556 0
+-267 -1438 1119 0
+2058 -1162 3230 0
+-2109 -2732 1556 0
+-1770 -1509 -272 0
+229 2597 563 0
+-524 -2434 1590 0
+-1556 -354 1499 0
+2992 902 1820 0
+86 1618 923 0
+2243 2633 -3387 0
+991 525 2371 0
+-3478 -2262 -3143 0
+415 367 -1358 0
+-275 2274 -3039 0
+-281 -848 -3121 0
+-2609 -1144 -536 0
+-1747 -440 845 0
+768 2716 2576 0
+-3319 -2017 -1241 0
+1790 3336 -936 0
+-3371 -67 3177 0
+1027 1117 1931 0
+-1548 -3219 -331 0
+-1336 -1644 -2243 0
+1406 906 3168 0
+698 -1885 -552 0
+-1368 -2984 3045 0
+-944 611 1854 0
+2957 -1091 -3040 0
+-485 365 2188 0
+3232 -3071 -150 0
+3176 -1701 -501 0
+-573 2336 2107 0
+2125 378 2664 0
+-3049 -863 -1038 0
+3446 2436 -2385 0
+-3139 603 -1220 0
+-2583 -2547 -2975 0
+-2107 -2717 1314 0
+-2401 -1528 -776 0
+2813 -3335 238 0
+-834 779 -1214 0
+-2538 -290 -1715 0
+-2738 -1363 2805 0
+334 -38 -1468 0
+-927 1534 -2529 0
+2980 -1647 -1297 0
+2257 3157 -1919 0
+2310 1692 3110 0
+-2848 -2701 1805 0
+199 1448 3493 0
+-4 -338 -3232 0
+-1011 1968 1034 0
+-2039 1542 15 0
+-1226 -1095 -2248 0
+-1094 2131 680 0
+-3017 -1596 -2333 0
+-1488 -3315 510 0
+-342 691 -2778 0
+3035 -68 -930 0
+28 1263 1065 0
+-782 2624 -436 0
+-205 1299 1879 0
+-867 857 -604 0
+2262 -638 767 0
+1145 -92 2952 0
+848 1738 -2611 0
+1429 596 -2833 0
+-1036 1195 1756 0
+-2026 1935 -2847 0
+-731 3495 -2898 0
+-1978 -3180 -218 0
+2389 1604 873 0
+1959 1136 300 0
+1450 3408 1489 0
+-2585 -3245 -3041 0
+2025 -2888 -1734 0
+-494 -1251 -106 0
+3034 530 -1716 0
+-59 -3155 3049 0
+-2721 -3362 1212 0
+1608 -921 1441 0
+-600 3277 531 0
+472 1946 732 0
+-1831 -3327 -757 0
+2628 1508 -2442 0
+-1891 2456 1544 0
+-1966 2330 493 0
+-1625 2924 1966 0
+-232 946 1782 0
+2933 1679 -3399 0
+160 -1169 -1101 0
+3012 -1356 1309 0
+-1202 -2812 3003 0
+-781 -1574 -3292 0
+-3428 764 165 0
+2227 -2451 2941 0
+-2609 -3118 794 0
+-2311 360 -2620 0
+-2899 3096 1626 0
+-827 -2111 3161 0
+-2252 2600 1783 0
+-1254 -992 -1355 0
+-1799 -281 1787 0
+-2019 -2801 2157 0
+-1001 2480 -1073 0
+1887 527 -1028 0
+3025 -3201 3153 0
+-2302 1220 108 0
+-1983 692 -241 0
+-2209 2331 -852 0
+-3328 -3228 -224 0
+2664 3036 266 0
+3419 -639 1649 0
+-645 -2874 -1415 0
+-684 -855 -1312 0
+2918 945 -1494 0
+3400 917 -3021 0
+-2124 -249 -579 0
+10 2029 -2559 0
+2496 -66 2757 0
+1557 2516 -1320 0
+-169 -1166 655 0
+-2266 -127 -2042 0
+911 -1928 -1434 0
+2882 729 280 0
+824 -2160 836 0
+348 1198 2089 0
+2200 1131 -3368 0
+-3031 -1723 218 0
+-2444 -85 -2546 0
+3158 2200 3207 0
+1795 -540 1568 0
+1345 3482 -2594 0
+2146 -628 82 0
+-24 -443 -2199 0
+472 2857 -173 0
+-2207 -2618 -1460 0
+1875 953 1779 0
+1706 -2170 793 0
+-3178 1277 924 0
+3109 -1831 -567 0
+-1528 -471 2021 0
+-1331 -1234 -2251 0
+-2328 -3437 -2789 0
+-3249 -1544 2586 0
+1000 363 1159 0
+-1334 -204 -3332 0
+233 2618 -3445 0
+979 -1824 -3270 0
+1643 -77 -543 0
+2155 -1356 -873 0
+3447 -1701 -510 0
+-2375 2695 2209 0
+-2861 -1413 -601 0
+-2296 -701 -1931 0
+1535 -2786 3102 0
+-1905 -2365 -3199 0
+1638 -116 -66 0
+-3473 -2011 -611 0
+-2568 -1355 1778 0
+1012 370 2703 0
+-455 3019 1212 0
+2192 -1291 183 0
+1131 783 1540 0
+-2252 -799 377 0
+-3392 2389 -1684 0
+232 2697 1457 0
+-2468 -3258 -2456 0
+1616 -95 3227 0
+292 2243 -2085 0
+-167 -506 -2238 0
+645 828 2220 0
+-250 2433 -1446 0
+-3448 1473 1960 0
+-1677 -3177 -3341 0
+-3038 -238 -2562 0
+-2233 1444 3048 0
+-1844 1350 -3305 0
+2163 -2357 -3295 0
+1335 -3068 1891 0
+2773 -2916 1472 0
+1985 1682 -3264 0
+91 -1027 2383 0
+736 584 -1181 0
+409 1850 -27 0
+-2885 1669 2309 0
+-776 -3345 721 0
+-187 -1216 -2252 0
+2044 -1144 2581 0
+3006 1340 -2966 0
+-1596 665 1149 0
+-2905 -265 -882 0
+-2358 1797 -2281 0
+-171 -37 3452 0
+-139 2106 -811 0
+2844 -421 -2171 0
+2980 3495 -825 0
+-730 1945 3254 0
+-3075 1550 -1238 0
+-2228 958 -2854 0
+-2405 675 -2205 0
+-896 921 -1429 0
+-1767 -1426 1185 0
+937 1104 370 0
+487 218 -3431 0
+-3213 -1769 -1661 0
+-3232 2157 3447 0
+2397 2243 -1924 0
+1502 686 -1846 0
+-1448 153 -277 0
+-1237 -2419 376 0
+3478 -3137 759 0
+-2219 -1295 -3478 0
+889 -2578 -585 0
+2629 -3256 197 0
+-2865 21 -938 0
+-2364 -504 3049 0
+1583 -918 -2729 0
+2596 -2373 -1691 0
+-2596 -1489 101 0
+2384 3118 1250 0
+-2800 1469 2113 0
+1066 2785 3073 0
+2877 2131 341 0
+1207 -1141 1788 0
+880 707 -3075 0
+-1052 -2069 2178 0
+-39 877 1725 0
+-1337 2618 -2851 0
+-289 2395 -3252 0
+-2670 1354 1129 0
+1831 -3304 -1202 0
+-1080 -1724 563 0
+-2406 -1049 1867 0
+981 -957 -84 0
+559 1340 2628 0
+2841 -1149 1357 0
+1125 -89 893 0
+2796 2551 1321 0
+-744 3073 2177 0
+-2408 2409 -1148 0
+-2715 -2494 -3132 0
+-2713 2788 -105 0
+3453 -3479 3245 0
+3421 101 2188 0
+2649 -1512 1343 0
+-3093 -3148 -921 0
+-2437 36 2935 0
+-1904 -3040 -1891 0
+3181 -3272 1305 0
+2058 3056 -2010 0
+-2729 -1456 -189 0
+-1655 -2510 850 0
+-1830 1332 1136 0
+-652 -1534 597 0
+-2384 -3292 2723 0
+-2837 3404 -826 0
+-3168 2719 670 0
+621 -2822 -368 0
+-1674 1274 -1443 0
+-2546 -1024 2264 0
+639 2197 2392 0
+-635 -2003 -736 0
+-3422 1671 -3307 0
+-3201 3057 -1189 0
+2843 -1325 2572 0
+-612 -1689 252 0
+2331 2639 -739 0
+-5 -1230 3404 0
+-212 -2518 -578 0
+767 441 -287 0
+-2180 2722 207 0
+-948 -360 3371 0
+-3461 -1759 1549 0
+2226 1266 -1528 0
+-1449 -1764 -886 0
+-1401 2948 -3433 0
+-96 -2192 968 0
+-1553 -1937 -2118 0
+-1473 -1745 2087 0
+1082 -2067 1924 0
+-1394 2517 447 0
+497 3330 -997 0
+-1250 1724 2361 0
+3171 1185 3071 0
+-1187 -3306 3497 0
+-2705 1554 -2232 0
+-670 -2543 -1916 0
+1296 -2589 -2852 0
+-3361 1782 437 0
+-816 -2005 -1378 0
+-2350 3391 2303 0
+-2404 1351 -3472 0
+1486 2933 787 0
+-2023 1306 1692 0
+1656 -3367 -3128 0
+2161 -1826 -2381 0
+-674 -102 2730 0
+1791 1340 -1289 0
+-7 2773 114 0
+-3055 3472 1930 0
+-665 1577 2641 0
+3119 1741 1839 0
+3293 -1686 -1351 0
+-3259 -2785 2670 0
+-3497 1168 1646 0
+-3067 187 -1301 0
+1600 -2641 639 0
+-811 -1108 -1564 0
+-1970 -315 -354 0
+-652 1708 318 0
+-1416 -2163 1028 0
+-929 -882 -2467 0
+-1048 -1953 2273 0
+-1113 1339 -1995 0
+-912 2043 -965 0
+2472 -2245 -482 0
+1098 -2398 1479 0
+1 1142 -1181 0
+1969 656 222 0
+1501 -1796 -252 0
+2403 1641 358 0
+919 -32 3435 0
+1182 536 -1888 0
+2237 511 164 0
+2042 1864 -1707 0
+-3098 1339 -1757 0
+3361 -3151 2492 0
+1402 -3020 -2496 0
+155 -1763 623 0
+1397 -90 3002 0
+-1876 2406 -338 0
+1409 3338 -89 0
+-645 2502 3428 0
+1570 -2728 747 0
+1758 2515 -1903 0
+-144 -1115 3492 0
+3212 1649 -2460 0
+1878 3228 -3267 0
+2375 3237 1169 0
+-1453 -2626 -1275 0
+-2482 1306 468 0
+-1548 2698 3228 0
+1434 -1261 -2483 0
+-816 2364 -2960 0
+1035 2959 1378 0
+-1187 2151 -456 0
+290 -2798 1699 0
+-1143 630 -793 0
+3431 969 -2160 0
+-2327 -1340 -3353 0
+-2518 -3076 32 0
+287 -2034 3308 0
+2109 -3365 -3353 0
+-2351 2265 2077 0
+248 618 2688 0
+803 1510 -2874 0
+411 -1862 2746 0
+2677 2619 -593 0
+-3198 -2255 2762 0
+2886 -1735 -1095 0
+473 -2628 2277 0
+22 -1662 1631 0
+-53 -2262 3348 0
+-1642 -2296 1507 0
+1228 1066 -895 0
+-384 -558 -3348 0
+1513 2020 -1753 0
+582 958 -976 0
+2196 350 -3014 0
+2549 -2749 203 0
+2274 -1509 -98 0
+-2165 1226 1285 0
+-835 1283 1208 0
+2598 1376 -895 0
+1304 1630 57 0
+695 2420 -1662 0
+59 -628 -1011 0
+-763 277 137 0
+-804 1388 -2182 0
+3068 2226 -537 0
+-3030 1113 3434 0
+966 3101 1277 0
+-5 2456 585 0
+-1767 -1827 -67 0
+1937 492 831 0
+-2945 2260 2309 0
+-3332 -2186 1368 0
+43 -2002 1654 0
+-1590 -474 3074 0
+423 -173 2173 0
+-1943 1363 -2174 0
+2895 -3446 1437 0
+1542 2686 -477 0
+-2629 -760 1982 0
+141 -1844 -3319 0
+-1317 -2132 2464 0
+2850 2811 -3439 0
+609 -2227 -1524 0
+633 1269 -254 0
+1726 -2154 708 0
+-585 234 -1203 0
+22 1056 -3347 0
+-81 -2474 249 0
+-1511 -1149 2274 0
+2529 -1796 568 0
+-3154 1027 -368 0
+2585 2781 3223 0
+1134 -3083 2110 0
+605 -712 2899 0
+3155 3483 3109 0
+454 1701 -2650 0
+-210 -2458 -1875 0
+2118 -1983 -3116 0
+1530 -713 1973 0
+1726 2038 3078 0
+2258 -909 1511 0
+2527 -1793 1211 0
+-165 -3176 1527 0
+2741 -3012 -1798 0
+-65 -3112 -1730 0
+-249 2720 -946 0
+-1216 -2451 1457 0
+3176 3489 270 0
+2144 -1072 -2964 0
+3140 2891 -1631 0
+1940 1608 -3036 0
+-1890 2525 -260 0
+1001 -2104 -2786 0
+-2504 -1884 3085 0
+2943 -875 -1975 0
+3454 -884 1574 0
+-614 -1171 -803 0
+-121 -1365 2792 0
+1098 -2079 -1870 0
+828 -887 146 0
+-708 -3277 1661 0
+-2011 1314 1914 0
+1111 419 -758 0
+3125 -1504 -1337 0
+3367 1185 -368 0
+-115 -1430 -2666 0
+-1242 1864 857 0
+1171 -2311 -942 0
+-1298 1424 -2270 0
+-2674 -1425 -2889 0
+-1689 -2866 2896 0
+2707 3208 3192 0
+-1348 2531 2450 0
+3228 -538 3049 0
+411 -1443 2580 0
+-127 -335 385 0
+1525 367 663 0
+1796 920 2170 0
+798 117 -3048 0
+643 -1887 1794 0
+2918 -1734 1413 0
+-2983 1711 -668 0
+3408 885 3289 0
+-697 -1451 -1923 0
+478 -956 -1152 0
+-3331 1169 -321 0
+183 -2019 -3152 0
+-767 -1650 386 0
+-1205 -2025 -1895 0
+153 -3014 1237 0
+358 1233 2631 0
+-609 -1356 1206 0
+1813 566 123 0
+-1400 -2033 483 0
+372 -2799 1745 0
+-550 1603 129 0
+3336 46 3363 0
+2199 3223 1637 0
+215 -1174 -2960 0
+2673 2292 3216 0
+2508 2638 -2048 0
+-1342 -4 -3075 0
+-2638 1542 -1037 0
+2206 2713 3497 0
+-1535 2004 1142 0
+863 1984 758 0
+2767 2414 -3486 0
+-2636 261 1484 0
+354 2548 68 0
+1740 1714 1929 0
+-1962 -3004 -2791 0
+976 -2361 1326 0
+1878 -1470 -1138 0
+3434 -3141 -1058 0
+-1526 1311 3040 0
+2594 2530 1946 0
+-2360 -377 2812 0
+66 -2164 -3326 0
+988 -1292 -2241 0
+-337 1647 5 0
+-1386 -2687 1197 0
+2235 -555 -1276 0
+-814 1055 -2876 0
+2778 641 -991 0
+2918 3148 -2974 0
+2251 -1274 2570 0
+3 -2620 2991 0
+-2619 -2909 -1426 0
+-2358 -2755 -1447 0
+1175 -3237 747 0
+-1507 3424 -2945 0
+-2788 -2117 -726 0
+1840 2152 1839 0
+-3435 -2143 -545 0
+1361 1184 2368 0
+-3084 1428 -3155 0
+2000 320 -850 0
+2224 890 -437 0
+953 3425 -3060 0
+3185 2189 2018 0
+-2798 -1431 -1109 0
+-1597 -27 225 0
+-2961 65 3324 0
+-3078 -872 -371 0
+-3472 -1351 923 0
+3216 1470 946 0
+2231 2185 -959 0
+3134 1358 -769 0
+-198 -1958 -3349 0
+-1500 2384 1980 0
+-2719 -28 -2842 0
+3265 -16 -330 0
+860 -1394 -3160 0
+3399 2510 927 0
+686 -2179 1778 0
+2876 -2353 1684 0
+-377 -3266 3398 0
+-1367 -58 2974 0
+1424 3075 1230 0
+-2791 -2929 -1484 0
+2127 -2202 -264 0
+-2673 -1834 -1033 0
+-2534 -2488 -1660 0
+-2309 1335 -16 0
+-2385 -979 -775 0
+-3020 -3322 -380 0
+2107 -725 -1991 0
+-2170 656 115 0
+3119 -1899 -806 0
+-17 -1220 1505 0
+-3457 1395 -2745 0
+-3363 -1327 -1791 0
+2344 842 1619 0
+1816 -3379 -2190 0
+-2128 -376 3201 0
+-1842 2904 2935 0
+1512 3500 -3384 0
+2655 -2251 1727 0
+952 -1606 256 0
+-1516 2502 2231 0
+271 -1859 310 0
+-1822 -591 -1159 0
+112 2701 309 0
+2732 970 -2091 0
+1133 108 1997 0
+-2337 -2912 -1941 0
+1990 -1542 -2084 0
+-3054 -3013 1057 0
+-3182 1082 -1125 0
+-1876 -3279 2393 0
+823 -543 1925 0
+-3455 -2745 -2994 0
+-696 -22 1301 0
+30 -1367 -1633 0
+784 1249 1992 0
+-2337 1370 -3048 0
+-1862 209 -998 0
+-2433 -2248 -1902 0
+33 -1031 -3042 0
+390 -2672 -886 0
+-1779 -477 -2601 0
+-2943 -3025 2068 0
+2852 2216 3455 0
+-1648 2547 -1386 0
+-1841 -2412 -3414 0
+-2175 -3020 1341 0
+2675 3083 -435 0
+-2722 2650 -1386 0
+-2053 2591 -2211 0
+3187 -2253 1564 0
+1895 -359 -2888 0
+-35 2483 -761 0
+-1266 -2704 -1419 0
+-3019 -122 1070 0
+-2586 -2884 2854 0
+-4 -1185 -2663 0
+-2062 -2635 -2314 0
+-462 -3378 495 0
+254 -1267 -2123 0
+-2708 3091 2546 0
+3038 193 -2913 0
+-1295 -2052 2519 0
+324 945 -2646 0
+1497 1452 -3274 0
+-1598 -1281 -1072 0
+-133 -2877 -1332 0
+3180 -263 3054 0
+-2596 2262 -78 0
+1479 805 -836 0
+-3003 3059 -123 0
+-1111 -1240 -580 0
+-2776 -1696 1991 0
+-2319 1127 1126 0
+2487 -2778 2033 0
+369 2547 -2319 0
+557 -2925 -416 0
+867 -264 2728 0
+312 3340 2627 0
+2642 -69 -1403 0
+-2033 -137 1699 0
+249 -2385 551 0
+-3177 -2490 -480 0
+-2194 -3264 -2229 0
+2999 502 -3290 0
+1670 -177 2901 0
+763 629 2821 0
+2446 -2597 2437 0
+3153 -368 -3164 0
+-1806 -467 2231 0
+-713 -2077 2207 0
+2763 -1126 -2615 0
+-1072 -2942 2995 0
+3245 3009 -2064 0
+-2709 1835 -2678 0
+-3431 -965 -778 0
+-3485 -2640 -3433 0
+1555 3314 1172 0
+2876 1956 -1029 0
+1557 -889 3412 0
+-457 3455 -1850 0
+-1093 774 -2943 0
+1985 -1709 1994 0
+-1107 -298 253 0
+81 1563 -1701 0
+-1035 1316 78 0
+-3201 1938 1685 0
+-791 1801 2353 0
+2413 -362 -3403 0
+-1949 719 -1926 0
+2929 -1967 2643 0
+-1868 -3255 253 0
+-737 730 2131 0
+1090 2016 -1518 0
+-13 -2856 -3231 0
+-1527 -1429 86 0
+3361 2915 -2258 0
+-1054 710 2031 0
+-1367 383 -1070 0
+1801 -1867 -1812 0
+2437 756 3332 0
+936 -2794 -2808 0
+-17 -1045 2145 0
+-67 -2694 -3394 0
+-2350 1345 -2850 0
+-2313 -2995 2151 0
+-409 -2519 -3436 0
+-1253 -2187 -680 0
+-1872 843 -1195 0
+1328 -2430 -760 0
+-2329 65 -2641 0
+-1150 -1802 2752 0
+1994 1690 -2801 0
+1512 -3116 2237 0
+-3089 -855 2737 0
+297 1187 -3388 0
+-2577 -3376 1206 0
+-2615 -3131 -379 0
+-3174 -104 -744 0
+100 2405 -2350 0
+2568 3205 3009 0
+581 631 2962 0
+-3083 1535 2882 0
+1645 304 1844 0
+-588 -1379 2897 0
+-1132 2876 2219 0
+-430 968 3255 0
+-2895 2506 2051 0
+2843 942 1944 0
+-693 -1229 -2023 0
+-2300 -2590 492 0
+558 607 -1980 0
+-1955 -3200 -2305 0
+2848 1946 -1293 0
+3075 2921 -557 0
+1430 1099 1030 0
+-1828 -2511 -3113 0
+-2795 -2365 2528 0
+744 2817 2164 0
+-3079 2595 2543 0
+-442 2507 992 0
+-3130 -1624 1753 0
+-3130 -2804 -42 0
+3164 -206 -3475 0
+3089 609 2053 0
+1835 124 535 0
+-877 -434 -2304 0
+-237 3233 429 0
+1371 560 2573 0
+-445 -88 845 0
+-705 1134 -20 0
+1943 -1832 3397 0
+-1062 2569 -3173 0
+569 3089 -2619 0
+-1663 -823 617 0
+390 847 2149 0
+-3191 -1762 2967 0
+-2157 -1792 1323 0
+-721 2508 3020 0
+2471 1190 -2933 0
+-1461 -3128 1345 0
+3173 -2367 -2556 0
+3093 2362 2437 0
+2848 2077 -3467 0
+3481 -2779 -2231 0
+-2976 2033 -2499 0
+-880 -912 105 0
+-1580 -1180 1080 0
+-626 3273 -2281 0
+-799 -2177 3431 0
+2289 1099 2010 0
+698 2267 2635 0
+1577 2067 1155 0
+-2871 74 983 0
+-2382 -1116 -1860 0
+1965 452 1469 0
+-3159 1850 276 0
+-796 1698 1108 0
+2510 1133 -3121 0
+1437 398 3060 0
+97 -2904 1087 0
+-3010 -3039 2671 0
+-2344 1667 2829 0
+3394 -3251 -921 0
+3143 1373 1409 0
+2296 2456 -2054 0
+-2572 -787 -2923 0
+1926 3422 2308 0
+2866 1089 3227 0
+1988 -866 -2909 0
+-792 280 3403 0
+3288 -398 1086 0
+-531 1587 3103 0
+3203 2595 1584 0
+2801 -1691 3431 0
+2441 -2803 -470 0
+-1555 -1680 832 0
+1772 2276 -1814 0
+-253 -846 2308 0
+1669 -2501 -1774 0
+-958 -3154 3436 0
+2966 -380 3441 0
+-411 -2572 -1572 0
+-1065 2401 -1171 0
+840 2816 -2698 0
+-2271 1804 -416 0
+-2048 3229 1027 0
+-138 1382 624 0
+-95 -1277 -99 0
+-203 -1786 -778 0
+608 -1139 -1473 0
+-651 -1436 2447 0
+-49 -399 -1793 0
+-883 2710 1107 0
+-246 -604 376 0
+-571 124 -3069 0
+-2062 1154 3466 0
+92 2632 -1386 0
+272 2174 -3403 0
+2240 -2672 -1170 0
+-555 -1061 -283 0
+1452 -1633 3353 0
+-307 1962 1829 0
+2953 -442 -3255 0
+-1407 -492 -1338 0
+125 -3402 2570 0
+-1815 -2530 -3126 0
+-1545 -2327 -2870 0
+-3353 -2756 -449 0
+-638 -1005 -2432 0
+-2790 734 242 0
+-2876 -324 2003 0
+-787 3382 53 0
+-268 1573 199 0
+2035 376 -1965 0
+1882 -1864 445 0
+-2418 661 1725 0
+-2690 2711 2124 0
+1822 2669 -1916 0
+1916 -204 -3490 0
+1598 -3422 986 0
+2067 -188 -2644 0
+1891 923 905 0
+-365 1938 -2621 0
+-2401 -804 3328 0
+-1273 2664 1387 0
+1561 -52 2681 0
+160 -1028 2172 0
+-629 -1159 -2070 0
+2921 1316 -75 0
+1017 2569 2542 0
+329 -408 -2351 0
+-3074 -659 93 0
+-2534 1868 -3289 0
+472 1408 -2933 0
+2930 -2830 -629 0
+2453 2473 1336 0
+-2449 -333 1511 0
+-2439 1147 -736 0
+-1243 -144 2994 0
+633 -25 922 0
+-1833 -1609 -2735 0
+2129 -354 -1291 0
+2887 -2408 -1035 0
+-1469 850 1428 0
+-1188 2766 2023 0
+-1864 61 1161 0
+2917 978 2251 0
+1633 -2498 -2172 0
+183 2311 -1752 0
+-1375 -2299 650 0
+-827 1176 2485 0
+-182 2126 -1671 0
+-3428 -2515 -344 0
+2458 -1326 -1558 0
+-1506 2515 71 0
+-1125 2177 -1785 0
+-1137 3062 3125 0
+639 1036 1978 0
+839 1904 -2203 0
+-1740 -2893 -512 0
+-418 -361 436 0
+-255 -611 1334 0
+1049 -3288 1626 0
+3463 -2700 -1128 0
+-1827 1610 -122 0
+-683 257 3133 0
+3187 -2263 -3203 0
+-533 -2068 2835 0
+-2085 -2657 1163 0
+-2686 3152 -709 0
+-2917 312 -2433 0
+365 -3331 -2417 0
+2723 284 3269 0
+-1483 -2415 -3137 0
+-924 3066 3119 0
+-347 1665 -2208 0
+-602 -2717 -1699 0
+-3465 1083 -2211 0
+3366 -2705 833 0
+-2357 -1164 -2330 0
+-2196 -3317 3336 0
+958 1096 -869 0
+-1808 214 1082 0
+-242 -2618 -3227 0
+-1787 1706 505 0
+233 -3213 3061 0
+2073 -3485 692 0
+-2462 -1687 -1890 0
+1601 -215 -1577 0
+669 -2024 2814 0
+2910 1729 -3095 0
+-2170 1807 1336 0
+-3009 1498 -2974 0
+-463 -2018 1792 0
+618 3458 -1334 0
+1670 2316 -3365 0
+1187 77 690 0
+-1992 1710 -1393 0
+3376 -2256 2533 0
+1987 3007 2292 0
+1215 1583 -359 0
+-1940 -3483 -1039 0
+3429 -870 3019 0
+-2821 -618 1287 0
+2123 -2800 1717 0
+-2470 2053 2961 0
+-2001 456 3417 0
+2656 -1024 1485 0
+-2287 3435 2381 0
+2553 -994 2633 0
+-3444 -2140 -2155 0
+-907 3000 2639 0
+2856 -2763 -1818 0
+-920 1552 8 0
+2076 -1436 914 0
+-2279 -2171 -2854 0
+2518 1481 1622 0
+-1435 -2413 1356 0
+-1445 1334 -3130 0
+-3428 403 -1274 0
+1931 2173 970 0
+-1427 -1786 -2006 0
+-26 884 -638 0
+-3168 1014 -1578 0
+-2343 -2349 -2867 0
+-561 174 1898 0
+761 -1131 2731 0
+-2454 -3076 -1695 0
+2076 -2295 2363 0
+233 -1876 452 0
+2703 2540 -247 0
+520 762 53 0
+1286 -2749 -2343 0
+-1074 2305 -508 0
+-240 2374 3322 0
+-3358 -338 -1901 0
+-3334 1590 -570 0
+588 648 2717 0
+-780 408 159 0
+-753 -1657 -2513 0
+2451 503 -1266 0
+3372 -1322 -1696 0
+-3103 -247 -2120 0
+3240 3254 -2484 0
+-1063 -311 -2863 0
+697 1693 -1102 0
+102 -558 2434 0
+-3316 1036 2286 0
+-3025 -2555 2172 0
+2691 1275 2453 0
+2324 -2450 -849 0
+-3474 1024 2374 0
+-2785 -1993 -2251 0
+-3476 -2802 1055 0
+568 -1207 -3247 0
+2480 3309 2586 0
+1481 -1608 3092 0
+-2461 -2671 -2696 0
+1731 -3198 -1701 0
+-2505 -998 611 0
+371 -2814 -1020 0
+836 -959 -1503 0
+2925 -1416 16 0
+-1293 678 -465 0
+-1762 3394 2205 0
+-1963 443 3418 0
+-1981 -222 1425 0
+447 1740 2971 0
+1509 -1469 -256 0
+-1869 -3395 890 0
+-2027 119 2334 0
+-247 -911 -799 0
+-113 3185 3109 0
+109 -3418 3303 0
+11 -2191 -3434 0
+-2006 2433 929 0
+2160 2081 -1643 0
+1906 625 109 0
+-746 1349 1795 0
+-837 -2824 -1712 0
+-2608 -1217 2342 0
+-2805 -3320 570 0
+-765 -3218 -565 0
+-1621 -44 1974 0
+-622 -144 2337 0
+-2701 -2073 -2983 0
+2562 1914 174 0
+-344 1459 -2326 0
+-3387 -3334 3416 0
+1768 1117 482 0
+-268 1398 100 0
+3254 3169 -1543 0
+652 -780 -1947 0
+634 -52 1764 0
+2275 505 1944 0
+-3345 -668 1050 0
+-2123 3430 2471 0
+-1633 3359 1733 0
+-2017 -139 2834 0
+-2036 -1934 1500 0
+25 -2587 -2588 0
+-1461 -940 -3001 0
+2862 -3033 46 0
+-1025 -131 -630 0
+-3065 1073 1705 0
+1875 417 2422 0
+-1097 -714 1772 0
+1947 1349 -353 0
+2743 3456 2540 0
+2338 3250 103 0
+-2483 3183 2937 0
+2403 -2488 -2570 0
+-3331 1893 -2495 0
+2573 123 1112 0
+-3113 1267 3359 0
+-816 3345 -1740 0
+2604 -3315 -259 0
+-2350 -3401 1269 0
+-2988 634 2869 0
+-2272 1694 -1843 0
+-1406 -393 3157 0
+-532 2775 -351 0
+2731 -3123 3442 0
+1527 -1232 2539 0
+405 -3081 -1347 0
+151 581 504 0
+2675 2497 -1382 0
+-1482 -2047 -3243 0
+1996 1417 3430 0
+-327 1765 2434 0
+1330 -2364 3127 0
+-2146 -403 751 0
+489 2396 -3337 0
+-1023 -3408 -1559 0
+2895 173 1792 0
+-770 -1690 1531 0
+-2501 -118 -1318 0
+-1187 3101 841 0
+-2220 -1269 -803 0
+1965 1213 1356 0
+1244 2626 -1759 0
+749 832 163 0
+1735 455 1431 0
+773 -3158 2277 0
+-1368 -657 2879 0
+-2085 -637 55 0
+-1866 3155 1671 0
+1346 -1166 -1240 0
+3096 2745 553 0
+3214 2263 1001 0
+-2382 -2264 796 0
+-1912 -3122 -1858 0
+1383 1196 -1504 0
+1643 948 -353 0
+-2409 -3421 -437 0
+2813 507 2335 0
+394 -464 -2313 0
+-1306 2025 -2743 0
+1438 -1128 1773 0
+385 1547 1853 0
+1227 -1300 2741 0
+3036 -881 3149 0
+-2320 -3388 -3456 0
+-872 15 278 0
+-3479 2468 967 0
+7 -1985 -427 0
+-1441 -860 3462 0
+2014 1463 3125 0
+1031 -2811 -2495 0
+2832 -250 498 0
+-2619 3410 1811 0
+-2328 300 -2073 0
+-195 -2542 2487 0
+3075 -2663 1063 0
+1973 -630 2193 0
+3439 -1632 2414 0
+-186 3195 929 0
+-746 2353 2780 0
+-1954 -1357 -1240 0
+-2773 -2813 1935 0
+-1030 2816 -1723 0
+2605 2970 -2393 0
+565 1521 2925 0
+757 -3156 -2495 0
+-1033 -608 -1670 0
+-1850 916 -1861 0
+2893 1046 -3264 0
+-2760 3075 3246 0
+-1581 378 2615 0
+-2132 1139 491 0
+1781 -2008 -5 0
+1835 -1335 1759 0
+-2817 -1426 1799 0
+1391 1672 -1116 0
+1140 933 -2485 0
+-1588 -264 3462 0
+-465 -3165 1176 0
+2896 -2442 -2883 0
+1992 -620 2542 0
+-950 -1481 2461 0
+-3306 1232 -644 0
+-337 -2989 -2906 0
+1425 1156 3123 0
+1106 -1312 1778 0
+3460 -535 1110 0
+1906 43 985 0
+-830 1794 1322 0
+-983 1 -3112 0
+2677 1238 -2442 0
+842 2243 -341 0
+871 768 1884 0
+1599 -3073 3033 0
+1091 -140 2654 0
+714 469 2319 0
+-1467 -1811 1037 0
+-63 898 -2820 0
+-2582 1995 810 0
+3047 2042 -2991 0
+2939 -3026 2157 0
+2817 -1505 333 0
+3279 948 -1225 0
+-3457 -1185 -2459 0
+3478 395 1693 0
+3215 90 -1037 0
+1084 -2369 1480 0
+1629 -3097 1934 0
+-2843 1126 -342 0
+2522 2090 -2339 0
+-2802 1412 -1293 0
+1637 2802 1464 0
+-3207 2039 2168 0
+124 -2364 -2037 0
+1334 -3025 -474 0
+205 416 2666 0
+566 -584 -1308 0
+648 1639 318 0
+3159 -1816 -1691 0
+1228 1409 2947 0
+2615 1658 -1269 0
+-1239 1626 -1700 0
+370 448 -1533 0
+-2315 -1207 3214 0
+-982 2421 1693 0
+773 1519 339 0
+-3253 1121 3400 0
+-811 1668 2279 0
+-2024 893 1723 0
+-2626 -1547 -1595 0
+-3414 -547 1297 0
+-720 2462 2428 0
+1161 2631 997 0
+-2530 2502 -2749 0
+528 3429 -3421 0
+1813 -390 1266 0
+3243 2736 -326 0
+-1065 1402 815 0
+1604 -1918 -3266 0
+-1330 -3041 2367 0
+-2781 -2795 -3038 0
+-1356 -2546 -1485 0
+-2254 -857 2745 0
+2553 -1516 -1454 0
+-2136 -1574 541 0
+-1137 -1120 -2990 0
+992 -3437 -1436 0
+-2907 -471 -345 0
+1935 -563 -368 0
+-1232 1299 -680 0
+-3246 1659 -2248 0
+1522 1994 -3275 0
+2880 118 2945 0
+3064 -3360 1330 0
+2142 -2731 1866 0
+-1778 1726 2477 0
+1086 212 1957 0
+3008 2668 -1186 0
+87 -3491 876 0
+-173 381 -2956 0
+2813 359 -1171 0
+-1512 3333 1834 0
+1709 3126 -966 0
+-2987 1561 999 0
+-798 1953 575 0
+3425 2643 -926 0
+3118 -2568 -659 0
+-1240 2243 -3242 0
+-1677 761 -2206 0
+-2174 2931 681 0
+2036 3393 -888 0
+1490 3255 -3456 0
+-1459 2781 2060 0
+-3409 -1751 3473 0
+2428 -3460 2773 0
+1863 1246 -2485 0
+-2574 2639 1032 0
+-2741 -289 2691 0
+1043 2583 -3267 0
+3250 -1202 552 0
+-349 -1782 671 0
+-227 -1241 2071 0
+1959 1262 -3333 0
+1095 -3051 169 0
+2733 -1512 3127 0
+908 979 1569 0
+3455 -1392 -1161 0
+-3467 1275 1866 0
+-1681 -1983 3137 0
+549 2069 -2803 0
+624 -1670 2899 0
+-3250 -1534 549 0
+-1104 -2313 -1744 0
+3485 -138 -1156 0
+-617 -2143 265 0
+-881 -1656 2490 0
+2289 408 3381 0
+3015 -1471 3362 0
+2505 -3139 -1813 0
+2416 2499 1615 0
+-2504 -152 1546 0
+1715 -1381 -656 0
+3078 -2246 -1997 0
+764 1954 -142 0
+-1197 2696 -116 0
+2960 -3305 -3279 0
+-2252 -1684 -115 0
+-1394 -2509 -742 0
+2247 2006 1908 0
+967 1205 -3301 0
+972 439 2370 0
+-2127 -1711 -1254 0
+-2649 1518 -2787 0
+-2663 265 2234 0
+-3316 1777 3362 0
+-2340 837 -1609 0
+-2996 828 -545 0
+3031 1229 -1351 0
+3309 -2050 -1682 0
+-2246 -483 2517 0
+2100 -1177 -635 0
+2642 -3019 -1336 0
+2051 -3257 1916 0
+296 1621 1797 0
+-3129 1299 1065 0
+456 1672 2600 0
+-916 2436 -1711 0
+-497 -1139 42 0
+1360 -1278 2683 0
+-2782 -116 -2422 0
+-895 844 -1008 0
+-1372 -1684 -2357 0
+579 157 3105 0
+1271 -535 444 0
+-2122 -2027 -305 0
+-3416 325 265 0
+702 3255 1943 0
+2280 -1464 738 0
+-2634 -2034 1056 0
+2885 2203 -1913 0
+2360 207 2588 0
+-516 -2107 -2175 0
+2382 3071 -3390 0
+1415 2316 -2192 0
+2425 -3048 2987 0
+-134 -3289 1031 0
+811 -2166 -1817 0
+-3467 1794 -1044 0
+-3345 708 -2406 0
+2031 974 -2456 0
+3038 -2308 -2929 0
+1704 -1384 -3156 0
+-1210 -399 -2659 0
+-1188 400 -1162 0
+1293 635 -1271 0
+-2728 -2180 136 0
+-1372 1847 -2209 0
+2455 -1124 2921 0
+-795 2785 -2502 0
+501 -139 2561 0
+-725 -2218 -3323 0
+1012 -692 450 0
+-860 2817 -2257 0
+2266 -2845 747 0
+1997 2142 2382 0
+-45 2990 -2511 0
+-1115 -507 2881 0
+1205 -360 2225 0
+-2758 2168 -2541 0
+-450 -661 3173 0
+293 -2649 -1979 0
+-2596 -1682 1398 0
+-557 -1303 -3123 0
+32 -1017 -983 0
+-1614 1093 -524 0
+-1817 482 -599 0
+-2624 2053 2796 0
+1867 -2553 -769 0
+-3196 1055 -3000 0
+-768 -3470 3389 0
+-2626 -1309 -2670 0
+-2068 1602 -2599 0
+-572 -749 -635 0
+1798 -2318 -1041 0
+1390 -2932 -169 0
+-1851 1025 2401 0
+1566 -1988 1590 0
+564 2052 1784 0
+-2830 -3015 -2934 0
+3466 2364 2182 0
+-2216 1826 -192 0
+3435 -1695 -1425 0
+-3009 1945 3301 0
+746 -309 -778 0
+816 566 -140 0
+2211 -3280 -2096 0
+1263 -1728 453 0
+2742 -1640 -1521 0
+-1413 571 -2526 0
+-1464 -2092 -3020 0
+1276 -1087 2267 0
+1025 -1713 2987 0
+2405 -2126 -3413 0
+-1985 -2411 -3048 0
+-404 -1277 3040 0
+1227 -2528 -1869 0
+1996 1323 -2147 0
+-2374 3037 1595 0
+1145 -776 -2635 0
+-1491 -1333 2034 0
+65 -1687 2074 0
+-386 2949 -777 0
+-2518 2646 -649 0
+-1504 820 -1848 0
+-2601 -2992 2607 0
+-1306 -1286 1764 0
+3047 -427 358 0
+-591 855 1428 0
+475 -3297 1710 0
+-1248 -1483 -1244 0
+-2265 3262 2041 0
+3408 -174 -583 0
+-1539 3405 908 0
+-396 764 2677 0
+-1836 3284 -1164 0
+-409 76 -3478 0
+-1694 204 -220 0
+-2398 1959 651 0
+136 -750 1239 0
+-3373 -351 -2893 0
+683 -1442 3471 0
+-2874 1304 32 0
+-364 -3282 -1232 0
+1689 1479 2267 0
+2365 2292 -1795 0
+730 1485 3235 0
+91 -3120 -2186 0
+-2918 -2080 -1372 0
+-3131 1180 1999 0
+-327 2085 -79 0
+-802 -2855 2979 0
+242 1698 -964 0
+-3012 -2932 -3080 0
+-1403 -364 -320 0
+2528 -3225 3265 0
+1491 611 -2854 0
+3435 -3159 -2956 0
+2015 1003 559 0
+2250 3293 1044 0
+1476 -760 -1183 0
+1003 -1091 19 0
+-1703 -39 1585 0
+1983 1962 1546 0
+68 -982 2909 0
+-3473 -2097 2084 0
+-1256 -2453 1200 0
+2789 -2425 -764 0
+2322 609 2233 0
+3303 -2450 -2160 0
+2811 -2743 2865 0
+1187 -913 2966 0
+-2611 -1515 -1582 0
+2045 1525 1186 0
+-1308 -2557 -1773 0
+-2116 -3349 -2491 0
+2685 -3334 317 0
+2209 -1554 963 0
+2502 -38 -2161 0
+-782 2211 -226 0
+-1055 -1567 200 0
+-117 -735 2980 0
+-2750 -478 1913 0
+439 949 -1439 0
+-1699 3078 -2059 0
+893 -2144 517 0
+3017 -1727 -583 0
+-1302 2896 635 0
+3220 -2221 -1549 0
+278 -2381 -157 0
+3158 -553 8 0
+645 1701 3275 0
+77 -2115 2855 0
+-779 -323 -3243 0
+3159 -1619 3375 0
+-2978 -2823 1333 0
+1098 2355 848 0
+-1582 3204 -396 0
+-2946 -1632 675 0
+-1640 1395 2372 0
+-1533 -800 1880 0
+187 -610 -2277 0
+-1169 2381 -554 0
+3430 -452 -3268 0
+2937 1460 1166 0
+-2099 2181 55 0
+-1532 38 -2781 0
+-98 2672 1322 0
+-1756 -3225 2814 0
+3334 899 -3080 0
+1624 1262 -1077 0
+865 -1557 1249 0
+3217 -1287 325 0
+-2113 360 787 0
+-1329 -1922 1913 0
+-791 -3179 -341 0
+3368 3363 2108 0
+-2262 -2457 -711 0
+-2656 -1360 1160 0
+2688 -2766 -1215 0
+-2610 -1214 557 0
+3044 2759 -1849 0
+517 -3190 -658 0
+2253 3224 2829 0
+2259 -3372 -3124 0
+2702 -3091 -1022 0
+1970 -572 -3470 0
+-2594 -3031 3459 0
+-2684 -2 2324 0
+-3291 -1346 2605 0
+749 3203 -2222 0
+-487 -1289 1919 0
+-3479 1745 -3296 0
+3198 415 1387 0
+2530 -319 -839 0
+-1346 -1230 1926 0
+1773 -643 3470 0
+821 75 -2958 0
+769 -2350 -2356 0
+421 -1412 -1761 0
+162 -338 654 0
+-1344 -1175 1988 0
+1048 1093 -1873 0
+993 -3206 -324 0
+-77 -3446 1483 0
+-240 -1312 -3037 0
+2839 892 2866 0
+-1658 2187 -1535 0
+-3301 -3201 -2369 0
+1567 -769 434 0
+3219 -396 1249 0
+-2996 811 1101 0
+-3267 -589 2008 0
+-2513 -1151 1314 0
+2238 2464 893 0
+1757 69 1642 0
+-2083 -1905 1526 0
+-3070 -2264 -3244 0
+2282 -2579 -969 0
+3451 -3273 2712 0
+1810 -1277 -3120 0
+-3197 -556 -1096 0
+-1107 -3373 -824 0
+641 1873 3038 0
+111 -2548 -1902 0
+548 2728 2091 0
+1242 550 -3388 0
+-379 -2312 -864 0
+3368 2741 -1223 0
+1081 -1768 1216 0
+1888 381 -87 0
+3463 -759 -3127 0
+-2159 1641 257 0
+605 508 1864 0
+-2125 -3064 -3073 0
+-562 -2543 -2576 0
+-3414 458 -3052 0
+1318 -90 2680 0
+1962 -470 -3131 0
+701 1777 -2147 0
+-1043 2810 -151 0
+-2714 925 736 0
+3256 -2187 -1511 0
+191 -1151 2443 0
+2993 2536 -3408 0
+2619 391 -1035 0
+-315 605 -3420 0
+1716 -3393 3020 0
+1768 -1377 -370 0
+199 -3463 1132 0
+417 -820 2179 0
+-1349 2103 232 0
+3294 1698 -2348 0
+-1090 928 33 0
+2785 -1160 -2966 0
+2617 2542 -690 0
+1790 -213 492 0
+2415 -2390 -3471 0
+-1830 -1853 -26 0
+-556 -2117 2058 0
+507 1465 -1109 0
+-768 693 3290 0
+1423 -1470 2816 0
+1551 -2501 -403 0
+-1789 -1837 -2673 0
+-1988 -1567 2727 0
+2106 -2073 -973 0
+483 -566 -2709 0
+3392 1026 663 0
+1418 -2386 2857 0
+148 1237 1297 0
+-890 -456 2701 0
+1325 324 -1636 0
+1771 291 420 0
+-725 3404 1592 0
+1168 605 -3454 0
+2867 1804 -306 0
+1251 688 -19 0
+-1106 -351 1085 0
+-2349 2607 -1419 0
+-1513 -2437 1490 0
+518 -3234 679 0
+3326 -1669 3 0
+2836 3477 2504 0
+-455 2871 105 0
+-260 -3375 234 0
+-1587 -2221 -3073 0
+1359 1327 3411 0
+1215 2437 2432 0
+2252 2794 2449 0
+2411 -1015 1905 0
+-151 -2001 -1312 0
+1770 972 2198 0
+926 -129 1102 0
+-1304 1947 -1476 0
+3495 103 -2673 0
+-2259 -1998 -1694 0
+-2333 -2479 -3060 0
+686 1088 349 0
+-3375 -2043 2249 0
+2716 406 3253 0
+1325 2402 2769 0
+-3132 559 1405 0
+3287 604 -2906 0
+3063 -2604 1100 0
+-1625 95 -3134 0
+-1609 1857 -781 0
+1104 -2727 -2522 0
+-1780 2723 -3182 0
+3335 1407 850 0
+-289 -2822 1004 0
+230 -3414 3121 0
+3212 -1106 2387 0
+-3070 2435 -3050 0
+-920 1361 1822 0
+-1332 -1184 2494 0
+3109 -1299 -1309 0
+-216 1645 -3459 0
+1448 1198 -1821 0
+2499 130 -1566 0
+2569 562 51 0
+-2439 -2278 -2682 0
+-1158 -1107 -717 0
+3334 594 2547 0
+-1777 1654 -1903 0
+-358 -2617 -1223 0
+473 -2328 400 0
+-2836 906 -860 0
+-1508 -286 -1724 0
+1016 877 -1906 0
+2389 251 3182 0
+673 -1636 2905 0
+-1008 -93 -2683 0
+35 -1646 2792 0
+-3153 3369 -2977 0
+3309 -538 -3370 0
+1534 -373 -41 0
+-1705 -2018 2962 0
+2751 -1890 3317 0
+-765 1488 3499 0
+2407 2829 3368 0
+-3163 -3241 1070 0
+3313 830 -1072 0
+3030 -3287 1218 0
+2601 2572 2616 0
+-1553 2378 -967 0
+-80 -146 -664 0
+3101 490 -2306 0
+721 1883 3254 0
+-111 -1583 -2942 0
+1753 -2220 1876 0
+-2876 315 1775 0
+736 -1455 1806 0
+2786 -2095 -3035 0
+-769 -702 2327 0
+3050 -1137 1210 0
+-1456 -1467 -106 0
+2748 -1117 2067 0
+-961 -1949 2521 0
+-1403 -1128 2141 0
+-2248 -533 -3459 0
+2897 -2327 -3183 0
+-604 3274 -3132 0
+-1143 -3192 -149 0
+-1075 -2001 -156 0
+-2155 2331 -2287 0
+-930 -203 -2546 0
+-2188 2316 -1370 0
+301 -2541 -2104 0
+-2203 -740 1880 0
+-1345 -3298 -3222 0
+-2464 268 -407 0
+-2551 2463 1056 0
+3315 -2845 1347 0
+1544 1127 -753 0
+3179 -40 2273 0
+1561 -413 -402 0
+1140 -3413 820 0
+-435 2323 2989 0
+-1228 -219 3316 0
+1861 -3070 2470 0
+1662 -3078 -2357 0
+2893 -2933 99 0
+-274 -885 -312 0
+2766 -1405 394 0
+456 714 -655 0
+-1867 212 -890 0
+-1425 2565 3088 0
+-1108 3196 2457 0
+2366 1547 1207 0
+-1491 -695 1688 0
+-1887 165 1500 0
+-1167 1336 -280 0
+2894 784 3380 0
+2597 -1462 2516 0
+2583 831 2711 0
+1126 2573 -3196 0
+-2343 -3495 1093 0
+1102 1661 3077 0
+-1625 286 2816 0
+-2255 3307 -1675 0
+-2103 114 590 0
+1747 -671 -3111 0
+2016 -2251 -2596 0
+-1718 499 306 0
+1304 1712 2145 0
+128 2687 1923 0
+-51 2708 1912 0
+2485 3030 604 0
+3061 2845 -824 0
+-3374 2210 -3238 0
+1473 -1601 107 0
+-435 193 -877 0
+1962 2531 -1096 0
+116 -1956 717 0
+2611 1406 -2175 0
+-2175 -1009 807 0
+-299 1271 -885 0
+2595 2009 837 0
+-1261 -262 413 0
+-2495 -1567 844 0
+1544 -389 3293 0
+167 2437 -583 0
+-86 -2666 -1303 0
+-1700 954 -2279 0
+2938 890 -1674 0
+-1246 -1251 2270 0
+-2830 -1135 374 0
+1586 -1394 2554 0
+753 1759 -2714 0
+-3073 1810 -3155 0
+-2195 -3200 -2536 0
+-988 -905 -131 0
+-339 1739 2468 0
+-929 -1546 1426 0
+-3224 -2910 -1460 0
+1516 -3465 98 0
+-3185 -865 -3208 0
+1868 2712 -1779 0
+898 1399 1894 0
+-3202 -323 3151 0
+-1675 -1935 2383 0
+640 3118 -2656 0
+2500 2871 1130 0
+-3390 356 -971 0
+613 -366 -3283 0
+2716 -1183 3097 0
+-3183 2132 1741 0
+-2125 2311 2452 0
+-2645 -1967 -129 0
+-1748 -109 -1675 0
+-2130 1349 2041 0
+-3377 -1183 -1022 0
+3295 -163 1142 0
+-2045 -1455 -3285 0
+3448 -2324 -147 0
+3448 -1389 2089 0
+-2243 -1651 473 0
+-2847 -2319 2373 0
+-2124 -246 -1428 0
+1662 1563 1432 0
+984 485 -2676 0
+2301 -1038 1342 0
+3124 -1779 -199 0
+1902 1568 -2401 0
+-2177 870 -1047 0
+1949 -181 902 0
+-1506 774 -153 0
+555 -2803 1719 0
+2984 1823 -2267 0
+-546 -1285 -1184 0
+-217 861 2066 0
+3253 1464 -2615 0
+2641 -1393 -2002 0
+-1444 -3231 -2537 0
+-490 2942 -998 0
+-605 258 -1611 0
+3227 -2394 1889 0
+2806 -1178 2971 0
+309 1165 682 0
+-2037 3283 2946 0
+2104 -1994 1515 0
+-1183 1466 -2431 0
+1585 883 -2433 0
+-2441 1269 2781 0
+-306 3122 2796 0
+868 -2617 -260 0
+-2964 1874 -1519 0
+-784 2539 -2364 0
+-2020 -713 1409 0
+1737 -1311 -1802 0
+425 2005 2030 0
+-174 207 2423 0
+2851 1329 1373 0
+3361 1496 -3179 0
+567 1118 2774 0
+-2482 -2088 2740 0
+-3251 -2111 1461 0
+1683 740 -2700 0
+-3203 2005 -3133 0
+603 -3099 -2075 0
+-1141 -2070 2043 0
+346 -724 -1751 0
+-3489 2995 -2944 0
+2841 1253 -346 0
+-3028 -1085 -2670 0
+-1498 -716 -38 0
+-1378 -1052 -2838 0
+786 -2735 -55 0
+-2473 1326 -741 0
+-1112 -2620 2895 0
+-1855 -2099 -961 0
+1829 2518 -939 0
+2183 -1183 -2004 0
+-96 633 -1203 0
+-3093 -1642 1010 0
+502 1929 1935 0
+-1235 -1727 -3144 0
+-2109 -890 -3243 0
+-1028 370 1260 0
+3034 -386 -3066 0
+2212 759 2666 0
+-29 2956 653 0
+-920 925 2551 0
+-1202 506 -1738 0
+-3142 2619 2446 0
+-1421 2250 1797 0
+1372 -1815 79 0
+-3427 -1728 -2807 0
+1518 857 2078 0
+289 -365 1746 0
+1590 468 -1846 0
+1754 588 -545 0
+-2537 -1665 -1321 0
+-1543 -1478 1361 0
+-1493 -1775 -1056 0
+-1168 3187 2984 0
+399 1250 1306 0
+-1654 -2265 -1106 0
+789 -2924 -1546 0
+-2322 2433 1396 0
+-616 -2633 699 0
+-1835 -3353 2085 0
+1378 1500 56 0
+-227 -1752 3110 0
+-434 2837 -2527 0
+-2855 -3296 -3444 0
+-603 1593 1362 0
+1613 415 2881 0
+2216 -1314 -2756 0
+266 2854 -2556 0
+335 -1522 397 0
+-625 -3243 1453 0
+2394 -343 2677 0
+3278 -2830 1860 0
+2014 1774 -1728 0
+-3247 2739 -2192 0
+-2732 634 -1534 0
+79 1652 -3236 0
+-145 -2220 -605 0
+-1558 2705 485 0
+-661 2995 1498 0
+-3034 -1003 3205 0
+2254 2963 205 0
+-1232 2212 -3322 0
+531 -1935 1212 0
+-669 2650 -1771 0
+-1849 1377 1473 0
+1886 865 630 0
+548 -1418 -1814 0
+2076 -2619 2080 0
+-2928 -2202 -2911 0
+2725 -1778 609 0
+1683 -3476 344 0
+-116 -2467 -150 0
+-2772 3124 -2734 0
+2220 -951 740 0
+1394 1620 565 0
+2921 1223 1294 0
+1 -2457 2941 0
+3247 1331 602 0
+1074 2727 242 0
+-2385 3430 -1307 0
+-2732 2742 123 0
+-2021 1944 -2591 0
+83 -97 1708 0
+1979 -20 1306 0
+1171 1897 695 0
+1595 -430 381 0
+1371 675 -3379 0
+1200 -2103 -1375 0
+1995 -3092 -1058 0
+2275 -1087 -3329 0
+374 -1708 -2259 0
+1354 989 3444 0
+1794 828 -2439 0
+707 -2056 2947 0
+1194 1842 -2393 0
+-562 -3093 68 0
+-857 1980 -3450 0
+2712 3065 -2140 0
+-2243 2937 3144 0
+-412 605 -3118 0
+423 2263 2448 0
+1866 -252 1649 0
+-2268 1945 901 0
+336 3430 441 0
+2156 411 3105 0
+2257 207 43 0
+-3350 -2458 2253 0
+-302 -1467 -2853 0
+-2830 -2009 2960 0
+-2333 3301 875 0
+-2770 2932 -651 0
+2131 1382 -600 0
+-1694 -1155 3146 0
+2026 194 -1734 0
+2984 1268 3309 0
+2189 1772 2055 0
+-1094 -2922 1773 0
+2609 -922 -3127 0
+770 3042 2187 0
+-616 1842 955 0
+-524 -729 -1264 0
+1219 3469 -1332 0
+-660 -1708 -704 0
+-2148 2986 2436 0
+-2966 -3344 -1435 0
+-2957 442 755 0
+2968 -563 -2613 0
+1178 2336 -1354 0
+-719 -1013 -1691 0
+1877 -3000 2463 0
+2518 2894 2105 0
+-1166 -2121 1009 0
+-123 1005 -1571 0
+-1998 2359 2494 0
+2958 1705 -2591 0
+-3392 -2587 1068 0
+-2934 -2763 461 0
+-2787 -2456 3042 0
+-2650 -2816 -1048 0
+-2057 -2679 -2963 0
+-929 -3378 2139 0
+1205 -3178 3127 0
+-738 723 -2705 0
+-220 1803 -3362 0
+-1344 -3356 -2180 0
+2292 2172 -3123 0
+-3114 2383 1294 0
+-2931 922 1724 0
+-416 -1980 -1479 0
+-1569 -260 3344 0
+741 -2048 -804 0
+222 -2497 3208 0
+-1113 -2321 2791 0
+2160 2488 1925 0
+-2480 -3288 1416 0
+-1680 -1767 -1568 0
+1897 -2986 894 0
+1184 -1832 541 0
+549 -828 -3340 0
+-3 -2745 -1559 0
+-2922 -2816 3465 0
+-257 2673 -2755 0
+-2436 -2073 -443 0
+1890 -1814 528 0
+-1970 -473 321 0
+-1873 1769 931 0
+-2071 95 -930 0
+1310 3287 -634 0
+-2497 -1221 1740 0
+-2464 2279 -1422 0
+1466 2342 -983 0
+1467 -960 797 0
+-910 1755 -1989 0
+-926 1410 -1795 0
+-394 3358 -193 0
+1771 1075 1392 0
+385 1611 -919 0
+-3233 -1013 -2525 0
+-375 -485 -2095 0
+-1434 -3037 1660 0
+-2572 -1387 -543 0
+-2203 2137 -2272 0
+2720 -1384 -3492 0
+3232 357 2151 0
+-2496 1439 -1377 0
+1760 -3029 594 0
+2425 -998 -3109 0
+-616 -1773 -2560 0
+2407 -2130 2508 0
+1714 -865 34 0
+2752 2690 -1440 0
+-2350 -2579 -1425 0
+3116 1016 540 0
+3152 2367 2209 0
+-2562 -2876 76 0
+2169 1204 -1606 0
+-1141 3008 303 0
+-2408 -2974 1307 0
+3499 -2960 2740 0
+238 2091 -1729 0
+-2523 -1492 1755 0
+2870 53 3114 0
+-3310 -273 1944 0
+-2796 2537 806 0
+-423 78 -657 0
+1178 -2203 -3406 0
+2268 -3351 -1652 0
+-2675 1485 744 0
+-1026 1870 -2293 0
+-1839 218 1728 0
+-223 554 -2075 0
+2882 3234 3162 0
+2196 -2847 -1783 0
+109 128 2872 0
+1152 1636 -3127 0
+2244 2768 -2273 0
+3257 -2185 -886 0
+876 682 3262 0
+-312 -1774 -1848 0
+-2860 -2355 869 0
+-858 -1829 -2410 0
+1468 2255 -1656 0
+1999 2722 -2754 0
+-1645 -2353 -4 0
+-1062 -199 -358 0
+-1896 680 -1342 0
+825 1755 -2962 0
+-2720 -2442 640 0
+-924 1260 -2202 0
+476 626 3180 0
+1741 2200 -1800 0
+-2010 -2851 -2204 0
+-175 -272 -3364 0
+813 -3196 -563 0
+-3335 1661 1712 0
+-1445 2915 -2373 0
+185 338 1147 0
+-1847 -465 -439 0
+-3030 1115 -3322 0
+-1122 -2715 117 0
+-622 -879 1705 0
+-1250 -633 -1425 0
+629 -3101 1890 0
+-1421 1290 644 0
+713 -768 1047 0
+-854 -2446 1704 0
+-1483 2541 -1041 0
+396 -236 -2762 0
+-35 -43 -3218 0
+-2435 -2451 357 0
+587 1666 2942 0
+183 -2823 3041 0
+3187 2032 3432 0
+-2047 -1976 -1290 0
+2776 -2123 -3426 0
+-1724 -190 44 0
+3258 -557 -2949 0
+2943 33 2558 0
+2768 3429 3194 0
+-2937 -1442 -696 0
+540 -1880 2309 0
+-361 2150 1146 0
+1013 -734 2063 0
+-1009 -896 2573 0
+2156 -3060 69 0
+1464 -2675 1337 0
+-1766 -49 2614 0
+2013 -1783 -1171 0
+-2538 -1675 -3117 0
+-523 -2757 -1869 0
+-337 3433 3176 0
+-994 2967 1857 0
+2236 -2205 -3116 0
+-863 -2055 -2086 0
+3284 3443 -2691 0
+-1865 1643 2539 0
+3067 2759 -1074 0
+-1112 1484 -328 0
+-3193 -3252 -227 0
+3418 -947 2549 0
+1671 3165 2711 0
+-1132 -2235 -1310 0
+-1505 3117 2238 0
+588 -1134 -177 0
+2178 -1369 -3455 0
+-3261 1331 1439 0
+-1629 2819 -2961 0
+170 -3049 -454 0
+-3230 215 -1382 0
+-2223 486 3183 0
+-509 -2065 2369 0
+-2381 2574 -860 0
+-2326 3000 816 0
+160 -995 1409 0
+-766 -2436 -222 0
+-1691 1562 -2570 0
+-260 -928 -3148 0
+-1368 2816 -348 0
+820 -678 882 0
+692 2217 -2898 0
+-1744 -3168 1345 0
+236 187 938 0
+2950 1808 3172 0
+2397 2663 -2306 0
+-1660 1691 -2623 0
+2814 -2178 -672 0
+-1218 1626 -2071 0
+-1238 1369 -285 0
+1702 1531 2256 0
+-908 -3334 -791 0
+187 3323 -2586 0
+2386 -1403 1707 0
+3075 -1492 2491 0
+-1983 -959 -1556 0
+350 129 -1562 0
+2639 -1024 612 0
+2956 412 8 0
+830 1563 -526 0
+599 -1246 -2521 0
+1271 1765 3053 0
+-2319 1575 -1153 0
+3451 1683 -1466 0
+2480 1273 1117 0
+-1097 -806 3273 0
+1643 -2696 2443 0
+-3234 940 -1104 0
+-3494 2700 -1416 0
+-3367 2960 939 0
+-2937 2292 -876 0
+68 -3107 -2426 0
+-1512 3311 -3468 0
+1044 1968 -1639 0
+907 279 -2644 0
+942 -3252 -2322 0
+1797 -3146 -1653 0
+-3452 731 -2116 0
+675 -660 3401 0
+-2526 303 -1174 0
+522 -1527 1849 0
+900 2737 1548 0
+2616 553 -1260 0
+545 -2327 1077 0
+3 3035 -2907 0
+-3252 2824 200 0
+1626 -1317 1644 0
+-1752 -862 605 0
+-1473 -556 2354 0
+2527 -1736 2661 0
+-2770 1069 -190 0
+-3265 -2368 2679 0
+445 1270 -3235 0
+-3428 -3024 -1508 0
+2117 732 2595 0
+-1493 -2304 458 0
+331 809 -1304 0
+-3210 918 3055 0
+2855 -1860 3466 0
+755 -401 -2434 0
+-1379 -1360 2989 0
+-2676 2040 2518 0
+3472 -1591 -3207 0
+-1541 -628 1439 0
+-3268 -2676 -180 0
+3163 -2037 1740 0
+-2840 1345 -900 0
+-1221 2590 -1759 0
+-457 1357 3200 0
+1678 -1489 3135 0
+2463 -3225 320 0
+2525 -2380 1038 0
+732 -649 -1570 0
+2118 2207 3111 0
+-2770 1373 2141 0
+2425 -304 -2103 0
+-114 282 1497 0
+2273 -77 -2049 0
+-1829 172 -640 0
+2442 -1070 667 0
+-1321 -813 -1741 0
+2247 -542 -848 0
+347 766 -2542 0
+-2069 3481 1406 0
+-2023 530 662 0
+-2801 786 -107 0
+3028 -880 1382 0
+2107 1348 -2152 0
+2187 -1259 -2960 0
+2788 -3011 -1074 0
+1012 2155 -487 0
+-823 1114 83 0
+-3431 -724 1561 0
+1667 -95 -2415 0
+-2089 1037 1518 0
+1771 2484 826 0
+-2686 2984 3351 0
+-2795 1755 1059 0
+-2893 -63 -2150 0
+2541 -679 -2337 0
+-2187 1225 1033 0
+640 198 -517 0
+3189 -3331 -3330 0
+1259 -115 -2209 0
+-299 -3002 -1327 0
+-3173 2446 -1184 0
+2947 -196 -1946 0
+-3194 -524 -3079 0
+413 -3074 -2159 0
+-2791 3032 -3435 0
+-630 871 504 0
+-3053 378 -3094 0
+-461 458 2311 0
+-1337 -873 3249 0
+-2692 1990 1331 0
+3081 1531 1536 0
+2506 -1985 -837 0
+1706 -866 2281 0
+2200 2398 1027 0
+-2605 1186 2442 0
+3018 -977 -2474 0
+-3083 100 -863 0
+3146 2233 1232 0
+-187 1130 3004 0
+1232 -2375 3201 0
+1434 -3339 267 0
+1422 -292 -1417 0
+-2458 -222 1574 0
+2204 -1385 -845 0
+1990 -2996 -994 0
+2181 -1915 1337 0
+-831 -2031 780 0
+2276 -1011 -926 0
+-452 845 2963 0
+2724 266 2317 0
+-1416 185 -3016 0
+2012 779 1469 0
+-491 1294 -2742 0
+-586 -1850 -1529 0
+-3119 -2764 -2973 0
+-1143 2578 719 0
+2848 -2440 -3274 0
+-1685 -654 1766 0
+1698 3089 281 0
+1359 -1871 -3284 0
+2202 2232 -2253 0
+3373 -2181 1726 0
+-2721 2219 2888 0
+3270 -2835 1133 0
+-475 -3015 -3113 0
+188 223 -3094 0
+-1869 -575 -1779 0
+-2505 2211 874 0
+1707 -2685 1 0
+-656 2808 2820 0
+-2968 -735 -1926 0
+2166 3294 845 0
+-1541 2571 -1071 0
+1851 587 318 0
+1351 1062 -1143 0
+3078 3389 301 0
+640 -2109 1706 0
+-2005 -2801 3499 0
+1020 -3149 -2883 0
+-2194 940 1392 0
+-136 -2693 1281 0
+-1838 1959 2353 0
+-3399 -3412 -1932 0
+-3071 1758 -1058 0
+2685 1874 3006 0
+-2207 -733 -3165 0
+-892 -433 1948 0
+3015 141 -1046 0
+-2836 1525 -3335 0
+2233 -2334 2643 0
+370 -1480 2749 0
+3115 -2647 -2991 0
+2831 2941 1932 0
+-1545 1102 2359 0
+2151 -3454 1697 0
+-2823 446 3168 0
+1946 3335 2830 0
+-2187 1830 -1632 0
+2113 -1527 -2745 0
+650 -1477 -2378 0
+3200 -1739 2502 0
+-3340 689 2040 0
+-2499 2179 2354 0
+-1089 3487 681 0
+-3001 -626 -1933 0
+-650 1203 1778 0
+294 -1153 -1291 0
+1001 -419 -1117 0
+3489 -239 1321 0
+-2706 2250 -1799 0
+-2834 -2315 1337 0
+742 -2210 2613 0
+1586 -290 -3292 0
+-1277 112 3256 0
+-2436 -2255 2293 0
+-1866 3002 2163 0
+1273 -2469 -1299 0
+3483 1695 1389 0
+1678 -1267 682 0
+-3223 -3484 -801 0
+-2530 403 -3347 0
+2870 -1970 -1100 0
+3420 2652 -1354 0
+3100 3206 -1321 0
+1888 3 -3019 0
+648 -3469 -580 0
+-115 -933 1788 0
+1852 3115 3322 0
+-1544 499 -286 0
+1635 2862 -545 0
+-2440 -929 2243 0
+-2223 1459 -942 0
+-1688 1454 -297 0
+2269 -696 3088 0
+-1087 -3155 2859 0
+2828 1393 -707 0
+1766 2492 -2585 0
+-2971 2726 -2074 0
+2199 -1361 -110 0
+-375 -2170 1644 0
+230 3328 1229 0
+1756 -3463 -2718 0
+679 -3319 -3112 0
+-2926 2736 1205 0
+1734 542 -1609 0
+-1933 3157 3459 0
+2293 -378 -2461 0
+-1303 1784 3044 0
+-3014 -3206 3255 0
+1595 2489 -1892 0
+821 -2435 2083 0
+-1335 2708 -2055 0
+-1013 1221 -318 0
+1628 -2464 -548 0
+1214 -1179 -1845 0
+2542 637 -1445 0
+-2717 1201 2397 0
+677 1323 -628 0
+-2872 52 -2690 0
+1968 -733 -129 0
+18 2923 -1033 0
+741 -565 -1988 0
+-3047 3138 1451 0
+2429 845 -2102 0
+2386 -402 882 0
+2893 1295 2362 0
+956 1060 2740 0
+-2761 2857 -2459 0
+-1409 2309 -3189 0
+2287 1480 1694 0
+3218 3262 -3402 0
+-3340 1726 -2377 0
+-447 -3250 536 0
+-611 97 -696 0
+330 -1860 -2171 0
+672 -1139 -2901 0
+-2556 1898 140 0
+1746 -2411 -390 0
+-204 1389 419 0
+-85 -1567 -2558 0
+-1996 2126 161 0
+675 768 3497 0
+-3346 1494 3237 0
+-1701 -2882 -240 0
+1674 548 -2267 0
+-3479 2834 397 0
+-131 -2211 -143 0
+1805 -449 2243 0
+-1681 -126 33 0
+861 -689 1448 0
+-1014 -217 -30 0
+-3341 1684 1058 0
+-758 -1814 -2661 0
+1393 1001 1902 0
+1883 2740 -671 0
+2026 2112 2031 0
+2856 2301 -422 0
+-2866 -2722 -2387 0
+-1737 2723 -1797 0
+-270 387 -2751 0
+196 2742 20 0
+949 3144 415 0
+-3108 1246 -960 0
+-711 411 -1933 0
+-1057 2388 -1711 0
+-2502 -2916 -713 0
+3016 2310 1411 0
+-2725 -2504 -3348 0
+602 2660 491 0
+-3220 -3294 2991 0
+247 -3410 -235 0
+-2596 -2283 -2410 0
+629 1212 2103 0
+3096 -1616 -216 0
+3347 -153 -2043 0
+1144 -1635 -1951 0
+-1675 -1620 2451 0
+651 2163 -2711 0
+-2921 -3469 1061 0
+-3143 -119 -548 0
+2938 951 -2744 0
+-2943 447 1377 0
+1592 2476 -389 0
+-1018 -492 845 0
+-1170 -2460 -282 0
+3450 -1198 -793 0
+-302 -1360 -1297 0
+146 1263 3142 0
+807 1461 1645 0
+-2851 2792 -603 0
+1317 -2794 -1453 0
+-2955 321 -2503 0
+50 -1006 1769 0
+2964 -1306 374 0
+3229 -2265 -1535 0
+2094 -3419 1865 0
+-1474 3126 2133 0
+-3412 -1276 -3494 0
+1563 -2119 -381 0
+-2318 2218 -2629 0
+449 3104 -2611 0
+-1739 -2787 2379 0
+3493 -101 3207 0
+812 3052 638 0
+1923 -40 538 0
+-892 392 -1354 0
+-1963 -86 -958 0
+2667 1253 -2218 0
+2862 -2229 2459 0
+-2344 2322 1521 0
+-1553 -345 2907 0
+1445 -1292 -2618 0
+493 -3199 -1052 0
+2705 1444 -2826 0
+799 1283 553 0
+2479 -1715 -549 0
+1023 2491 -23 0
+-1062 3392 -2262 0
+2676 -1357 -2899 0
+-1021 -2351 -3318 0
+1606 -1509 1620 0
+-942 -551 -1455 0
+1540 1090 3277 0
+-2375 1316 -3071 0
+-913 -912 -2895 0
+2668 -3026 -821 0
+-2734 -287 -1693 0
+-358 758 -1163 0
+1298 2986 -269 0
+-3328 -3147 945 0
+-1469 -41 -788 0
+-2140 2622 -3305 0
+667 547 1610 0
+1959 -1748 2020 0
+500 3197 -2587 0
+-2686 -752 -1551 0
+86 -1560 2615 0
+-23 -1527 1207 0
+2279 2543 -1109 0
+2542 2910 -1754 0
+-2878 2553 -166 0
+1668 793 -2959 0
+1091 -3189 -51 0
+2253 560 -2855 0
+-2358 3277 -634 0
+-264 2471 141 0
+3419 -2887 -1535 0
+-618 -1827 1743 0
+-1201 706 -1791 0
+3430 1956 2415 0
+1237 2601 1994 0
+2843 1049 -2623 0
+-1076 -1709 46 0
+-1279 -446 -3008 0
+2045 -2884 2643 0
+-3090 975 -587 0
+1431 1380 2159 0
+-1562 -242 2636 0
+3221 -1534 2400 0
+2403 -478 1445 0
+83 -3499 3225 0
+526 515 -134 0
+2408 2407 -1464 0
+-2936 1957 -1351 0
+2011 -1800 2038 0
+-2107 780 3179 0
+-2691 1660 2110 0
+-2378 3487 166 0
+-2826 -2635 -571 0
+2138 -738 1568 0
+183 -1396 2281 0
+1467 -1279 1176 0
+1418 906 1337 0
+2855 -673 1944 0
+-2475 -324 -1019 0
+-2488 -2066 -2163 0
+-1458 -2317 -3255 0
+2625 46 -2576 0
+1101 -2044 -419 0
+-3016 1068 -2605 0
+-1730 3288 -1975 0
+-1141 2079 -2668 0
+3449 3005 -1822 0
+1376 510 1196 0
+-406 321 -550 0
+-60 -1016 -2574 0
+-1796 -2922 -170 0
+-2208 -382 112 0
+292 -1627 1406 0
+1728 33 3285 0
+-1473 -2862 -3190 0
+-1978 -2148 -1861 0
+3489 2436 2280 0
+-2574 536 3371 0
+-22 -252 -146 0
+637 -3380 -606 0
+-1932 1055 -483 0
+-2898 -3482 -842 0
+-881 1332 -615 0
+3357 -2800 690 0
+-144 1063 -1323 0
+-3092 -752 334 0
+61 1706 1564 0
+2304 -2462 -361 0
+-1337 -211 325 0
+81 -2226 -492 0
+-2812 3303 730 0
+1297 3368 -833 0
+-2050 376 -3272 0
+587 953 -1744 0
+1698 1747 2968 0
+-471 2323 -2342 0
+-410 -343 -3141 0
+1708 812 2702 0
+-2819 1690 586 0
+-1550 1757 -2707 0
+-2034 3 -3450 0
+408 2482 636 0
+-1925 -313 926 0
+-3318 -2802 517 0
+1441 2171 1861 0
+922 1055 -1251 0
+3268 -1363 2408 0
+-873 841 -68 0
+-699 2011 1394 0
+-3387 1092 2532 0
+-3435 3347 878 0
+1993 2756 -2896 0
+1854 -2495 -1452 0
+-961 2448 2150 0
+-1998 -3176 594 0
+2542 -2162 1518 0
+-3486 -185 -3367 0
+-904 -3348 915 0
+2462 3450 1346 0
+1751 -636 -2932 0
+-134 -1759 862 0
+-1834 -3286 -89 0
+1599 1372 892 0
+-2746 -661 1263 0
+-1294 1850 939 0
+-3159 3255 -3366 0
+1193 1465 218 0
+630 -2547 3262 0
+788 -3291 1703 0
+3456 -566 -1426 0
+-3087 2576 2502 0
+-3458 -641 1172 0
+2976 -2674 -303 0
+1960 -1443 -2540 0
+2803 -2641 -800 0
+-1373 1651 -3227 0
+2890 846 1107 0
+889 318 -2604 0
+2498 -1712 2814 0
+-85 -3246 1986 0
+3292 930 -306 0
+2094 -341 -3227 0
+-1456 2030 -677 0
+-2394 -2197 -114 0
+-1356 127 -2923 0
+1646 1970 -656 0
+-3232 1971 2189 0
+-1519 -2312 -1917 0
+-1182 2662 1415 0
+-1388 -2974 371 0
+127 1611 -1091 0
+-871 -1516 893 0
+-1039 -348 2460 0
+2838 3074 -19 0
+-1276 258 -2921 0
+3146 2643 -1643 0
+23 1055 1855 0
+-1743 -859 -2743 0
+854 3459 580 0
+-1414 -1384 2604 0
+2298 352 -4 0
+1674 1008 -1565 0
+-1175 -2255 -1897 0
+1851 -78 3176 0
+-1786 -2511 -2759 0
+-473 363 2997 0
+2819 393 398 0
+3188 -1764 105 0
+-3440 2909 -264 0
+674 173 -1719 0
+-1299 -988 -3016 0
+2028 -1655 2660 0
+877 -123 790 0
+2799 -2182 747 0
+-1291 -995 1105 0
+-894 1406 564 0
+-2366 3256 -1511 0
+2572 -1263 -1526 0
+2922 2782 -3032 0
+549 1449 -2286 0
+-757 1455 -1561 0
+3083 -1109 -947 0
+-1753 -1505 2713 0
+-1567 -356 -237 0
+877 710 2328 0
+-1378 -2674 1746 0
+-1351 -1160 -667 0
+1578 -2124 1934 0
+2614 -3470 849 0
+-2856 991 -551 0
+3060 2902 -1262 0
+2967 -2477 -1572 0
+-2732 2062 2733 0
+-2692 -496 1315 0
+2868 3070 737 0
+-176 2050 2529 0
+-726 -2423 -2622 0
+2845 144 3210 0
+1902 -1222 -1562 0
+-241 -3207 1287 0
+-3432 739 1040 0
+1792 1763 1467 0
+-1208 -2739 -2217 0
+727 1349 -3014 0
+-984 340 -3065 0
+-1133 -3088 -1477 0
+-1638 -2392 483 0
+786 -1169 -3041 0
+2472 502 -2215 0
+-3232 -3270 388 0
+1697 -2331 -3391 0
+-1912 -77 1430 0
+-1162 -2248 2239 0
+-2215 2056 -1532 0
+2731 468 -1333 0
+1835 -2375 -813 0
+974 -293 -27 0
+-1608 -437 18 0
+2145 386 -1448 0
+-1470 -3180 2793 0
+-541 2180 432 0
+577 703 -2446 0
+1792 -2667 2057 0
+542 2011 860 0
+2668 -1918 -1551 0
+361 -2877 3444 0
+-2195 532 -1125 0
+1708 2359 1226 0
+-2185 -3358 -256 0
+-676 -1256 -1770 0
+-303 -1397 -1172 0
+-2987 -1862 2763 0
+2994 -2402 1844 0
+-2768 1893 1223 0
+-3343 -1572 -991 0
+-404 -1972 -973 0
+3141 3008 -477 0
+987 -3241 -1823 0
+-15 2113 216 0
+556 1733 1157 0
+-1968 518 3361 0
+82 -1949 -1003 0
+-1860 -2395 -1878 0
+-3185 -1808 -300 0
+-1632 -2081 2983 0
+-2589 -1298 -1889 0
+-1096 -660 -1560 0
+1969 -152 1520 0
+1580 -422 3001 0
+1910 1577 -997 0
+228 -2509 3190 0
+-2683 -2868 329 0
+-1504 -847 3160 0
+-184 -70 -1125 0
+1327 702 -24 0
+-463 1783 -1777 0
+-368 -2257 802 0
+662 1382 460 0
+-374 2280 -1250 0
+-13 2939 -1980 0
+2413 -3214 -1912 0
+2166 2449 2014 0
+-8 -2055 -683 0
+-2431 -3158 1499 0
+1114 3483 2226 0
+-14 903 -1832 0
+-1218 1594 -1421 0
+3417 2782 2818 0
+-985 -1020 -2959 0
+1550 528 -1125 0
+3494 391 866 0
+211 -2720 -2249 0
+-1911 -2068 -636 0
+-1156 3134 2264 0
+-1192 -3165 -1845 0
+-973 1927 2735 0
+-86 1375 -1249 0
+-3445 -2288 -850 0
+3398 1043 -680 0
+2123 119 91 0
+2576 302 2426 0
+-294 -2481 1816 0
+-1791 3388 -272 0
+1 2743 3200 0
+849 -1793 110 0
+-2931 -2946 187 0
+-2769 -883 2148 0
+1979 958 1016 0
+2604 -1398 -2059 0
+1768 2919 376 0
+-1944 2212 3038 0
+3261 -2878 556 0
+3342 1963 -900 0
+-2029 -494 1849 0
+-1023 -1960 176 0
+3468 -2141 -9 0
+-1078 484 413 0
+-1980 -73 1055 0
+3420 975 -3009 0
+-2965 -2938 -972 0
+-259 1733 3120 0
+577 -1511 1153 0
+-2099 2179 -75 0
+-3143 2817 -407 0
+3439 -2856 1294 0
+2491 1267 -451 0
+2465 1584 2087 0
+2399 -2368 2857 0
+-810 -2436 -3116 0
+-2452 -2712 -2432 0
+-2135 2059 2145 0
+788 35 -1585 0
+1607 2807 1560 0
+-2917 -1162 -2496 0
+1195 -333 3255 0
+-913 686 1791 0
+1979 -440 -1449 0
+635 -2507 -31 0
+2104 -2936 1300 0
+-543 3379 -2901 0
+139 1522 3283 0
+154 -2389 276 0
+2617 -3393 -851 0
+-2189 -2871 2720 0
+56 -3165 -638 0
+3067 2877 1600 0
+-899 -922 2347 0
+125 -2106 3085 0
+-3441 2411 -3397 0
+3482 -1393 -3386 0
+-2210 2806 540 0
+-746 -2658 1225 0
+2864 -2967 -1367 0
+926 825 619 0
+-1467 674 245 0
+-1388 -12 541 0
+-1598 -1989 -2953 0
+-2260 -1063 -285 0
+777 238 1047 0
+2322 -1456 -1872 0
+55 655 -453 0
+-616 -2481 -2806 0
+2318 750 3291 0
+-2310 -2245 -2169 0
+3403 2304 -486 0
+-3059 434 -605 0
+-1408 -2937 325 0
+-2322 -307 2522 0
+-606 665 -378 0
+2641 -324 -1639 0
+-2119 1349 1411 0
+-3439 -3174 3207 0
+-1616 2641 1600 0
+2019 -2993 -1555 0
+-2016 150 2139 0
+-3148 -2986 -3309 0
+2950 -214 -2622 0
+-2622 1949 2660 0
+3424 2254 362 0
+2786 -1004 -1217 0
+-1224 -399 1861 0
+1604 3455 434 0
+1738 -3314 1317 0
+235 152 656 0
+2798 -2890 2876 0
+-3444 1471 1308 0
+550 -1141 -1228 0
+3080 1129 -3152 0
+-1867 -185 2375 0
+-2531 781 1974 0
+2527 755 -2259 0
+-328 1473 3312 0
+-3042 2166 -2285 0
+-3116 -1704 -2669 0
+-640 2251 120 0
+1577 2641 3143 0
+-894 -707 -1438 0
+-1567 -3409 -1650 0
+-2050 2843 1066 0
+833 -210 3125 0
+-308 -2975 33 0
+847 -2587 -3292 0
+-2070 -1505 -1592 0
+-670 -920 -395 0
+2024 190 -810 0
+2563 1016 -565 0
+-1154 -1974 2964 0
+766 3124 12 0
+1924 -1357 -694 0
+-1328 -2978 -1451 0
+1332 1405 -2550 0
+3395 3382 444 0
+-134 879 3478 0
+973 -1571 -1246 0
+581 1482 591 0
+347 3446 -769 0
+-221 -2698 -2532 0
+2948 850 -2424 0
+1216 2729 -2226 0
+1552 3048 2864 0
+-2466 2060 -1461 0
+-1406 -3492 1784 0
+244 -1689 1557 0
+1920 508 2059 0
+-1623 2039 3143 0
+-1308 -1112 1019 0
+-2695 755 3027 0
+-1709 -269 862 0
+510 1098 430 0
+-251 3266 -3223 0
+192 -1516 896 0
+376 -1458 2777 0
+-169 -753 -883 0
+-2263 -896 2410 0
+-3016 3379 -1450 0
+-2189 630 -2944 0
+2738 1616 950 0
+1678 1878 -1555 0
+545 653 177 0
+2767 2223 -2472 0
+2245 -1813 -1364 0
+901 1076 1295 0
+3409 -3143 -1902 0
+1045 1514 387 0
+-1260 1382 2297 0
+-154 -1513 416 0
+-3223 -3477 333 0
+-2824 -743 2026 0
+164 -1591 -1268 0
+-3367 -1629 2509 0
+1601 1467 1130 0
+2490 3199 -1651 0
+-237 271 -3441 0
+-124 -1867 -1782 0
+191 -2161 2896 0
+2244 -333 611 0
+-2094 -2314 -2067 0
+-1823 1439 -3283 0
+890 -1484 1621 0
+2391 -1413 130 0
+-2221 -1805 -2584 0
+514 -2015 2969 0
+3291 2885 -3385 0
+2609 -2575 30 0
+356 -2506 -3471 0
+2576 1508 -1244 0
+-3296 1769 1085 0
+2392 -2529 -2105 0
+-945 -3187 -1806 0
+-714 -2136 430 0
+2353 798 -386 0
+952 300 -1991 0
+458 2260 -2659 0
+1898 -2079 121 0
+1300 -2545 -553 0
+-2042 -2479 -3266 0
+-1382 -3045 3438 0
+3065 -2417 3381 0
+2690 1677 -3362 0
+-1651 -2631 1097 0
+-169 2588 2478 0
+2011 -3071 -2040 0
+-3089 -3404 3429 0
+80 -1562 -386 0
+53 -2586 2731 0
+-2367 3320 -2046 0
+-308 2656 -2111 0
+-2886 2799 205 0
+-2573 1845 2040 0
+2059 -766 -1276 0
+1326 2896 -1596 0
+3443 -1997 -1781 0
+-294 -2307 -456 0
+2320 2795 164 0
+2895 -3427 -3366 0
+-157 -1345 -2337 0
+-993 -1344 1378 0
+-97 792 1264 0
+-1415 776 -748 0
+2044 -3161 302 0
+-3173 718 -11 0
+-459 1834 -493 0
+1427 1383 2993 0
+-3465 -2730 -1616 0
+1679 119 2129 0
+-866 880 -2820 0
+-1137 1893 -1581 0
+2681 2974 1725 0
+-3210 -3373 -2430 0
+2417 1647 -1947 0
+-2956 2077 895 0
+-1225 1175 -1501 0
+-2002 2262 -1245 0
+-442 2176 3394 0
+1802 -1713 1346 0
+-224 -2972 -1137 0
+-197 2397 -1978 0
+625 1078 -1956 0
+-3373 3278 2711 0
+-3154 1981 -961 0
+-1526 -627 -3484 0
+-1363 624 -1550 0
+-656 -3082 1561 0
+-556 434 -3482 0
+-4 656 -1001 0
+-1810 -2799 23 0
+-700 -2962 -1643 0
+-426 3186 -531 0
+1544 2680 -1420 0
+1621 2295 -3407 0
+392 2321 654 0
+-2473 227 -2677 0
+-2945 -668 -3110 0
+377 2285 3130 0
+2216 -1626 -26 0
+805 3250 109 0
+1968 1756 -1016 0
+565 -535 -3091 0
+2430 1297 3023 0
+-1418 2177 2748 0
+1076 2620 3178 0
+-1228 -1810 340 0
+415 -3285 2136 0
+1094 2843 -2279 0
+3317 603 -3239 0
+695 -3403 1639 0
+2543 -1226 2349 0
+177 2470 -213 0
+2837 -2171 -196 0
+1044 1146 2005 0
+1496 -1699 -2514 0
+-978 2703 -2408 0
+-268 815 2545 0
+342 -2333 561 0
+-3461 2540 3250 0
+-1990 244 -2643 0
+-25 -814 -2322 0
+-780 -2304 1826 0
+2621 3230 -1179 0
+481 -1894 -2246 0
+566 2888 923 0
+67 2149 176 0
+-601 60 2549 0
+-753 552 3122 0
+773 -2870 3123 0
+809 -2350 -998 0
+2225 -720 1944 0
+1844 -1849 -1948 0
+288 2566 3183 0
+-2569 -2290 -3120 0
+52 2101 624 0
+-2173 662 -223 0
+-287 -1648 -469 0
+3032 -2796 -1595 0
+-785 -2932 2601 0
+-1486 -2980 1554 0
+-3184 -2952 -3118 0
+2949 1740 -2039 0
+1192 -2964 168 0
+2965 -1721 527 0
+-1448 3474 -2098 0
+1030 1753 -2125 0
+155 -1274 -2670 0
+-602 1383 850 0
+-1123 -2503 -2711 0
+-165 -1540 1585 0
+-1665 1919 3095 0
+-1288 -2117 1643 0
+-2373 -1648 2309 0
+-1805 -2811 -2775 0
+335 2679 -3077 0
+2012 3377 -1159 0
+-973 -2720 -1507 0
+-876 -3106 -634 0
+1520 -1845 -3245 0
+2852 558 -1954 0
+-2793 -1376 -896 0
+2140 -1480 1458 0
+2221 -3366 1356 0
+239 -2938 -206 0
+3202 2762 1587 0
+-394 -1682 -48 0
+-804 947 45 0
+-1770 1237 591 0
+2135 1968 2912 0
+754 -1731 -2874 0
+-1231 -696 -1537 0
+-1989 -2930 1125 0
+-1839 -1740 -1030 0
+2169 3159 1236 0
+2810 -1685 2005 0
+-858 825 -2647 0
+2296 -1203 570 0
+1200 1721 -1984 0
+1769 2415 -1288 0
+-498 -2141 1638 0
+3240 -380 548 0
+2926 -661 1069 0
+-2955 -138 1708 0
+427 -2773 -1404 0
+-2992 1158 583 0
+-2276 1789 887 0
+-2181 1679 941 0
+571 -1516 -1571 0
+-2829 3199 1339 0
+2661 -3004 -2461 0
+-3113 -408 -392 0
+-238 1606 -1914 0
+1164 -2941 3192 0
+-2401 3009 -1121 0
+3202 -1677 -599 0
+2791 1874 1613 0
+993 -1339 -266 0
+1644 2236 -607 0
+2097 946 -1607 0
+2453 -2347 513 0
+-1266 -3156 -3002 0
+1906 3118 3092 0
+-2996 1312 -2320 0
+157 1426 2522 0
+-3168 -841 2102 0
+-1459 1157 -3007 0
+-2383 -1152 1155 0
+1882 -1978 -2380 0
+-1611 -1714 -139 0
+-2569 2208 1821 0
+-1264 -676 894 0
+-3079 1593 -1776 0
+1474 -3397 -3351 0
+-749 1314 998 0
+3196 1258 -3477 0
+2713 2857 161 0
+-70 -27 469 0
+910 1960 1893 0
+3084 -3272 1603 0
+-2349 -837 -3202 0
+3184 -2054 2302 0
+2792 -1953 533 0
+-1120 863 2248 0
+-1390 -1897 2727 0
+1931 -1297 1681 0
+-81 3412 -405 0
+-847 -1083 -2514 0
+1720 -3057 3213 0
+1838 134 2264 0
+-233 936 -3462 0
+-2528 -481 -2175 0
+1152 -581 -2320 0
+-350 -3228 -3121 0
+1710 -543 1692 0
+1205 -3500 3453 0
+-1256 2 -1420 0
+2621 1697 1306 0
+-2796 1055 1562 0
+1964 2133 1616 0
+1811 -2248 1459 0
+-1772 -1181 951 0
+-449 -1671 3273 0
+-2662 -1133 1593 0
+-891 2467 -2562 0
+-3347 3401 2683 0
+-795 -575 2727 0
+1075 1596 1821 0
+-2223 438 -1198 0
+2550 2086 -1611 0
+2098 2018 52 0
+3359 -2154 2821 0
+-1957 -1055 3141 0
+-1421 -358 -1718 0
+-388 -144 -2284 0
+119 3212 -2881 0
+3337 609 3171 0
+-3370 324 1680 0
+300 -1828 -1459 0
+-2213 -813 819 0
+-610 -478 -3074 0
+84 -2597 -1401 0
+621 -395 -2195 0
+-909 -1675 3152 0
+2781 1479 719 0
+-3190 -3235 1650 0
+26 -2218 -2426 0
+1389 -1388 491 0
+-357 -2576 -636 0
+-1665 591 10 0
+1941 -2638 -3368 0
+982 -2521 2514 0
+3317 993 2185 0
+-1286 2884 -1073 0
+-2589 3436 2380 0
+988 -3145 2495 0
+913 -2905 3176 0
+1380 2321 -697 0
+-356 -47 2345 0
+-3258 -356 1112 0
+3138 55 2224 0
+2295 -2526 -3071 0
+-117 -1694 3323 0
+-3442 874 3417 0
+1107 -1151 -2867 0
+697 861 1787 0
+-3300 2721 2280 0
+-1027 3241 1333 0
+1611 -3241 -1263 0
+2201 -2831 -331 0
+2113 -1203 1779 0
+2557 71 -404 0
+-569 -1245 650 0
+3371 352 1243 0
+-2768 -483 -3295 0
+-797 1841 1380 0
+-1488 -1699 2215 0
+408 32 -3091 0
+-730 2942 2573 0
+-2694 628 -440 0
+489 2330 -3234 0
+2449 -647 2780 0
+-2749 -2143 -1339 0
+-3463 -1195 3148 0
+-88 2108 -2017 0
+1137 -283 1335 0
+176 -1238 931 0
+-182 -204 -2961 0
+-557 -110 2327 0
+-2019 2099 -3128 0
+3174 -3121 731 0
+3473 -1240 1729 0
+-1728 -2351 734 0
+3474 1235 -3043 0
+-3341 2474 -2188 0
+-2556 2866 1817 0
+-3133 -1004 -2999 0
+3043 -1142 -3157 0
+-205 -3167 -3213 0
+1499 770 -1494 0
+-2573 1318 2726 0
+2036 1423 3230 0
+-2270 -2147 -1165 0
+1787 1433 -2808 0
+662 -700 -1279 0
+888 -2743 2290 0
+-1838 -825 364 0
+681 -3326 2545 0
+-1130 2359 2284 0
+-208 -2473 876 0
+-3100 -602 -467 0
+-809 217 2064 0
+2187 3213 2071 0
+3002 -3089 -2262 0
+27 -1317 3376 0
+-2751 454 -1817 0
+2744 3225 760 0
+40 1033 1458 0
+2011 2803 2820 0
+-3471 -534 -1847 0
+3479 3384 949 0
+1352 -827 3153 0
+2865 1032 2946 0
+3500 3449 -3054 0
+868 -2116 -811 0
+-1810 1559 1221 0
+3394 -2700 -149 0
+-2306 -2045 -3410 0
+-2327 -2946 -2712 0
+-1545 -2023 -1480 0
+-622 -121 1482 0
+-1187 -413 2096 0
+2738 74 738 0
+2773 3392 1840 0
+1217 -2683 44 0
+-2572 -451 2845 0
+534 -3308 -916 0
+1508 2804 -1437 0
+1564 -3106 -2927 0
+560 -1330 382 0
+404 -2039 2146 0
+2788 1913 126 0
+-998 2982 3214 0
+343 -1627 -2734 0
+-1395 1697 -3034 0
+598 1532 -792 0
+-519 -2857 2674 0
+-1760 -1116 -474 0
+-2159 2107 765 0
+-1339 1132 1383 0
+-1613 603 -1117 0
+3322 -1474 566 0
+2161 -820 -66 0
+605 2109 2510 0
+-551 1532 3383 0
+2347 1395 1140 0
+-844 645 -140 0
+2964 -34 2075 0
+1576 2323 -1890 0
+-3056 -1681 -622 0
+-501 3059 -2418 0
+906 -1660 -2078 0
+2760 598 -1825 0
+2893 -1852 83 0
+3048 2681 726 0
+2792 2771 3122 0
+3049 -1449 -2078 0
+3006 -1568 -631 0
+2776 3292 -1740 0
+-1368 -3013 2516 0
+351 1465 658 0
+-1309 1614 1414 0
+-2784 -1528 1023 0
+-744 2183 1424 0
+-410 1709 3339 0
+-161 2531 3310 0
+-2713 -3394 376 0
+-1017 -2227 510 0
+1204 -47 1788 0
+308 -762 -2120 0
+-2740 790 -407 0
+1459 1717 -444 0
+2660 1750 505 0
+1135 -13 1594 0
+2652 499 -417 0
+-514 -1399 -1427 0
+-1902 1423 -737 0
+2209 3327 -1282 0
+2719 -2040 -98 0
+1032 2035 -2664 0
+-648 2107 980 0
+351 -2917 -2998 0
+-140 -49 -2165 0
+298 246 615 0
+-2471 -3093 3176 0
+3456 1933 -2369 0
+2096 2293 -992 0
+-1665 3497 1097 0
+-3043 45 -233 0
+-132 2306 -209 0
+1981 -2304 -2227 0
+-3326 -392 -2334 0
+-409 -2514 -2212 0
+-2568 -1506 1543 0
+3272 -942 -1399 0
+-557 1314 293 0
+-534 -863 -2237 0
+-2308 195 -3051 0
+-1432 -661 1230 0
+-1175 -377 3078 0
+3266 1655 2995 0
+1121 -2066 -952 0
+-1679 3447 -1080 0
+780 -1615 -1949 0
+142 -345 1739 0
+2294 56 -2585 0
+2395 -3078 -2188 0
+1762 289 -2240 0
+-1205 381 958 0
+-2163 -1952 1618 0
+-2430 -1695 859 0
+2036 -985 -713 0
+-2143 -38 681 0
+-301 -1796 -1205 0
+3009 353 2375 0
+1651 2381 289 0
+-625 2991 438 0
+1280 -2676 1512 0
+95 1743 -2494 0
+-1143 -2814 -3463 0
+-3464 2993 -1458 0
+-2083 -2106 190 0
+-1776 1623 -2788 0
+809 -1448 -1271 0
+-1997 2443 408 0
+-2999 517 -2716 0
+2272 556 2871 0
+-3420 2215 2098 0
+-1177 884 -1956 0
+-3065 -1067 -1763 0
+911 -1846 252 0
+-3402 2359 -3401 0
+1203 2875 1363 0
+-1419 877 -1663 0
+956 3285 3234 0
+3497 -2809 -2072 0
+-2903 -2084 2431 0
+-3490 1805 -51 0
+-835 2206 271 0
+-1043 1596 -3249 0
+2375 1973 1588 0
+-1243 2519 2751 0
+1810 -1583 -2103 0
+3280 3102 1148 0
+2354 -1099 -3018 0
+1777 -593 75 0
+-794 3170 1142 0
+1261 -1660 3066 0
+-976 -3199 1331 0
+450 -3037 -633 0
+-2396 -946 2660 0
+-1669 2337 -3265 0
+-258 -2930 370 0
+-2179 -1840 1923 0
+-2723 -3355 -421 0
+1314 2897 2305 0
+3280 2009 1811 0
+-2094 2800 -484 0
+-518 -1014 1039 0
+-2029 1808 -2520 0
+-2370 -1544 2593 0
+-322 821 988 0
+604 -1199 -1104 0
+3072 -844 480 0
+-21 2143 -890 0
+-556 1496 -1525 0
+2448 2960 676 0
+-2400 27 -1182 0
+-1780 -2752 -1338 0
+-1005 2239 3186 0
+809 2888 -2341 0
+2892 -2758 1058 0
+2797 1213 -55 0
+454 3148 957 0
+-2937 2343 1608 0
+1303 -2270 1221 0
+1603 2399 2962 0
+-794 -3413 -1582 0
+-901 -1801 1741 0
+-1533 1218 -2852 0
+-2404 1742 1345 0
+2283 73 307 0
+1137 -1794 3108 0
+1017 1911 -1056 0
+-2074 1329 -2964 0
+2616 -1336 3039 0
+-318 -2127 -3003 0
+3425 35 -1689 0
+-1594 -150 -2022 0
+156 -294 -386 0
+2165 -1625 358 0
+2679 2985 1066 0
+-240 3127 -2709 0
+3416 -520 -806 0
+1271 3136 2445 0
+-1323 -3022 -1108 0
+610 555 1592 0
+2581 -2610 -2106 0
+22 -2620 -2087 0
+-3083 885 1422 0
+2741 937 2190 0
+2142 2330 2894 0
+-816 2254 -681 0
+1744 2881 1245 0
+788 1324 47 0
+1501 1989 1549 0
+-981 3478 -2886 0
+233 -1346 128 0
+-3346 2729 -2734 0
+-692 1301 1693 0
+1261 633 -2131 0
+428 -2371 2923 0
+3277 -1958 2142 0
+-3148 -456 1212 0
+2850 -3211 -419 0
+1996 1097 -1427 0
+1309 -2839 -2260 0
+-1935 -1916 -3158 0
+2477 2543 1682 0
+-2622 2157 -1680 0
+236 754 -2804 0
+-1059 534 791 0
+2658 -1329 -3118 0
+-1629 -291 -1527 0
+-925 -3003 2980 0
+-2156 1358 -1048 0
+-1590 1273 -2504 0
+-1417 -1289 2733 0
+231 3000 -1532 0
+2494 -1674 2038 0
+-3179 -869 103 0
+-1698 -523 -315 0
+-1534 1186 976 0
+-228 1281 1728 0
+-754 1769 2718 0
+-81 -999 -3434 0
+-2865 -2793 1103 0
+-2912 1337 1959 0
+1017 19 1914 0
+-1609 -2468 1594 0
+-183 -583 -2623 0
+2282 2148 -1874 0
+-1181 2387 -1883 0
+-1329 -3031 -1696 0
+3093 -612 3181 0
+246 379 1045 0
+-1344 -1488 -1401 0
+3242 1147 -1598 0
+2973 -2428 774 0
+-448 428 -2427 0
+3265 3472 -1 0
+-3145 -843 1336 0
+-994 -1323 -3205 0
+1669 -2347 -1680 0
+1219 -3486 -3188 0
+-1755 1584 3095 0
+2742 -2928 371 0
+-2327 -1841 4 0
+-3069 722 -2268 0
+1535 1030 1633 0
+431 -168 -1613 0
+-98 2501 -938 0
+-289 -736 -3413 0
+174 -2411 -1397 0
+-3297 1164 950 0
+-1542 2682 -3395 0
+-1472 -1648 -3019 0
+3344 -2349 1936 0
+1319 1744 3005 0
+1406 2571 127 0
+-1865 1401 -3379 0
+-1841 1288 1822 0
+-2573 613 2246 0
+184 -1159 293 0
+1567 3465 768 0
+657 1760 178 0
+3353 2988 2006 0
+1947 -2975 -2501 0
+1608 -1784 -1110 0
+-3429 -274 3313 0
+-3484 173 2527 0
+-3382 -2369 -19 0
+679 1953 -1024 0
+1874 136 -1898 0
+-2234 421 -1719 0
+-48 -702 -3447 0
+-571 2106 -2698 0
+313 590 -29 0
+3217 745 -2060 0
+1097 -968 3300 0
+-1751 889 68 0
+2180 663 -77 0
+-2910 -3236 2654 0
+1613 -1667 2223 0
+1498 1019 -1337 0
+-1652 -666 -2039 0
+-3375 1372 -1503 0
+-398 -1838 -912 0
+3398 -3362 -1381 0
+1790 1904 -1844 0
+127 2827 2535 0
+1526 2084 -2947 0
+846 -1000 3478 0
+175 -935 -1439 0
+2120 -1694 2537 0
+-263 -32 3457 0
+-956 -1476 -880 0
+-3126 767 909 0
+-2536 619 -1119 0
+-2286 1785 -261 0
+-516 -3485 -114 0
+3115 -1424 608 0
+2014 529 -857 0
+-25 -2520 -3363 0
+2700 3377 -2627 0
+1805 -661 191 0
+1731 -1842 -895 0
+-1957 2682 2188 0
+423 3431 2855 0
+-3081 1940 3038 0
+-3095 -709 3133 0
+1029 703 -1018 0
+-1820 -1006 1960 0
+-1039 -1906 -1824 0
+-761 -3315 -862 0
+267 695 -711 0
+-1873 -1690 -1109 0
+-673 -2182 -429 0
+-1372 3023 -2435 0
+1038 -2752 2396 0
+-204 569 136 0
+1225 -3018 1083 0
+-2123 55 -3434 0
+-1445 -1950 1082 0
+-2314 580 2972 0
+1679 -2137 -573 0
+-26 780 1213 0
+-171 118 -638 0
+-709 1356 -3050 0
+43 -1058 -3429 0
+-97 -203 -354 0
+-1005 2573 3423 0
+147 -120 -318 0
+-316 2840 -184 0
+610 752 848 0
+-2195 2287 3177 0
+-3174 -3019 -2466 0
+-2532 -3034 -2878 0
+3408 878 -1365 0
+-1636 -1287 -141 0
+3068 -3078 1234 0
+-995 3436 3153 0
+-3455 -1514 -1334 0
+2841 -584 -489 0
+1280 423 1011 0
+-1201 -2900 2433 0
+33 -1539 -441 0
+2370 3375 -3383 0
+-1274 2450 -2941 0
+-305 1562 -3287 0
+1291 -3152 1765 0
+-1322 -2011 -1766 0
+552 -2846 1018 0
+1635 -1952 -648 0
+23 -2113 1680 0
+657 2886 159 0
+-2392 2948 -842 0
+3354 -1848 1820 0
+-1927 -1657 539 0
+1771 -3257 2146 0
+2281 -905 3110 0
+-2816 2545 -2904 0
+-3476 -1280 1956 0
+-1190 -3054 -761 0
+-1650 653 2914 0
+-2842 2101 -3360 0
+1311 212 1439 0
+-241 -2373 -3239 0
+1119 1211 -274 0
+-764 1002 -3330 0
+-715 -2110 2918 0
+-1025 -1145 -1083 0
+-852 498 -2843 0
+552 -1164 1132 0
+233 3361 3311 0
+-1650 2362 3340 0
+-2228 -2507 -2101 0
+-2456 -1412 2676 0
+3189 -1214 -1489 0
+-2290 -740 -2955 0
+1841 1076 1363 0
+-2481 1780 3463 0
+-1576 -3333 -1871 0
+240 2235 -2412 0
+299 1944 -3353 0
+-1589 2504 -2395 0
+79 457 -2863 0
+-2239 -2837 424 0
+1079 2766 -2116 0
+-37 2880 -3452 0
+3379 -925 -704 0
+-2748 -1195 2642 0
+-124 1495 3451 0
+-667 2581 843 0
+-1611 110 2860 0
+221 -1602 -1621 0
+965 -3088 573 0
+-2716 -109 -156 0
+-2628 -1089 756 0
+2904 2810 3356 0
+-3075 1408 1222 0
+3481 -396 845 0
+-1797 -1665 -771 0
+-1964 -2644 1606 0
+-1483 2265 523 0
+-2962 2196 -1272 0
+-397 2104 820 0
+1761 3009 -1022 0
+1746 -177 2537 0
+788 2792 1312 0
+1671 -3410 -1643 0
+-284 -2434 -2832 0
+1836 -2370 1018 0
+1623 -2876 -152 0
+-82 -2432 -491 0
+2687 -1017 2528 0
+278 -1198 -1699 0
+-2465 -1621 -1378 0
+1225 1901 -1301 0
+-2514 -2992 756 0
+-1688 2143 -2539 0
+-1862 -482 -2027 0
+88 -2215 -2325 0
+846 -3093 -651 0
+1299 -2276 -1109 0
+-772 -2973 -2000 0
+-584 1327 3421 0
+-3245 -845 -1715 0
+2051 3220 1808 0
+-2536 33 -396 0
+-842 437 581 0
+-2326 -2798 2229 0
+6 -2725 -433 0
+520 -3500 626 0
+609 -1413 973 0
+1783 -2977 2130 0
+-1156 1221 1107 0
+-3170 -1923 -1963 0
+3334 -1338 -2722 0
+-1641 1625 473 0
+-1363 913 975 0
+-896 -497 -2583 0
+2065 -2716 1147 0
+-2841 162 -815 0
+-2641 -2714 -2009 0
+3363 -1941 710 0
+317 1545 220 0
+2416 -2880 2771 0
+2810 -1507 2790 0
+2354 -1276 2696 0
+1253 3155 -3334 0
+2608 -1968 -963 0
+-1280 973 -1509 0
+-1185 -2355 -289 0
+1513 -76 709 0
+-2572 1830 -1654 0
+-2590 1813 -1414 0
+3245 -2653 3352 0
+-960 -1480 -228 0
+1460 911 -1028 0
+-806 -81 2326 0
+798 2496 2472 0
+1887 3102 -2934 0
+-1701 490 -208 0
+1449 -2457 3202 0
+-478 84 3142 0
+2294 324 -3051 0
+1699 -1511 2476 0
+754 -1337 -356 0
+1959 -3212 662 0
+901 -3420 -1699 0
+-3393 1 1781 0
+3011 988 1279 0
+1966 -639 -3274 0
+-1347 -2798 2649 0
+472 1100 -1033 0
+3453 -3289 1141 0
+-3005 -1548 1673 0
+-455 -1359 3440 0
+2088 -2865 2345 0
+-1346 -2063 -3207 0
+-1743 -520 3112 0
+-3101 -2312 -3108 0
+-475 -622 -1157 0
+-2965 -1848 1130 0
+-843 8 -1420 0
+2500 2874 -1193 0
+1181 1601 -1941 0
+476 -1271 748 0
+1660 2171 2542 0
+700 2275 -2790 0
+422 3356 -1309 0
+-2280 -1841 2481 0
+-1589 -2698 -554 0
+-1785 -157 -2220 0
+255 -2583 126 0
+-2724 162 -343 0
+127 458 -3003 0
+-2250 2395 -450 0
+1391 1662 2689 0
+-747 -3300 1973 0
+1702 474 -275 0
+-3332 -3439 2369 0
+-3228 -532 -2564 0
+1571 -3216 -2003 0
+112 -1848 2579 0
+-3338 -1517 -2642 0
+1127 2193 -2764 0
+506 2180 -1114 0
+2019 -1698 2415 0
+-638 2950 2439 0
+2806 2807 -2587 0
+2614 922 -1279 0
+2368 2677 -2823 0
+2290 -2974 -3075 0
+-688 915 2698 0
+-2165 2130 2825 0
+3420 1430 3244 0
+1027 -993 -3158 0
+-494 -1656 -2436 0
+1856 1442 3261 0
+2624 2642 3397 0
+-2469 403 658 0
+3107 -2258 1888 0
+-914 364 -2349 0
+299 -2423 -3474 0
+2379 -609 -350 0
+-3486 -322 -3217 0
+535 -2664 -3422 0
+-1209 3433 -3404 0
+871 -2985 -1943 0
+1977 2055 2342 0
+-3091 -1723 2715 0
+-891 763 -2542 0
+-1105 -1520 -1822 0
+3318 1626 2486 0
+2260 -890 48 0
+3220 2058 -3051 0
+2882 -1022 495 0
+-828 313 2636 0
+-271 1326 1755 0
+1965 1273 1329 0
+-2585 -959 2490 0
+2414 950 2016 0
+-3497 -3043 -1690 0
+2443 -1131 -357 0
+580 -3399 1674 0
+-3173 2275 -1900 0
+1141 3136 -747 0
+35 -994 -1053 0
+1755 1144 -265 0
+-2269 320 2696 0
+-3394 2752 3001 0
+3433 1964 -2733 0
+-1219 3454 -2344 0
+-1396 -1003 -3483 0
+539 2110 919 0
+-2852 175 2981 0
+3255 317 -2481 0
+929 -2316 2411 0
+-1889 -1758 -2845 0
+-657 493 741 0
+573 -2224 2196 0
+422 1118 -168 0
+287 -298 1978 0
+-262 -3015 3257 0
+260 -2242 -3180 0
+2164 -3074 999 0
+2592 219 2159 0
+-308 1482 1549 0
+3315 325 330 0
+1689 494 1342 0
+-3413 -426 -892 0
+-1256 -2846 192 0
+1860 -450 1106 0
+3300 -309 249 0
+-205 1228 2367 0
+873 -2574 -1766 0
+2723 3448 994 0
+73 -639 -2694 0
+-2521 2664 2617 0
+-3468 1350 20 0
+264 -2496 2191 0
+-2803 -281 -3482 0
+-2889 -628 -576 0
+-1772 2314 2426 0
+-348 -752 -87 0
+1913 1664 3189 0
+1669 -1767 -1740 0
+3223 1802 1157 0
+-171 -1974 -364 0
+414 3291 -2408 0
+-1936 229 -1728 0
+-453 2407 -1845 0
+-468 1776 1917 0
+1148 2361 1071 0
+520 -3435 2649 0
+189 -3163 1184 0
+-334 -1286 356 0
+3387 1197 3093 0
+-1095 -1700 -362 0
+-2679 755 -1192 0
+1456 -987 1798 0
+-2508 -306 1372 0
+3423 1484 -2921 0
+-733 1818 -470 0
+-1703 3060 -2261 0
+2360 -2132 1333 0
+-2016 2560 -633 0
+-2983 1690 1675 0
+-2043 -1625 -1340 0
+2539 1742 -1999 0
+-2849 -718 -704 0
+-1909 2391 1541 0
+-1400 -79 1990 0
+-700 -660 892 0
+918 1542 2028 0
+-3162 -897 2857 0
+2430 820 -2234 0
+843 -3384 3223 0
+-2675 2405 -2746 0
+-1834 3227 -2824 0
+-3414 3130 -2864 0
+-2412 -252 -3113 0
+2092 -2619 -1376 0
+-348 -2763 384 0
+2549 -2173 -2092 0
+-529 -481 -2816 0
+-2645 1636 -1458 0
+-1881 -1703 -2025 0
+3340 129 -1625 0
+1111 2729 2948 0
+1280 -3326 -135 0
+-1604 868 2175 0
+-988 2375 1553 0
+2269 -3271 -494 0
+-2909 -2068 -1389 0
+3458 1492 928 0
+2424 905 -2270 0
+-2116 134 -2447 0
+1888 3078 112 0
+-3054 -1677 1658 0
+3137 -2233 1398 0
+2755 2191 -112 0
+-3239 -717 3217 0
+-1558 878 -3263 0
+1207 508 -938 0
+-2448 -280 1703 0
+-840 1998 1116 0
+490 -837 726 0
+-869 2158 3419 0
+-2734 1237 509 0
+1907 -2749 637 0
+-364 -1907 1007 0
+971 -377 -2702 0
+2360 -3386 1816 0
+2938 930 -791 0
+2849 -895 -1384 0
+3047 -3008 609 0
+-976 -2009 -3387 0
+-2454 -1280 -3264 0
+2143 -644 -3375 0
+-1011 -632 -1320 0
+3436 262 -2320 0
+-3457 -2450 1148 0
+-3175 -1082 2440 0
+-549 -46 655 0
+2626 -2644 71 0
+-1772 1330 2949 0
+-2903 -3445 -1370 0
+-688 1193 1999 0
+2614 1215 239 0
+-2580 -36 -2620 0
+-2187 112 -2925 0
+166 -2466 -680 0
+1201 -1380 3136 0
+-2526 -2425 -1409 0
+2110 -2027 2213 0
+-2250 2038 916 0
+-1922 -289 -1191 0
+1222 2335 1285 0
+-2479 719 550 0
+567 -2616 1304 0
+-239 -2227 2415 0
+238 723 -1723 0
+-1493 -804 -2046 0
+-2297 2398 -2428 0
+1643 -2106 -2086 0
+2086 -3464 1100 0
+-455 -3215 1863 0
+3090 -882 183 0
+2481 -451 1995 0
+-825 -2373 -895 0
+2840 -3283 -294 0
+1682 -2220 -1925 0
+2833 -437 -1908 0
+3141 -3098 2267 0
+-2970 1730 2522 0
+-2801 2105 1165 0
+-3465 3146 741 0
+2765 -3085 286 0
+321 -2380 -18 0
+-1511 -737 1329 0
+2364 -1620 -3212 0
+-3367 2129 -1860 0
+-1082 -2942 -827 0
+-2158 -3154 -1066 0
+2184 2658 2316 0
+2679 1115 2148 0
+-82 503 -1525 0
+1579 3487 -3274 0
+748 -1960 -2969 0
+-71 -2101 1074 0
+3214 2095 -1051 0
+-1655 2756 -3342 0
+1019 3388 -2441 0
+-1819 1592 -89 0
+-3302 2714 2888 0
+-2819 539 3430 0
+2156 2721 -242 0
+2191 -483 2266 0
+1739 -2611 862 0
+-890 -2858 -2566 0
+-390 -1346 3297 0
+-2518 2861 3363 0
+-801 -863 631 0
+707 -212 -2199 0
+2516 1737 3192 0
+618 -2686 -1010 0
+3239 -935 -1765 0
+2201 -2850 349 0
+2691 -2349 872 0
+476 -636 -1760 0
+-3015 408 840 0
+1183 -1444 3177 0
+2914 -2274 -1440 0
+2243 177 -34 0
+2138 935 2722 0
+3100 1570 -936 0
+1425 2988 -735 0
+2577 -1042 2410 0
+473 -3112 2243 0
+-1697 154 -1824 0
+-1610 -3261 2304 0
+-1163 -554 -955 0
+2046 -981 978 0
+-2107 2102 -234 0
+-1730 2929 -3261 0
+-1637 -1147 416 0
+2583 -1740 3477 0
+-2767 1191 2977 0
+1700 -2757 -2433 0
+-600 3377 -2546 0
+-1281 -1009 -2079 0
+-2376 -3003 -797 0
+-3311 1501 -310 0
+-3170 2560 -2311 0
+-1916 -2155 -2938 0
+-1430 -1881 3145 0
+363 1620 2637 0
+2844 2479 -3448 0
+-1821 1297 -2043 0
+2374 -3018 -2251 0
+2228 -3174 -2619 0
+1068 -1339 2846 0
+1603 -2923 -3034 0
+3369 2488 2236 0
+1273 -1489 -2137 0
+-3245 -420 -1474 0
+2237 -2520 -1728 0
+-551 555 -411 0
+2844 1443 1444 0
+2860 1287 -7 0
+-1088 788 2670 0
+-1046 1302 -1481 0
+1931 2859 -2005 0
+-2573 47 3178 0
+-693 707 -3387 0
+1903 -464 2481 0
+1451 1039 92 0
+2280 1051 1007 0
+-1407 903 -594 0
+-2944 3119 -3266 0
+863 -478 858 0
+960 -2985 1559 0
+1017 -1597 -1977 0
+-1622 2682 -1336 0
+-3105 1062 -929 0
+2228 -2495 3118 0
+2164 -2159 -2575 0
+1223 -555 2158 0
+1922 -2414 2804 0
+-878 1029 1632 0
+-2767 249 -3065 0
+1612 -444 -3376 0
+487 3110 -418 0
+-73 -2047 3442 0
+-2736 258 -2760 0
+-2222 2248 -286 0
+2337 40 2168 0
+2299 -1013 -197 0
+-175 -269 -2756 0
+-71 -1031 -2256 0
+-2218 -2315 3447 0
+2777 999 1564 0
+2731 2321 -2270 0
+-1674 2786 -1165 0
+-2153 533 1564 0
+-3473 265 -1246 0
+1389 -2494 3339 0
+-2053 919 2814 0
+-3390 2132 -2929 0
+-1218 -1032 1264 0
+-1038 -2876 -25 0
+-1513 -1144 -300 0
+-1063 -53 3226 0
+-1668 -353 -2291 0
+96 1362 1758 0
+-222 363 597 0
+219 1801 2616 0
+-2346 -953 -2158 0
+1765 293 -626 0
+1898 2590 1848 0
+-2385 -143 -1667 0
+3134 2849 -3249 0
+-34 2142 -992 0
+1664 -1126 1373 0
+1039 -2471 -3028 0
+976 -2888 1159 0
+1858 2940 2226 0
+-3171 1282 3246 0
+-2611 1530 -3366 0
+-1987 -2671 -1033 0
+-1776 611 3127 0
+-2218 -2561 2691 0
+-846 -46 672 0
+901 1201 19 0
+-1831 1971 -2963 0
+3200 1512 2402 0
+-2080 2623 2777 0
+-2428 673 -2250 0
+2265 1128 2080 0
+-1032 3152 -1413 0
+2505 -352 -1423 0
+1655 372 1143 0
+2590 -3271 -2543 0
+-1107 1670 -1273 0
+3381 -661 -1806 0
+2147 -3185 -1328 0
+-1751 -1109 -259 0
+-1771 2321 -2611 0
+-60 -2670 2452 0
+-1979 -2746 1865 0
+1212 1863 3009 0
+2003 -2672 -3382 0
+-1862 -2278 -3193 0
+-2045 1605 1482 0
+1655 2889 2600 0
+1951 -1765 1208 0
+-3 -2533 2821 0
+-2104 567 1865 0
+2270 -12 -1622 0
+-931 -1453 676 0
+-1573 -864 2939 0
+1110 1781 -2114 0
+-2558 -2284 -1599 0
+-3384 -1056 -743 0
+1388 -2453 1993 0
+-3393 -2253 3402 0
+2828 1132 -1155 0
+2209 463 -3337 0
+1640 2430 -3115 0
+1872 -1345 -343 0
+451 -3403 -992 0
+895 -817 -1428 0
+-1772 2183 1128 0
+795 -1740 1962 0
+-2896 2357 -1156 0
+578 -2934 810 0
+-285 -745 230 0
+-3072 -2308 -736 0
+274 2703 -1255 0
+-3367 -1497 -1391 0
+1422 -758 -2450 0
+1282 -3271 335 0
+699 -2003 -1660 0
+-2943 768 446 0
+3309 2672 -2536 0
+457 2531 1314 0
+-2782 -714 1122 0
+2554 954 -1326 0
+-293 -1047 2913 0
+-3083 1805 -526 0
+2816 -1297 -2198 0
+3327 1705 532 0
+1589 -1146 -640 0
+-1656 -3240 1994 0
+695 -1873 329 0
+3339 3382 -1492 0
+-245 -57 -1859 0
+-1276 173 2490 0
+-1392 1746 3348 0
+-283 1814 -3041 0
+-1054 -1787 514 0
+3013 1097 2708 0
+158 2902 -2904 0
+1143 2536 -1926 0
+-3126 -2926 -863 0
+-81 -1845 -2851 0
+-1646 -3117 1932 0
+2198 -2808 -2419 0
+-3491 -3007 -2949 0
+1410 140 -513 0
+-3301 -2919 2461 0
+503 -1131 3349 0
+2444 1652 -145 0
+463 632 2662 0
+-1401 2654 1406 0
+-2543 -259 2851 0
+-729 -3325 -3473 0
+1422 1718 667 0
+-144 1998 1098 0
+-856 -1730 -538 0
+-3175 840 1541 0
+2652 -44 629 0
+2149 2432 -1623 0
+2229 -728 2543 0
+1886 823 -3407 0
+3249 -941 3016 0
+779 1250 -1143 0
+838 428 -158 0
+-2869 317 -3113 0
+-1921 2756 1613 0
+-603 -2245 1950 0
+-524 -427 51 0
+-151 -1361 658 0
+2628 404 -122 0
+2303 -1515 1285 0
+722 -988 3431 0
+-1226 2166 -2227 0
+3222 3104 -2956 0
+2600 288 -1527 0
+-3020 2451 -1888 0
+661 -2124 -2075 0
+-1086 -2508 -1453 0
+-1966 -112 -2256 0
+1831 1650 -860 0
+-2527 6 -1414 0
+-1713 -1002 223 0
+2390 -2876 -1058 0
+2631 -2002 1092 0
+-2309 -2113 1540 0
+-134 -3351 -2044 0
+2033 3338 -592 0
+2610 1367 -878 0
+-2813 -1947 2751 0
+-2071 -2461 2016 0
+-154 -1067 -2289 0
+1269 3366 -355 0
+-1166 3439 1449 0
+1456 -826 -2074 0
+-2942 -1634 -1327 0
+2404 -2300 1485 0
+-3080 1909 -359 0
+3403 1727 556 0
+-658 -436 -1915 0
+1559 -3153 -3259 0
+-3342 2460 -2131 0
+3229 3198 -1156 0
+-401 -1580 -899 0
+-1803 648 -3040 0
+-1247 418 791 0
+1879 -2338 -2773 0
+1283 2679 638 0
+1036 1391 -3166 0
+-1252 -347 -206 0
+-961 -985 2352 0
+1554 -2407 1569 0
+-1359 -680 -331 0
+871 -2356 -483 0
+-1052 3490 -133 0
+-1285 1648 -2471 0
+544 -1231 916 0
+-1130 2150 2812 0
+-3126 348 2444 0
+502 -2564 -1392 0
+-686 -289 -1445 0
+2834 -3284 -1440 0
+3362 2973 878 0
+-992 2466 -2485 0
+-2169 -1403 -3477 0
+428 -1971 2996 0
+3474 -1905 -2892 0
+456 -2414 1265 0
+2213 295 -96 0
+2587 2265 3496 0
+3285 -2903 -1138 0
+-1672 -1228 -869 0
+-3421 3373 1253 0
+-2125 -3394 -1144 0
+1698 2253 -720 0
+-2703 2672 2260 0
+1004 -1421 507 0
+2851 -114 2761 0
+360 1331 304 0
+243 2704 2463 0
+1244 -428 270 0
+724 -3119 -5 0
+934 553 -2078 0
+-2413 1198 -2691 0
+-2717 -2 1928 0
+-1844 -630 -86 0
+-1459 -2173 2954 0
+-1202 1532 1433 0
+-1567 -2546 -589 0
+765 1168 1726 0
+3232 2766 -2341 0
+-1260 160 -1376 0
+-2109 3500 831 0
+249 1778 -1662 0
+1030 -2172 -3193 0
+1792 467 -3285 0
+408 3106 976 0
+-181 -58 3224 0
+1612 -3286 -2766 0
+-2256 373 -2492 0
+1324 -2990 1840 0
+1098 318 2815 0
+-1685 877 -3175 0
+2632 571 -1176 0
+364 -130 -857 0
+803 3404 -471 0
+-3067 491 -2272 0
+-1177 -2801 -2199 0
+2652 261 -247 0
+-3058 1366 1348 0
+-2309 903 -2442 0
+455 -2942 -1892 0
+751 -2170 -1621 0
+-2526 -2198 495 0
+-722 -3055 3240 0
+811 3052 -760 0
+-3087 502 -2160 0
+-742 1962 2961 0
+278 -855 -1272 0
+1420 -1403 -581 0
+-1877 3190 -3104 0
+3423 1664 -1718 0
+2817 3232 1869 0
+1360 -1178 -1123 0
+65 942 -17 0
+2608 2912 -3323 0
+-2747 1704 169 0
+1232 -2381 -764 0
+156 -2897 838 0
+281 3061 2368 0
+2744 1471 -274 0
+1169 1039 -430 0
+-2795 -693 -2626 0
+-2424 -79 -613 0
+2339 -1818 -2116 0
+-1476 2160 14 0
+-740 1953 556 0
+2985 -544 -1525 0
+-1632 2450 2269 0
+-2626 456 -3006 0
+1628 -432 428 0
+-2721 -1628 -2944 0
+-56 2034 2605 0
+268 -508 -2447 0
+-2279 -383 2515 0
+-1807 -870 929 0
+-2683 -2464 -1322 0
+-2994 -836 1976 0
+1585 677 -1460 0
+1368 -1195 2973 0
+1640 852 -17 0
+-307 1930 8 0
+1179 1129 1028 0
+1955 1848 -1205 0
+-2254 46 -823 0
+159 798 -1472 0
+2790 12 -1049 0
+-971 3021 -742 0
+1704 -3161 1827 0
+3360 3437 530 0
+-2924 -3222 1697 0
+1035 -2971 2207 0
+-1066 -2747 1777 0
+-1135 2683 -33 0
+-1661 -1591 3297 0
+-2357 2807 -2941 0
+-3270 -1991 1521 0
+-3260 375 -3174 0
+-2493 2132 -1604 0
+2686 -2056 1361 0
+-2895 1072 2294 0
+-3205 -987 1304 0
+2393 -1594 69 0
+1418 -2075 738 0
+-2214 3443 698 0
+-2621 -1520 2294 0
+705 -2377 -195 0
+-699 1243 1854 0
+60 -373 3321 0
+-2313 -1033 2803 0
+-57 -1823 2116 0
+-1889 -2616 -1011 0
+-945 1897 501 0
+3499 -21 2694 0
+1481 -1875 260 0
+744 3100 -1893 0
+-3184 1035 -1047 0
+-1609 254 679 0
+-256 -1314 -1049 0
+117 2013 1543 0
+-3168 -2590 1353 0
+-983 1264 -3335 0
+-563 802 -1449 0
+-1571 -2159 -1980 0
+-3392 -2238 -587 0
+-677 2567 3022 0
+749 -1454 -2522 0
+824 -2732 -400 0
+3107 -2384 -1354 0
+1473 2960 -3150 0
+-490 301 93 0
+-3475 -326 -2854 0
+-2717 2431 -1803 0
+2628 1300 -3174 0
+-2376 400 1356 0
+-1881 375 -1401 0
+-2002 -1308 -2803 0
+-1674 -839 467 0
+-3434 -550 1107 0
+388 -1369 -1816 0
+835 1068 -2377 0
+1676 343 3206 0
+-144 -1664 -1982 0
+123 -1725 -3149 0
+-895 -2812 823 0
+-1486 1324 2867 0
+-1521 -1078 524 0
+1508 -2161 1650 0
+1801 2559 2445 0
+-2856 -2244 -2101 0
+-3295 -1224 2640 0
+-1317 -1632 2523 0
+-3177 -2823 -201 0
+-2481 -2746 2026 0
+-246 -1529 -49 0
+-2056 -216 960 0
+-369 15 -1171 0
+655 3067 2685 0
+951 1768 -3204 0
+-1885 -1675 2439 0
+42 1566 -773 0
+-3112 -1302 3142 0
+2164 3320 -274 0
+1498 669 -1419 0
+-59 -322 -3216 0
+3457 254 -15 0
+548 -2167 -2753 0
+-822 2104 3146 0
+-3146 -101 908 0
+687 1322 2700 0
+268 -794 678 0
+-1547 435 -3074 0
+2021 -1102 -1036 0
+-3002 -1891 995 0
+1120 265 2690 0
+-3478 -2121 -3477 0
+-1580 -523 -1736 0
+-1701 491 -881 0
+50 2208 -3483 0
+1239 1384 44 0
+969 -30 793 0
+-2387 1529 886 0
+-3006 22 -1888 0
+-1523 1284 -377 0
+-3432 2370 -3119 0
+1889 2434 176 0
+-1924 -2097 1971 0
+-3217 2068 1472 0
+-640 2392 -3224 0
+3190 -884 971 0
+971 -1089 1277 0
+-3130 326 3152 0
+1209 -273 -2605 0
+-232 1239 1667 0
+1892 618 3415 0
+3278 -948 790 0
+2130 1924 2145 0
+1252 -942 -3129 0
+3269 3291 2483 0
+1969 -2814 151 0
+675 -114 795 0
+346 -1322 -1880 0
+343 3319 1156 0
+1332 -2808 -1930 0
+-2580 2665 -2984 0
+1121 -2743 -1781 0
+-2138 -2961 -895 0
+3425 972 -2523 0
+-2690 -3050 1475 0
+-288 -1877 -2447 0
+2268 1519 -1302 0
+1548 -1925 -3398 0
+2349 557 3064 0
+1947 3433 -752 0
+2976 -1962 -492 0
+2714 976 769 0
+-531 2217 3325 0
+-1775 -1935 -1994 0
+1911 253 -1937 0
+-3250 -2043 2764 0
+-2620 1792 2709 0
+-2373 -1377 2195 0
+-3202 -3375 2802 0
+3135 2307 -3055 0
+-891 2155 1016 0
+-1966 -3395 230 0
+-2818 2344 -190 0
+-1895 1508 1528 0
+137 -2021 -1049 0
+3186 880 -1371 0
+-3259 2030 -93 0
+-2257 1361 -105 0
+-2139 -1443 269 0
+955 631 2848 0
+-1050 -118 -874 0
+-324 -1324 -286 0
+1112 -827 -143 0
+-524 2931 2427 0
+1435 103 -2856 0
+246 -1984 -2335 0
+1851 3489 -1511 0
+-1092 2817 1595 0
+2850 -1739 584 0
+1979 546 584 0
+1532 308 1192 0
+-2872 1799 -2717 0
+3135 -2431 2226 0
+1909 2643 354 0
+-813 1744 913 0
+1260 3157 2459 0
+709 -390 -1191 0
+2317 -3414 3276 0
index d3a8a3a56fa37904b65426d4712a54912b8ca79b..e3915ff0a561bafc68974d4b853d686283e5c092 100644 (file)
@@ -1,9 +1,11 @@
 c SAT07-Contest Parameters: unif2p p=7 nbc2=2803 nbc3=6541 v=3500 seed=1286605994
 c Uniform UNKNOWN (2+p)-SAT Instance nbc2=2803, nbc3=6541, p=0.70, nbv=3500, seed=1286605994
-p cnf 3 6
+p cnf 6 6
 -1 -2 0
 2 3 0
 1 3 0
 -1 2 0
 -2 0
 -1 2 1 0
+4 5 0
+5 -6 0
index 4004ca5ddc0711ae1410e768cc196e3362fca6e5..80796968f0d7d74855e797d7eededd176c1179e3 100644 (file)
@@ -103,6 +103,107 @@ static void readClause(StreamBuffer& in, SolverState& S, CkVec<Lit>& lits) {
     }
 }
 
+/* unit propagation before real computing */
+
+static void simplify(SolverState& S)
+{
+    for(int i=0; i< S.unit_clause_index.size(); i++)
+    {
+#ifdef DEBUG
+        CkPrintf("Inside simplify before processing, unit clause number:%d, i=%d\n", S.unit_clause_index.size(), i);
+#endif
+       
+        Clause cl = S.clauses[S.unit_clause_index[i]];
+        //only one element in unit clause
+        Lit lit = cl[0];
+        S.clauses[S.unit_clause_index[i]].resize(0);
+        S.unsolved_clauses--;
+
+        int pp_ = 1;
+        int pp_i_ = 2;
+        int pp_j_ = 1;
+
+       if(toInt(lit) < 0)
+       {
+           pp_ = -1;
+           pp_i_ = 1;
+           pp_j_ = 2;
+       }
+       S.occurrence[pp_*toInt(lit)-1] = -pp_i_;
+       CkVec<int> &inClauses = S.whichClauses[pp_*2*toInt(lit)-pp_i_];
+       CkVec<int> &inClauses_opposite = S.whichClauses[pp_*2*toInt(lit)-pp_j_];
+       
+#ifdef DEBUG
+        CkPrintf("****\nUnit clause is %d, index=%d, occurrence=%d\n", toInt(lit), S.unit_clause_index[i], -pp_i_);
+           CkPrintf("\t same occur");
+#endif
+       // literal with same sign
+       for(int j=0; j<inClauses.size(); j++)
+       {
+           int cl_index = inClauses[j];
+#ifdef DEBUG
+           CkPrintf(" %d \n \t \t literals in this clauses: ", cl_index);
+#endif
+           Clause& cl_ = S.clauses[cl_index];
+           //for all the literals in this clauses, the occurrence decreases by 1
+           for(int k=0; k< cl_.size(); k++)
+           {
+               Lit lit_ = cl_[k];
+               if(toInt(lit_) == toInt(lit))
+                   continue;
+#ifdef DEBUG
+               CkPrintf(" %d  ", toInt(lit_));
+#endif
+               S.occurrence[abs(toInt(lit_)) - 1]--;
+               if(toInt(lit_) > 0)
+               {
+                   S.positive_occurrence[toInt(lit_)-1]--;
+                   //S.whichClauses[2*toInt(lit_)-2].remove(cl_index);
+                //remove the clause index for the literal
+               for(int _i = 0; _i<S.whichClauses[2*toInt(lit_)-2].size(); _i++)
+                   {
+                       if(S.whichClauses[2*toInt(lit_)-2][_i] == cl_index)
+                       {
+                           S.whichClauses[2*toInt(lit_)-2].remove(_i);
+                            break;
+                       }
+                   }
+
+               }else
+               {
+                   for(int _i = 0; _i<S.whichClauses[-2*toInt(lit_)-1].size(); _i++)
+                   {
+                       if(S.whichClauses[-2*toInt(lit_)-1][_i] == cl_index)
+                       {
+                           S.whichClauses[-2*toInt(lit_)-1].remove(_i);
+                           break;
+                       }
+                   }
+               }
+           }
+           
+           S.unsolved_clauses--;
+           S.clauses[cl_index].resize(0); //this clause goes away. In order to keep index unchanged, resize it as 0
+       }
+       
+       for(int j=0; j<inClauses_opposite.size(); j++)
+       {
+           int cl_index_ = inClauses_opposite[j];
+           Clause& cl_neg = S.clauses[cl_index_];
+           cl_neg.remove(-toInt(lit));
+           //becomes a unit clause
+           if(cl_neg.size() == 1)
+           {
+               S.unit_clause_index.push_back(cl_index_);
+           }
+       }
+
+    }
+
+    S.unit_clause_index.removeAll();
+}
+
+
 
 static void parse_confFile(gzFile input_stream, SolverState& S) {                  
     StreamBuffer in(input_stream);    
@@ -124,6 +225,7 @@ static void parse_confFile(gzFile input_stream, SolverState& S) {
                 S.var_size = vars;
                 S.occurrence.resize(vars);
                 S.positive_occurrence.resize(vars);
+                S.whichClauses.resize(2*vars);
                 for(int __i=0; __i<vars; __i++)
                 {
                     S.occurrence[__i] = 0;
@@ -142,6 +244,7 @@ static void parse_confFile(gzFile input_stream, SolverState& S) {
                 CkPrintf("conflict detected by addclauses\n");
                 CkExit();
             }
+            
         }
     
     }
@@ -175,16 +278,43 @@ Main::Main(CkArgMsg* msg)
 
     parse_confFile(in, *solver_msg);
 
+
     /*  unit propagation */ 
-    /* simplify() */
-    readfiletimer = CmiWallTimer();
+    simplify(*solver_msg);
+
+#ifdef DEBUG
+    for(int __i = 0; __i<solver_msg->occurrence.size(); __i++)
+    {
+
+            if(solver_msg->occurrence[__i] == -2)
+                CkPrintf(" TRUE ");
+            else if(solver_msg->occurrence[__i] == -1)
+                CkPrintf(" FALSE ");
+            else
+                CkPrintf(" UNDECIDED ");
+    }
+
+
+    CkPrintf(" unsolved clauses %d\n", solver_msg->unsolvedClauses());
+#endif
+
+    solver_msg->unsolved_clauses = 0;
+   
+    int unsolved = solver_msg->unsolvedClauses();
 
+    if(unsolved == 0)
+    {
+        CkPrintf(" This problem is solved by pre-processing\n");
+        solver_msg->printSolution();
+        CkExit();
+    }
+    readfiletimer = CmiWallTimer();
     /*fire the first chare */
     /* 1)Which variable is assigned which value this time, (variable, 1), current clauses status vector(), literal array activities */
 
     mainProxy = thisProxy;
     int max_index = get_max_element(solver_msg->occurrence);
-   
+    
     solver_msg->assigned_lit = Lit(max_index+1);
     solver_msg->level = 0;
     SolverState *not_msg = copy_solverstate(solver_msg);
@@ -234,7 +364,7 @@ void Main::done()
 
     double endtimer = CmiWallTimer();
 
-    CkPrintf("File reading and processing time:         %f\n", readfiletimer-starttimer);
+    CkPrintf("\nFile reading and processing time:         %f\n", readfiletimer-starttimer);
     CkPrintf("Solving time:                             %f\n", endtimer - readfiletimer);
     CkExit();
 }
diff --git a/examples/charm++/satisfiability/verify/main.C b/examples/charm++/satisfiability/verify/main.C
new file mode 100644 (file)
index 0000000..4a53cf5
--- /dev/null
@@ -0,0 +1,299 @@
+#include <stdio.h>
+#include <cstring>
+#include <stdint.h>
+#include <errno.h>
+#include <limits.h>
+
+#include <signal.h>
+#include <zlib.h>
+
+#include "main.decl.h"
+#include "main.h"
+
+#include "SolverTypes.h"
+#include "Solver.h"
+
+
+//#include "util.h"
+
+CProxy_Main mainProxy;
+
+#define CHUNK_LIMIT 1048576
+
+
+class StreamBuffer {
+    gzFile  in;
+    char    buf[CHUNK_LIMIT];
+    int     pos;
+    int     size;
+
+    void assureLookahead() {
+        if (pos >= size) {
+            pos  = 0;
+            size = gzread(in, buf, sizeof(buf)); } }
+
+public:
+            StreamBuffer(gzFile i) : in(i), pos(0), size(0) {
+                assureLookahead(); }
+
+            int  operator *  () { return (pos >= size) ? EOF : buf[pos]; }
+            void operator ++ () { pos++; assureLookahead(); }
+};
+
+static bool match(StreamBuffer& in, char* str) {
+    for (; *str != 0; ++str, ++in)
+        if (*str != *in)
+            return false;
+    return true;
+}
+
+
+void error_exit(char *error)
+{
+    printf("%s\n", error);
+    CkExit();
+}
+
+void skipWhitespace(StreamBuffer& in) 
+{
+    while ((*in >= 9 && *in <= 13) || *in == 32)
+        ++in;
+}
+
+void skipLine(StreamBuffer& in) {
+    for (;;){
+        if (*in == EOF || *in == '\0') return;
+        if (*in == '\n')
+        { ++in; return; }
+        ++in;
+    } 
+}
+
+
+int parseInt(StreamBuffer& in) {
+    int     val = 0;
+    bool    neg = false;
+    skipWhitespace(in);
+    if      (*in == '-') neg = true, ++in;
+    else if (*in == '+') ++in;
+    if (*in < '0' || *in > '9')
+        error_exit((char*)"ParseInt error\n");
+
+    while (*in >= '0' && *in <= '9')
+    {
+        val = val*10 + (*in - '0');
+        ++in;
+    }
+    return neg ? -val : val; 
+}
+
+static void readClause(StreamBuffer& in, SolverState& S, CkVec<Lit>& lits) {
+    int     parsed_lit, var;
+    lits.removeAll();
+    for (;;){
+        parsed_lit = parseInt(in);
+        if (parsed_lit == 0) break;
+        var = abs(parsed_lit)-1;
+        
+        S.occurrence[var]++;
+        if(parsed_lit>0)
+            S.positive_occurrence[var]++;
+        //while (var >= S.nVars()) S.newVar();
+        lits.push_back( Lit(parsed_lit));
+    }
+}
+
+/* unit propagation before real computing */
+
+static void simplify(SolverState& S)
+{
+    for(int i=0; i< S.unit_clause_index.size(); i++)
+    {
+#ifdef DEBUG
+        CkPrintf("Inside simplify before processing, unit clause number:%d, i=%d\n", S.unit_clause_index.size(), i);
+#endif
+       
+        Clause cl = S.clauses[S.unit_clause_index[i]];
+        //only one element in unit clause
+        Lit lit = cl[0];
+        S.clauses[S.unit_clause_index[i]].resize(0);
+        S.unsolved_clauses--;
+
+        int pp_ = 1;
+        int pp_i_ = 2;
+        int pp_j_ = 1;
+
+       if(toInt(lit) < 0)
+       {
+           pp_ = -1;
+           pp_i_ = 1;
+           pp_j_ = 2;
+       }
+       S.occurrence[pp_*toInt(lit)-1] = -pp_i_;
+       CkVec<int> &inClauses = S.whichClauses[pp_*2*toInt(lit)-pp_i_];
+       CkVec<int> &inClauses_opposite = S.whichClauses[pp_*2*toInt(lit)-pp_j_];
+       
+#ifdef DEBUG
+        CkPrintf("****\nUnit clause is %d, index=%d, occurrence=%d\n", toInt(lit), S.unit_clause_index[i], -pp_i_);
+           CkPrintf("\t same occur");
+#endif
+       // literal with same sign
+       for(int j=0; j<inClauses.size(); j++)
+       {
+           int cl_index = inClauses[j];
+#ifdef DEBUG
+           CkPrintf(" %d \n \t \t literals in this clauses: ", cl_index);
+#endif
+           Clause& cl_ = S.clauses[cl_index];
+           //for all the literals in this clauses, the occurrence decreases by 1
+           for(int k=0; k< cl_.size(); k++)
+           {
+               Lit lit_ = cl_[k];
+               if(toInt(lit_) == toInt(lit))
+                   continue;
+#ifdef DEBUG
+               CkPrintf(" %d  ", toInt(lit_));
+#endif
+               S.occurrence[abs(toInt(lit_)) - 1]--;
+               if(toInt(lit_) > 0)
+               {
+                   S.positive_occurrence[toInt(lit_)-1]--;
+                   //S.whichClauses[2*toInt(lit_)-2].remove(cl_index);
+                //remove the clause index for the literal
+               for(int _i = 0; _i<S.whichClauses[2*toInt(lit_)-2].size(); _i++)
+                   {
+                       if(S.whichClauses[2*toInt(lit_)-2][_i] == cl_index)
+                       {
+                           S.whichClauses[2*toInt(lit_)-2].remove(_i);
+                            break;
+                       }
+                   }
+
+               }else
+               {
+                   for(int _i = 0; _i<S.whichClauses[-2*toInt(lit_)-1].size(); _i++)
+                   {
+                       if(S.whichClauses[-2*toInt(lit_)-1][_i] == cl_index)
+                       {
+                           S.whichClauses[-2*toInt(lit_)-1].remove(_i);
+                           break;
+                       }
+                   }
+               }
+           }
+           
+           S.unsolved_clauses--;
+           S.clauses[cl_index].resize(0); //this clause goes away. In order to keep index unchanged, resize it as 0
+       }
+       
+       for(int j=0; j<inClauses_opposite.size(); j++)
+       {
+           int cl_index_ = inClauses_opposite[j];
+           Clause& cl_neg = S.clauses[cl_index_];
+           cl_neg.remove(-toInt(lit));
+           //becomes a unit clause
+           if(cl_neg.size() == 1)
+           {
+               S.unit_clause_index.push_back(cl_index_);
+           }
+       }
+
+    }
+
+    S.unit_clause_index.removeAll();
+}
+
+
+
+static void parse_confFile(gzFile problem_stream, solution_stream) {                  
+   
+    vector<int> assignment;
+    StreamBuffer in_solution(solution_stream);    
+    
+   
+    for(;;)
+    {
+        if(*in == EOF)
+            break;
+        else
+    }
+
+    CkVec<Lit> lits;                                                 
+    int i  = 0;
+    
+    for (;;)
+    {                                                     
+        skipWhitespace(in);                                        
+        if (*in == EOF)                                            
+            break;                                                 
+        else if (*in == 'p'){                                      
+            if (match(in, (char*)"pcnf")){                               
+                int vars    = parseInt(in);                        
+                int clauses = parseInt(in);                        
+                printf("|  Number of variables:  %-12d                                         |\n", vars);
+                printf("|  Number of clauses:    %-12d                                         |\n", clauses);
+
+                S.var_size = vars;
+                S.occurrence.resize(vars);
+                S.positive_occurrence.resize(vars);
+                S.whichClauses.resize(2*vars);
+                for(int __i=0; __i<vars; __i++)
+                {
+                    S.occurrence[__i] = 0;
+                    S.positive_occurrence[__i] = 0;
+                }
+            }else{
+                printf("PARSE ERROR! Unexpected char: %c\n", *in);
+                error_exit((char*)"Parse Error\n");
+            }
+        } else if (*in == 'c' || *in == 'p')
+            skipLine(in);
+        else{
+            readClause(in, S, lits);
+            if( !S.addClause(lits))
+            {
+                CkPrintf("conflict detected by addclauses\n");
+                CkExit();
+            }
+            
+        }
+    
+    }
+}
+
+
+Main::Main(CkArgMsg* msg)
+{
+
+    if(msg->argc < 3)
+    {
+        error_exit((char*)"Usage: sat_verify problemfile solutionfile\n");
+    }
+    /* read file */
+
+    /*read information from file */
+    gzFile in_problem = gzopen(msg->argv[1], "rb");
+    gzFile in_solution = gzopen(msg->argv[2], "rb");
+
+    if(in == NULL)
+    {
+        error_exit((char*)"Invalid input filename\n");
+    }
+
+    parse_confFile(in, *solver_msg);
+
+}
+
+Main::Main(CkMigrateMessage* msg) {}
+
+void Main::done()
+{
+
+    double endtimer = CmiWallTimer();
+
+    CkPrintf("\nFile reading and processing time:         %f\n", readfiletimer-starttimer);
+    CkPrintf("Solving time:                             %f\n", endtimer - readfiletimer);
+    CkExit();
+}
+#include "main.def.h"
+
index 3362f138e2dca355a35ef7044dac82feea69900e..86303a4ee002a45c2121aef648f0aa761c723c76 100644 (file)
@@ -1,4 +1,4 @@
-CMK_DEFS=' -D_REENTRANT -D_THREAD_SAFE'
+CMK_DEFS=' -D_REENTRANT -D_THREAD_SAFE -qtls=local-exec'
 CMK_CPP_C="$CMK_CPP_C $CMK_DEFS"
 CMK_CC="$CMK_CC $CMK_DEFS"
 CMK_CC_RELIABLE="$CMK_CC_RELIABLE $CMK_DEFS "
@@ -8,3 +8,5 @@ CMK_CXXPP="$CMK_CXXPP $CMK_DEFS "
 CMK_LD="$CMK_LD $CMK_DEFS "
 CMK_LDXX="$CMK_LDXX $CMK_DEFS "
 CMK_LIBS=" -lpthreads $CMK_LIBS "
+CMK_SEQ_CC="$CMK_SEQ_CC -qtls=local-exec"
+CMK_SEQ_CXX="$CMK_SEQ_CXX -qtls=local-exec"
index 6c9eb45a1311715b590bd51859e040a18a285870..1c7281e98be7936be6b38034d8dd745dd4b4de4f 100644 (file)
@@ -1,14 +1,3 @@
-/*****************************************************************************
- * $Source$
- * $Author$
- * $Date$
- * $Revision$
- *****************************************************************************/
-
-#include "converse.h"
-#include "sockRoutines.h"
-
-#define DEBUGP(x)   /* CmiPrintf x;  */
 
 /*
  This scheme relies on using IP address to identify nodes and assigning 
@@ -16,7 +5,16 @@ cpu affinity.
 
  when CMK_NO_SOCKETS, which is typically on cray xt3 and bluegene/L.
  There is no hostname for the compute nodes.
+ *
+ * last updated 3/20/2010   Gengbin Zheng
+ * new options +pemap +commmap takes complex pattern of a list of cores
 */
+
+#include "converse.h"
+#include "sockRoutines.h"
+
+#define DEBUGP(x)   /* CmiPrintf x;  */
+
 #if CMK_HAS_SETAFFINITY || defined (_WIN32) || CMK_HAS_BINDPROCESSOR
 
 #include <stdlib.h>
@@ -45,7 +43,8 @@ long sched_getaffinity(pid_t pid, unsigned int len, unsigned long *user_mask_ptr
 #include <sys/mpctl.h>
 #endif
 
-static int excludecore[8] = {-1};
+#define MAX_EXCLUDE      16
+static int excludecore[MAX_EXCLUDE] = {-1};
 static int excludecount = 0;
 
 static int affinity_doneflag = 0;
@@ -60,7 +59,7 @@ static int in_exclude(int core)
 static void add_exclude(int core)
 {
   if (in_exclude(core)) return;
-  CmiAssert(excludecount < 8);
+  CmiAssert(excludecount < MAX_EXCLUDE);
   excludecore[excludecount++] = core;
 }
 
@@ -311,13 +310,19 @@ static void cpuAffinityRecvHandler(void *msg)
   CmiFree(m);
 }
 
+#if defined(_WIN32) && ! defined(__CYGWIN__)
+  /* strtok is thread safe in VC++ */
+#define strtok_r(x,y,z) strtok(x,y)
+#endif
+
 static int search_pemap(char *pecoremap, int pe)
 {
   char *mapstr = strdup(pecoremap);
   int *map = (int *)malloc(CmiNumPes()*sizeof(int));
+  char *ptr = NULL;
   int i, count;
 
-  char *str = strtok(mapstr, ",");
+  char *str = strtok_r(mapstr, ",", &ptr);
   count = 0;
   while (str)
   {
@@ -346,7 +351,7 @@ static int search_pemap(char *pecoremap, int pe)
         if (count == CmiNumPes()) break;
       }
       if (count == CmiNumPes()) break;
-      str = strtok(NULL, ",");
+      str = strtok_r(NULL, ",", &ptr);
   }
   i = map[pe % count];
 
@@ -374,6 +379,7 @@ void CmiInitCPUAffinity(char **argv)
   while (CmiGetArgIntDesc(argv,"+excludecore", &exclude, "avoid core when setting cpuaffinity")) 
     if (CmiMyRank() == 0) add_exclude(exclude);
   
+    /* obsolete */
   CmiGetArgStringDesc(argv, "+coremap", &coremap, "define core mapping");
   if (coremap!=NULL && excludecount>0)
     CmiAbort("Charm++> +excludecore and +coremap can not be used togetehr!");
@@ -518,10 +524,16 @@ void CmiInitCPUAffinity(char **argv)
 
 void CmiInitCPUAffinity(char **argv)
 {
+  char *pemap = NULL;
+  char *commap = NULL;
+  char *coremap = NULL;
   int excludecore = -1;
   int affinity_flag = CmiGetArgFlagDesc(argv,"+setcpuaffinity",
                                                "set cpu affinity");
   while (CmiGetArgIntDesc(argv,"+excludecore",&excludecore, "avoid core when setting cpuaffinity"));
+  CmiGetArgStringDesc(argv, "+coremap", &coremap, "define core mapping");
+  CmiGetArgStringDesc(argv, "+pemap", &pemap, "define pe to core mapping");
+  CmiGetArgStringDesc(argv, "+commap", &commap, "define comm threads to core mapping");
   if (affinity_flag && CmiMyPe()==0)
     CmiPrintf("sched_setaffinity() is not supported, +setcpuaffinity disabled.\n");
 }