diff --git a/Shower/Dipole/Base/DipoleChain.cc b/Shower/Dipole/Base/DipoleChain.cc
--- a/Shower/Dipole/Base/DipoleChain.cc
+++ b/Shower/Dipole/Base/DipoleChain.cc
@@ -1,342 +1,334 @@
 // -*- C++ -*-
 //
 // DipoleChain.cc is a part of Herwig - A multi-purpose Monte Carlo event generator
 // Copyright (C) 2002-2017 The Herwig Collaboration
 //
 // Herwig is licenced under version 3 of the GPL, see COPYING for details.
 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
 //
 //
 // This is the implementation of the non-inlined, non-templated member
 // functions of the DipoleChain class.
 //
 
 #include "DipoleChain.h"
 #include "Herwig/Shower/Dipole/Utility/DipolePartonSplitter.h"
-#include "Herwig/Shower/Dipole/Colorea/Colorea.h"
 
 #include <iterator>
 
 using namespace Herwig;
 
 DipoleChain::DipoleChain() 
   : ggSingleDipole(false) {}
 
 bool DipoleChain::circular () const { 
   return 
     (theDipoles.front().leftParticle() == 
      theDipoles.back().rightParticle());
 }
 
 bool DipoleChain::hasLeftNeighbour (list<Dipole>::const_iterator dc) const {
   if ( dc == dipoles().begin() )
     return circular();
   return true;
 }
 
 Dipole& DipoleChain::leftNeighbour (list<Dipole>::iterator dc) {
   assert(hasLeftNeighbour(dc));
   if ( dc == dipoles().begin() )
     return dipoles().back();
   return *(--dc);
 }
 
 const Dipole& DipoleChain::leftNeighbour (list<Dipole>::const_iterator dc) const {
   assert(hasLeftNeighbour(dc));
   if ( dc == dipoles().begin() )
     return dipoles().back();
   return *(--dc);
 }
 
 list<Dipole>::iterator DipoleChain::leftNeighbourIterator(list<Dipole>::iterator dc) {
   assert(hasLeftNeighbour(dc));
   if ( dc == dipoles().begin() )
     return --dipoles().end();
   return --dc;
 }
 
 bool DipoleChain::hasRightNeighbour (list<Dipole>::const_iterator dc) const {
   if (dc == --dipoles().end())
     return circular();
   return true;
 }
 
 Dipole& DipoleChain::rightNeighbour (list<Dipole>::iterator dc) {
   assert(hasRightNeighbour(dc));
   if ( dc == --dipoles().end() )
     return dipoles().front();
   return *(++dc);
 }
 
 const Dipole& DipoleChain::rightNeighbour (list<Dipole>::const_iterator dc) const {
   assert(hasRightNeighbour(dc));
   if ( dc == --dipoles().end() )
     return dipoles().front();
   return *(++dc);
 }
 
 list<Dipole>::iterator DipoleChain::rightNeighbourIterator(list<Dipole>::iterator dc) {
   assert(hasRightNeighbour(dc));
   if ( dc == --dipoles().end() )
     return dipoles().begin();
   return ++dc;
 }
 
 void DipoleChain::check() {
   if ( theDipoles.begin() == std::prev(theDipoles.end()) ) {
     if ( theDipoles.front().leftParticle()->hasColour() &&
 	 theDipoles.front().leftParticle()->hasAntiColour() ) {
       assert(theDipoles.front().rightParticle()->hasColour() &&
 	     theDipoles.front().rightParticle()->hasAntiColour());
       ggSingleDipole = true;
     }
   }
 }
 
-
-void DipoleChain::rearrange(int dipmax,int diplong){
-  static auto colorea = Colorea();
-  colorea.setChain(this);
-  colorea.rearrange( dipmax, diplong);
-}
-
 list<Dipole>::iterator DipoleChain::insertSplitting(list<Dipole>::iterator emittingDipole,
 						    pair<Dipole,Dipole> children,
 						    pair<list<Dipole>::iterator,list<Dipole>::iterator>& childIterators) {
 
   assert(DipolePartonSplitter::colourConnected(children.first.leftParticle(),children.first.rightParticle()) ||
 	 DipolePartonSplitter::colourConnected(children.second.leftParticle(),children.second.rightParticle()));
 
   bool was_circular = circular();
 
   if (hasLeftNeighbour(emittingDipole)) {
 
     list<Dipole>::iterator theLeftNeighbour =
       leftNeighbourIterator(emittingDipole);
 
     theLeftNeighbour->rightParticle(children.first.leftParticle());
     if ( children.first.leftParticle()->scale() < sqr(theLeftNeighbour->rightScale()) )
       theLeftNeighbour->rightScale(sqrt(children.first.leftParticle()->scale()));
     theLeftNeighbour->rightPDF(children.first.leftPDF());
     theLeftNeighbour->rightFraction(children.first.leftFraction());
     theLeftNeighbour->rightDecaying(children.first.leftDecaying());
 
     theLeftNeighbour->update();
 
   }
 
   if (hasRightNeighbour(emittingDipole)) {
 
     list<Dipole>::iterator theRightNeighbour =
       rightNeighbourIterator(emittingDipole);
 
     theRightNeighbour->leftParticle(children.second.rightParticle());
     if ( children.second.rightParticle()->scale() < sqr(theRightNeighbour->leftScale()) )
       theRightNeighbour->leftScale(sqrt(children.second.rightParticle()->scale()));
     theRightNeighbour->leftPDF(children.second.rightPDF());
     theRightNeighbour->leftFraction(children.second.rightFraction());
     theRightNeighbour->leftDecaying(children.second.rightDecaying());
 
     theRightNeighbour->update();
 
   }
 
   if (DipolePartonSplitter::colourConnected(children.first.leftParticle(),children.first.rightParticle()) &&
       DipolePartonSplitter::colourConnected(children.second.leftParticle(),children.second.rightParticle())) {
 
     // nothing special to do, just replace the emitting dipole
     // by the right one and insert the left one before it
 
     *emittingDipole = children.second;
 
     childIterators.second = emittingDipole;
     childIterators.first = dipoles().insert(emittingDipole,children.first);
 
     if ( ggSingleDipole ) {
       ggSingleDipole = false;
       Dipole miss;
       miss.leftParticle(dipoles().back().rightParticle());
       miss.rightParticle(dipoles().front().leftParticle());
       miss.leftScale(dipoles().back().rightScale());
       miss.rightScale(dipoles().front().leftScale());
       miss.leftPDF(dipoles().back().rightPDF());
       miss.rightPDF(dipoles().front().leftPDF());
       miss.leftFraction(dipoles().back().rightFraction());
       miss.rightFraction(dipoles().front().leftFraction());
       miss.leftDecaying(dipoles().back().rightDecaying());
       miss.rightDecaying(dipoles().front().leftDecaying());
       miss.update();
       dipoles().push_back(miss);
     }
 
     return dipoles().end();
 
   }
 
   if (!DipolePartonSplitter::colourConnected(children.first.leftParticle(),children.first.rightParticle())) {
 
     if ( !was_circular && !ggSingleDipole ) {
       *emittingDipole = children.second;
       childIterators.second = emittingDipole;
       assert(emittingDipole != dipoles().begin());
       childIterators.first = std::prev(emittingDipole);
       return emittingDipole;
     }
 
     *emittingDipole = children.second;
 
     if ( ggSingleDipole ) {
       ggSingleDipole = false;
       Dipole miss;
       miss.leftParticle(children.second.rightParticle());
       miss.rightParticle(children.first.leftParticle());
       miss.leftScale(children.second.rightScale());
       miss.rightScale(children.first.leftScale());
       miss.leftPDF(children.second.rightPDF());
       miss.rightPDF(children.first.leftPDF());
       miss.leftFraction(children.second.rightFraction());
       miss.rightFraction(children.first.leftFraction());
       miss.leftDecaying(dipoles().back().rightDecaying());
       miss.rightDecaying(dipoles().front().leftDecaying());
       miss.update();
       dipoles().push_back(miss);
       childIterators.first = dipoles().begin();
       childIterators.second = std::prev(dipoles().end());
       return dipoles().end();
     }
 
     childIterators.second = emittingDipole;
     if ( emittingDipole == dipoles().begin() )
       childIterators.first = --dipoles().end();
     else
       childIterators.first = std::prev(emittingDipole);
 
     if ( emittingDipole == dipoles().begin() )
       return dipoles().end();
 
     dipoles().splice(dipoles().begin(),dipoles(),emittingDipole,dipoles().end());
 
     // explicitly fix iterators in case the splice implementation
     // at hand does invalidate iterators (the SGI docu says, it doesn't,
     // but it seems that this behaviour is not part of the standard)
     childIterators.second = dipoles().begin();
     childIterators.first = --dipoles().end();
     
     return dipoles().end();
 
   }
 
   if (!DipolePartonSplitter::colourConnected(children.second.leftParticle(),children.second.rightParticle())) {
 
     if ( !was_circular && !ggSingleDipole ) {
       *emittingDipole = children.first;
       childIterators.first = emittingDipole;
       assert(emittingDipole != --dipoles().end());
       childIterators.second = std::next(emittingDipole);
       return std::next(emittingDipole);
     }
 
     *emittingDipole = children.first;
 
     if ( ggSingleDipole ) {
       ggSingleDipole = false;
       Dipole miss;
       miss.leftParticle(children.second.rightParticle());
       miss.rightParticle(children.first.leftParticle());
       miss.leftScale(children.second.rightScale());
       miss.rightScale(children.first.leftScale());
       miss.leftPDF(children.second.rightPDF());
       miss.rightPDF(children.first.leftPDF());
       miss.leftFraction(children.second.rightFraction());
       miss.rightFraction(children.first.leftFraction());
       miss.leftDecaying(dipoles().back().rightDecaying());
       miss.rightDecaying(dipoles().front().leftDecaying());
       miss.update();
       dipoles().push_front(miss);
       childIterators.first = dipoles().begin();
       childIterators.second = std::prev(dipoles().end());
       return dipoles().end();
     }
 
     childIterators.first = emittingDipole;
     if ( emittingDipole == --dipoles().end() )
       childIterators.second = dipoles().begin();
     else
       childIterators.second = std::next(emittingDipole);
 
     if ( emittingDipole == --dipoles().end() )
       return dipoles().end();
 
     dipoles().splice(dipoles().begin(),dipoles(),std::next(emittingDipole),dipoles().end());
 
     // explicitly fix iterators in case the splice implementation
     // at hand does invalidate iterators (the SGI docu says, it doesn't,
     // but it seems that this behaviour is not part of the standard)
     childIterators.first = dipoles().begin();
     childIterators.second = --dipoles().end();
     
     return dipoles().end();
 
   }
 
   return dipoles().end();  
 
 }
 
 void DipoleChain::updateDipole(list<Dipole>::iterator dip) {
 
   dip->update();
 
   if (hasLeftNeighbour(dip)) {
 
     list<Dipole>::iterator theLeftNeighbour =
       leftNeighbourIterator(dip);
 
     theLeftNeighbour->rightParticle(dip->leftParticle());
     theLeftNeighbour->rightPDF(dip->leftPDF());
     theLeftNeighbour->rightFraction(dip->leftFraction());
     theLeftNeighbour->rightDecaying(dip->leftDecaying());
 
     theLeftNeighbour->update();
 
   }
 
   if (hasRightNeighbour(dip)) {
 
     list<Dipole>::iterator theRightNeighbour =
       rightNeighbourIterator(dip);
 
     theRightNeighbour->leftParticle(dip->rightParticle());
     theRightNeighbour->leftPDF(dip->rightPDF());
     theRightNeighbour->leftFraction(dip->rightFraction());
     theRightNeighbour->leftDecaying(dip->rightDecaying());
 
     theRightNeighbour->update();
 
   }
 
 }
 
 void DipoleChain::print(ostream& os) const {
 
   os << "--- DipoleChain ----------------------------------------------------------------\n";
 
   if ( theDipoles.empty() ) {
     os << "  ***  This DipoleChain is empty.  ***\n";
   } else {
 
     os << " " << (!circular() ? "non-" : "") << "circular with "
        << theDipoles.size() << " dipoles\n";
 
     for (list<Dipole>::const_iterator dit = theDipoles.begin();
 	 dit != theDipoles.end(); ++dit) {
       os << (*dit);
     }
 
   }
 
   os << "--------------------------------------------------------------------------------\n";
 
   os << flush;
 
 }
diff --git a/Shower/Dipole/Base/DipoleChain.h b/Shower/Dipole/Base/DipoleChain.h
--- a/Shower/Dipole/Base/DipoleChain.h
+++ b/Shower/Dipole/Base/DipoleChain.h
@@ -1,158 +1,153 @@
 // -*- C++ -*-
 //
 // DipoleChain.h is a part of Herwig - A multi-purpose Monte Carlo event generator
 // Copyright (C) 2002-2017 The Herwig Collaboration
 //
 // Herwig is licenced under version 3 of the GPL, see COPYING for details.
 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
 //
 #ifndef HERWIG_DipoleChain_H
 #define HERWIG_DipoleChain_H
 //
 // This is the declaration of the DipoleChain class.
 //
 
 #include "Dipole.h"
 
 namespace Herwig {
 
 using namespace ThePEG;
 
 /**
  * \ingroup DipoleShower
  * \author Simon Platzer
  *
  * \brief The DipoleChain class is used by the dipole shower to
  * represent a chain of dipoles.
  *
  */
 class DipoleChain {
 
 public:
 
   /**
    * Default constructor
    */
   DipoleChain();
 
   /**
    * Return true, if this chain is circular.
    */
   bool circular () const;
 
   /*
    * Return true, if the dipole referred to
    * has a left neighbour
    */
   bool hasLeftNeighbour(list<Dipole>::const_iterator dc) const;
 
   /*
    * Return a reference to the left neighbour,
    * if existing
    */
   Dipole& leftNeighbour(list<Dipole>::iterator dc);
 
   /*
    * Return a const reference to the left neighbour,
    * if existing
    */
   const Dipole& leftNeighbour(list<Dipole>::const_iterator dc) const;
 
   /**
    * Return an iterator to the left neighbour
    */
   list<Dipole>::iterator leftNeighbourIterator(list<Dipole>::iterator dc);
 
   /*
    * Return true, if the dipole referred to
    * has a right neighbour
    */
   bool hasRightNeighbour (list<Dipole>::const_iterator dc) const;
 
   /*
    * Return a reference to the right neighbour,
    * if existing
    */
   Dipole& rightNeighbour (list<Dipole>::iterator dc);
 
   /*
    * Return a const reference to the right neighbour,
    * if existing
    */
   const Dipole& rightNeighbour (list<Dipole>::const_iterator dc) const;
 
   /**
    * Return an iterator to the right neighbour
    */
   list<Dipole>::iterator rightNeighbourIterator(list<Dipole>::iterator dc);
 
 public:
 
   /**
    * Access the dipole list
    */
   list<Dipole>& dipoles() { return theDipoles; }
 
   /**
    * Return the dipole list
    */
   const list<Dipole>& dipoles() const { return theDipoles; }
 
   /**
    * Check for gg single dipole
    */
   void check();
 
-  /**
-   * Rearrange the dipole chain (arXiv:1801.06113).
-   */
-  void rearrange(int dipmax,int diplong);
-
 public:
 
   /*
    * Insert the given splitting; if this contains a chain-breakup emission and
    * the chain is circular, reshuffle the chain to make it non-circular; if it is
    * already non-circular return the iterator starting the new chain. If no
    * splitting is needed return the end iterator of the dipole list.
    * Set the iterators pointing to the children dipoles.
    */
   list<Dipole>::iterator insertSplitting(list<Dipole>::iterator emittingDipole,
 					 pair<Dipole,Dipole> children,
 					 pair<list<Dipole>::iterator,list<Dipole>::iterator>& childIterators);
 
   /**
    * Indicate a change in the given dipole.
    */
   void updateDipole(list<Dipole>::iterator dip);
 
 public:
 
   /**
    * Put information to ostream
    */
   void print(ostream&) const;
 
 private:
 
   /**
    * The dipoles contained in this chain
    */
   list<Dipole> theDipoles;
 
   /**
    * Switch on special treatment for
    * gg single dipole
    */
   bool ggSingleDipole;
 
 };
 
 inline ostream& operator << (ostream& os, const DipoleChain& di) {
   di.print(os);
   return os;
 }
 
 }
 
 #endif /* HERWIG_DipoleChain_H */
diff --git a/Shower/Dipole/Colorea/Colorea.cc b/Shower/Dipole/Colorea/Colorea.cc
deleted file mode 100644
--- a/Shower/Dipole/Colorea/Colorea.cc
+++ /dev/null
@@ -1,724 +0,0 @@
-  // -*- C++ -*-
-  //
-  // Colorea.cc is a part of Herwig - A multi-purpose Monte Carlo event generator
-  // Copyright (C) 2002-2017 The Herwig Collaboration
-  //
-  // Herwig is licenced under version 3 of the GPL, see COPYING for details.
-  // Please respect the MCnet academic guidelines, see GUIDELINES for details.
-  //
-  //
-  // This is the implementation of the non-inlined, non-templated member
-  // functions of the Colorea class.
-  //
-
-#include "Colorea.h"
-#include "eeuugg.h"
-#include "eeuuggg.h"
-#include "eeuugggg.h"
-#include "Herwig/Shower/Dipole/Utility/DipolePartonSplitter.h"
-#include "Herwig/Shower/Dipole/Base/DipoleChain.h"
-#include "Herwig/Shower/Dipole/Base/Dipole.h"
-
-
-#include <iterator>
-
-using namespace Herwig;
-
-Colorea::Colorea(){}
-
-list<Dipole>& Colorea::dipoles() { return theChain->dipoles(); }
-
-void Colorea::rearrange( int dipmax , int diplong ){
-  
-  assert( dipmax >= diplong );
-    // if there are only 2 dipoles in the chain
-    //there is nothing to do for now.
-  if( dipoles().size() < 3 )return;
-  
-  if( dipoles().size() == 3 ){
-      // get the 3 dipoles:
-    auto dipi=dipoles().begin();
-    auto dipj=dipoles().begin();dipj++;
-    auto dipk=dipoles().begin();dipk++;dipk++;
-    rearrange3(dipi,dipj,dipk);
-    
-    if( theChain->circular () ){
-        // if the chain is circular,
-        // we need to check also the
-        // connected ends.
-      rearrange3(dipj,dipk,dipi);
-      rearrange3(dipk,dipi,dipj);
-    }
-    return;
-  }
-  if( dipoles().size() == 4 && dipmax >= 4 ){
-      // get the 4 dipoles
-    auto dipi=dipoles().begin();
-    auto dipj=dipoles().begin();dipj++;
-    auto dipk=dipoles().begin();dipk++;dipk++;
-    auto dipl=dipoles().begin();dipl++;dipl++;dipl++;
-    rearrange4(dipi,dipj,dipk,dipl);
-    return;
-  }
-  if( dipoles().size() == 5 && dipmax >= 5 ){
-      // get the 5 dipoles
-    auto dipi=dipoles().begin();
-    auto dipj=dipoles().begin();dipj++;
-    auto dipk=dipoles().begin();dipk++;dipk++;
-    auto dipl=dipoles().begin();dipl++;dipl++;dipl++;
-    auto dipm=dipoles().begin();dipm++;dipm++;dipm++;dipm++;
-    rearrange5(dipi,dipj,dipk,dipl,dipm);
-    return;
-  }
-    // if the chain is longer than dipmax
-    // go though the chain with diplong dipoles.
-  rearrangeLong( diplong );
-  return;
-  
-}
-
-void Colorea::rearrangeLong( int diplong ){
-  if ( diplong == 3 ){
-      // get the 3 dipoles:
-    auto dipi=dipoles().begin();
-    auto dipj=dipoles().begin();dipj++;
-    auto dipk=dipoles().begin();dipk++;dipk++;
-    while (dipk!=dipoles().end()) {
-      rearrange3(dipi,dipj,dipk);
-      dipi++;dipj++;dipk++;
-    }
-    if( theChain->circular() ){
-        // if the chain is circular,
-        // we need to check also the
-        // connected ends.
-      dipk=dipoles().begin(); // as dipk was end
-      rearrange3( dipi , dipj , dipk );
-        // rotate further.
-      dipi++;dipk++;
-      dipj=dipoles().begin();
-      rearrange3(dipi,dipj,dipk);
-    }
-  }else if (diplong ==4){
-      // get the 4 dipoles:
-    assert(!theChain->circular ());
-    auto dipi=dipoles().begin();
-    auto dipj=dipoles().begin();dipj++;
-    auto dipk=dipoles().begin();dipk++;dipk++;
-    auto dipl=dipoles().begin();dipl++;dipl++;dipl++;
-    while (dipl!=dipoles().end()) {
-      rearrange4(dipi,dipj,dipk,dipl);
-      dipi++;dipj++;dipk++;dipl++;
-    }
-  }else if (diplong ==5){
-      // get the 5 dipoles:
-    assert(!theChain->circular ());
-    auto dipi=dipoles().begin();
-    auto dipj=dipoles().begin();dipj++;
-    auto dipk=dipoles().begin();dipk++;dipk++;
-    auto dipl=dipoles().begin();dipl++;dipl++;dipl++;
-    auto dipm=dipoles().begin();dipm++;dipm++;dipm++;dipm++;
-    
-    while (dipm!=dipoles().end()) {
-      rearrange5(dipi,dipj,dipk,dipl,dipm);
-      dipi++;dipj++;dipk++;dipl++;dipm++;
-    }
-  }else{
-    assert(false);
-  }
-}
-
-
-
-void Colorea::rmcol(tColinePtr A,
-                    tColinePtr B,
-                    list<Dipole>::iterator & dip){
-  if(A==B){
-    auto AA=A->coloured();
-    for (auto col:AA){
-      if(col==dip->leftParticle()) A->removeColoured (col);
-      if(col==dip->rightParticle())A->removeColoured (col);
-    }
-    auto BB=A->antiColoured();
-    for (auto col:BB){
-      if(col==dip->leftParticle()) A->removeAntiColoured (col);
-      if(col==dip->rightParticle())A->removeAntiColoured (col);
-    }
-  }
-}
-
-
-
-void Colorea::removeColors(list<Dipole>::iterator dipi,
-                           list<Dipole>::iterator dipj,
-                           list<Dipole>::iterator dipk){
-  auto ilc = dipi->leftParticle()->colourInfo()->    colourLine();
-  auto irc = dipi->rightParticle()->colourInfo()->   colourLine();
-  auto ila = dipi->leftParticle()->colourInfo()->    antiColourLine();
-  auto ira = dipi->rightParticle()->colourInfo()->   antiColourLine();
-  auto jlc = dipj->leftParticle()->colourInfo()->    colourLine();
-  auto jrc = dipj->rightParticle()->colourInfo()->   colourLine();
-  auto jla = dipj->leftParticle()->colourInfo()->    antiColourLine();
-  auto jra = dipj->rightParticle()->colourInfo()->   antiColourLine();
-  auto klc = dipk->leftParticle()->colourInfo()->    colourLine();
-  auto krc = dipk->rightParticle()->colourInfo()->   colourLine();
-  auto kla = dipk->leftParticle()->colourInfo()->    antiColourLine();
-  auto kra = dipk->rightParticle()->colourInfo()->   antiColourLine();
-  
-  if( ilc && irc ) rmcol(ilc,irc,dipi);
-  if( ila && ira ) rmcol(ila,ira,dipi);
-  if( jlc && jrc ) rmcol(jlc,jrc,dipj);
-  if( jla && jra ) rmcol(jla,jra,dipj);
-  if( klc && krc ) rmcol(klc,krc,dipk);
-  if( kla && kra ) rmcol(kla,kra,dipk);
-  
-  return;
-}
-
-
-
-void Colorea::rearrange3_FF_FF_FF(list<Dipole>::iterator dipi,
-                                  list<Dipole>::iterator dipj,
-                                  list<Dipole>::iterator dipk){
-  produceSwapping( dipi, dipj, dipk,true);
-    // compared to IF of FI dipoles we do not need to repair colors as
-    // the swapping just modified the gluon momenta.
-}
-
-
-
-
-
-void Colorea::rearrange3_FF_FI_IF(list<Dipole>::iterator dipi,
-                                  list<Dipole>::iterator dipj,
-                                  list<Dipole>::iterator dipk){
-  auto ilc = dipi->leftParticle()->colourInfo()->    colourLine();
-  auto irc = dipi->rightParticle()->colourInfo()->   colourLine();
-  auto ila = dipi->leftParticle()->colourInfo()->    antiColourLine();
-  auto ira = dipi->rightParticle()->colourInfo()->   antiColourLine();
-  auto jlc = dipj->leftParticle()->colourInfo()->    colourLine();
-  auto jrc = dipj->rightParticle()->colourInfo()->   colourLine();
-  auto jla = dipj->leftParticle()->colourInfo()->    antiColourLine();
-  auto jra = dipj->rightParticle()->colourInfo()->   antiColourLine();
-  auto klc = dipk->leftParticle()->colourInfo()->    colourLine();
-  auto krc = dipk->rightParticle()->colourInfo()->   colourLine();
-  auto kla = dipk->leftParticle()->colourInfo()->    antiColourLine();
-  auto kra = dipk->rightParticle()->colourInfo()->   antiColourLine();
-  
-  bool didperm = produceSwapping( dipi, dipj, dipk,false);
-  
-  if (!didperm)return;
-  removeColors(dipi,dipj,dipk);
-  auto new1Line = new_ptr(ColourLine());
-  auto new2Line = new_ptr(ColourLine());
-  auto new3Line = new_ptr(ColourLine());
-    //Example:
-    // before
-    //ila (F)--irc (F) =g1(in,jl)= jla (F) -- jra(I)=g2(in,jr)=klc(I) -- krc(F)
-    // Should be after:
-    //ila (F) -- ira (I) =g2(in,jl)= jlc (I) -- jrc(F) =g1(out,jr)= kla(F) -- krc(F)
-  
-    //Then:
-    // FaFc_FaIa_IcFc    FFFIIF  aa -> FaIa_IcFc_FaFc
-    // FcFa_FcIc_IaFa    FFFIIF  cc -> FcIc_IaFa_FcFa
-    // FaFc_FaIa_IcIa    FFFIII  aa -> FaIa_IcFc_FaIa
-    // FcFa_FcIc_IaIc    FFFIII  cc -> FcIc_IaFa_FcIc
-    // IcFc_FaIa_IcFc    IFFIIF  aa -> IcIa_IcFc_FaFc
-    // IaFa_FcIc_IaFa    IFFIIF  cc -> IaIc_IaFa_FcFa
-    // IcFc_FaIa_IcIa    IFFIII  aa -> IcIa_IcFc_FaIa
-    // IaFa_FcIc_IaIc    IFFIII  cc -> IaIc_IaFa_FcIc
-    // end particles keep colors
-    // central all change color.
-    //
-  
-  if(ilc==irc){
-    new1Line->addColoured        (dipi->leftParticle());
-    new1Line->addAntiColoured    (dipi->rightParticle());}
-  if(ilc==ira){
-    new1Line->addColoured        (dipi->leftParticle());
-    new1Line->addColoured        (dipi->rightParticle());}
-  if(ila==irc){
-    new1Line->addAntiColoured    (dipi->leftParticle());
-    new1Line->addAntiColoured    (dipi->rightParticle());}
-  if(ila==ira){
-    new1Line->addAntiColoured    (dipi->leftParticle());
-    new1Line->addColoured        (dipi->rightParticle());}
-  
-  if(jlc==jrc){
-    new2Line->addAntiColoured    (dipj->leftParticle());
-    new2Line->addAntiColoured    (dipj->rightParticle());}
-  if(jlc==jra){
-    new2Line->addAntiColoured    (dipj->leftParticle());
-    new2Line->addColoured        (dipj->rightParticle());}
-  if(jla==jrc){
-    new2Line->addColoured        (dipj->leftParticle());
-    new2Line->addAntiColoured    (dipj->rightParticle());}
-  if(jla==jra){
-    new2Line->addColoured        (dipj->leftParticle());
-    new2Line->addColoured        (dipj->rightParticle());}
-  
-  if(klc==krc){
-    new3Line->addAntiColoured    (dipk->leftParticle());
-    new3Line->addColoured        (dipk->rightParticle());}
-  if(klc==kra){
-    new3Line->addAntiColoured    (dipk->leftParticle());
-    new3Line->addAntiColoured    (dipk->rightParticle());}
-  if(kla==krc){
-    new3Line->addColoured        (dipk->leftParticle());
-    new3Line->addColoured        (dipk->rightParticle());}
-  if(kla==kra){
-    new3Line->addColoured        (dipk->leftParticle());
-    new3Line->addAntiColoured    (dipk->rightParticle());}
-  
-}
-
-
-
-void Colorea::rearrange3(list<Dipole>::iterator dipi,
-                         list<Dipole>::iterator dipj,
-                         list<Dipole>::iterator dipk){
-  
-    // We only care about the cenral dipole.
-    // If central dipole is FI or IF we need to take care that
-    // momentum fractions and pdfs are treated correctly.
-    // If central dipole is FF we only swap momenta.
-    // Also the color lines of IF and FI swappings
-    // needs to be repaired.
-  
-  bool dipjisFF = dipj->leftFraction() == 1 && dipj->rightFraction() == 1;
-  bool dipjisIF = dipj->leftFraction() != 1 && dipj->rightFraction() == 1;
-  bool dipjisFI = dipj->leftFraction() == 1 && dipj->rightFraction() != 1;
-  bool dipjisII = dipj->leftFraction() != 1 && dipj->rightFraction() != 1;
-  
-    // if the possibly swaping dipole is II we
-    // do nothing as this should not be swapped!(?)
-  if(dipjisII) return;
-  
-  if(dipjisFF){
-      // possibly swap gluon momenta
-    rearrange3_FF_FF_FF(dipi,dipj,dipk);
-  }
-    // If central dipole is IF or FI -> keep end colors and swap central colors
-  else if( dipjisIF || dipjisFI ){
-    rearrange3_FF_FI_IF(dipi,dipj,dipk);
-  }
-  else {
-    assert(false);
-  }
-  
-  
-  return;
-  
-}
-
-  // local helper function to fill madgraph momenta.
-void fillMGmom(double * mom,Lorentz5Momentum lmom){
-  mom[0]=lmom.t()/GeV;
-  mom[1]=lmom.x()/GeV;
-  mom[2]=lmom.y()/GeV;
-  mom[3]=lmom.z()/GeV;
-}
-
-
-bool Colorea::produceSwapping(list<Dipole>::iterator dipi,
-                              list<Dipole>::iterator dipj,
-                              list<Dipole>::iterator dipk,bool FF){
-  
-    // get the process for all tripple dipole swappings.
-  static auto pro= eeuugg();
-  
-    // set mass of q qbar
-  pro.setMass( 3 , dipi->leftParticle()->momentum().m()/GeV);
-  pro.setMass( 4 , dipk->rightParticle()->momentum().m()/GeV);
-  
-    // If the central dipole dipj is not a FF-dipole the rearragment is
-    // not a simple swapping of gluon momenta. We need to take care that
-    // the 'new' dipoles get the correct fraction, pdf and index assignments.
-  if(!FF){
-      // for the interfacing with madgraph we need new momenta
-    double  mom0[4], mom1[4], mom2[4];
-    double  mom3[4], mom4[4], mom5[4];
-    
-      //q
-    double prefact=1.;//dipi->leftFraction()!=0.?-1.:1.; ??
-    auto PP=dipi->leftParticle()->momentum();
-    PP.setX(prefact*PP.x());
-    PP.setY(prefact*PP.y());
-    PP.setZ(prefact*PP.z());
-      // get the momentum sum for the triple dipole system.
-      // we need this for the incoming e+e-.
-    auto fmomsum=PP;
-      // lets rotate the system to be sure that momenta
-      // are not misinterpreted as incomming.
-    PP=PP.rotateX(0.3);
-    fillMGmom(mom2,PP);
-    
-    
-      //qbar
-    prefact=1.;//dipk->rightFraction()!=0.?-1.:1.;
-    PP=dipk->rightParticle()->momentum();
-    PP.setX(prefact*PP.x());
-    PP.setY(prefact*PP.y());
-    PP.setZ(prefact*PP.z());
-    fmomsum+=PP;
-    PP=PP.rotateX(0.3);
-    fillMGmom(mom3,PP);
-    
-      //g1
-    prefact=1.;//dipj->leftFraction()!=0.?-1.:1.;
-    PP=dipj->leftParticle()->momentum();
-    PP.setX(prefact*PP.x());
-    PP.setY(prefact*PP.y());
-    PP.setZ(prefact*PP.z());
-    fmomsum+=PP;
-    PP=PP.rotateX(0.3);
-    fillMGmom(mom4,PP);
-    
-      //g2
-    prefact=1.;//dipj->rightFraction()!=0.?-1.:1.;
-    PP=dipj->rightParticle()->momentum();
-    PP.setX(prefact*PP.x());
-    PP.setY(prefact*PP.y());
-    PP.setZ(prefact*PP.z());
-    fmomsum+=PP;
-    PP=PP.rotateX(0.3);
-    fillMGmom(mom5,PP);
-    
-      //  get the boost to to triple dipole restframe
-    auto boostto=fmomsum.findBoostToCM();
-      // center of mass energy.
-    auto CME=fmomsum.m2();
-      // construct incoming momenta.
-      // point incoming axis along arbitrary y axis;
-    Lorentz5Momentum in1=Lorentz5Momentum(ZERO,sqrt(CME)/2.,ZERO,sqrt(CME)/2.);
-    Lorentz5Momentum in2=Lorentz5Momentum(ZERO,-sqrt(CME)/2.,ZERO,sqrt(CME)/2.);
-    
-    in1=in1.boost(-boostto);
-    in1=in1.rotateX(0.3);
-    in2=in2.boost(-boostto);
-    in2=in2.rotateX(0.3);
-    fillMGmom(mom0,in1);
-    fillMGmom(mom1,in2);
-    
-    vector < double * >  momenta{{ mom0, mom1, mom2,
-                                   mom3, mom4, mom5}};
-
-      // calculate the permutation from madgraph process.
-    auto perm=pro.producePermutation(UseRandom::rnd(),momenta);
-      // for tripple dipoles there is only one possible permutation.
-    bool didperm=perm[0]!=5;
-    
-    if(!didperm) return didperm;
-    
-      // insert the original dipj fractions
-    vector<double > tmpfrac{{dipj->leftFraction(),dipj->rightFraction()}};
-      // insert the original dipj pdfs
-    vector< PDF > tmppdf;
-    tmppdf.push_back(dipj->leftPDF());
-    tmppdf.push_back(dipj->rightPDF());
-      // insert the original dipj particles
-    vector<PPtr> tmppart;
-    tmppart.push_back(dipj->leftParticle());
-    tmppart.push_back(dipj->rightParticle());
-      // make sure the dipj are gluons.
-    assert(dipj->leftParticle()->id()==21);
-    assert(dipj->rightParticle()->id()==21);
-    
-      // Now set the new or old particles in the dipole
-    dipi->rightParticle(tmppart[perm[0]-1-4]);
-    dipj->leftParticle (tmppart[perm[0]-1-4]);
-    dipj->rightParticle(tmppart[perm[1]-1-4]);
-    dipk->leftParticle(tmppart[perm[1]-1-4]);
-    
-    dipi->rightPDF(tmppdf[perm[0]-1-4]);
-    dipj->leftPDF (tmppdf[perm[0]-1-4]);
-    dipj->rightPDF(tmppdf[perm[1]-1-4]);
-    dipk->leftPDF (tmppdf[perm[1]-1-4]);
-    
-    dipi->rightFraction(tmpfrac[perm[0]-1-4]);
-    dipj->leftFraction (tmpfrac[perm[0]-1-4]);
-    dipj->rightFraction(tmpfrac[perm[1]-1-4]);
-    dipk->leftFraction (tmpfrac[perm[1]-1-4]);
-    
-    
-    auto firstindex =DipoleIndex(&(dipj->leftParticle()->data()),
-                                 &(dipj->rightParticle()->data()),
-                                 dipj->leftPDF(),
-                                 dipj->rightPDF());
-    auto secondindex =DipoleIndex(&(dipj->rightParticle()->data()),
-                                  &(dipj->leftParticle()->data()),
-                                  dipj->rightPDF(),
-                                  dipj->leftPDF());
-    dipj->setFirstIndex(firstindex);
-    dipj->setSecondIndex(secondindex);
-    
-    auto firstindex2 =DipoleIndex(&(dipi->leftParticle()->data()),
-                                  &(dipi->rightParticle()->data()),
-                                  dipi->leftPDF(),
-                                  dipi->rightPDF());
-    auto secondindex2 =DipoleIndex(&(dipi->rightParticle()->data()),
-                                   &(dipi->leftParticle()->data()),
-                                   dipi->rightPDF(),
-                                   dipi->leftPDF());
-    dipi->setFirstIndex(firstindex2);
-    dipi->setSecondIndex(secondindex2);
-    
-    auto firstindex3 =DipoleIndex(&(dipk->leftParticle()->data()),
-                                  &(dipk->rightParticle()->data()),
-                                  dipk->leftPDF(),
-                                  dipk->rightPDF());
-    auto secondindex3 =DipoleIndex(&(dipk->rightParticle()->data()),
-                                   &(dipk->leftParticle()->data()),
-                                   dipk->rightPDF(),
-                                   dipk->leftPDF());
-    dipk->setFirstIndex(firstindex3);
-    dipk->setSecondIndex(secondindex3);
-      // check a few things
-      //    assert(dipj->leftFraction()!=1.&&(dipj->leftPDF().pdf() )  || dipj->leftFraction()==1. &&!(dipj->leftPDF().pdf()));
-      //    assert(dipj->rightFraction()!=1.&&(dipj->rightPDF().pdf() )|| dipj->rightFraction()==1.&&!(dipj->rightPDF().pdf()));
-      //    assert(dipi->leftFraction()!=1.&&(dipi->leftPDF().pdf() )  || dipi->leftFraction()==1. &&!(dipi->leftPDF().pdf()));
-      //    assert(dipi->rightFraction()!=1.&&(dipi->rightPDF().pdf() )|| dipi->rightFraction()==1.&&!(dipi->rightPDF().pdf()));
-      //    assert(dipk->leftFraction()!=1.&&(dipk->leftPDF().pdf() )  || dipk->leftFraction()==1. &&!(dipk->leftPDF().pdf()));
-      //    assert(dipk->rightFraction()!=1.&&(dipk->rightPDF().pdf() )|| dipk->rightFraction()==1.&&!(dipk->rightPDF().pdf()));
-    
-    return didperm;
-  }else{
-      // if dipj is a FF dipole the color rearrangement is done by
-      // swapping the gluon momenta. Let's do this!
-    
-    double  mom0[4];
-    double  mom1[4];
-    double  mom2[4];
-    double  mom3[4];
-    double  mom4[4];
-    double  mom5[4];
-    vector<Lorentz5Momentum> tmpvec;
-    
-      //q
-    auto PP=dipi->leftParticle()->momentum();
-    auto fmomsum=PP;
-    PP=PP.rotateX(0.3);
-    fillMGmom(mom2,PP);
-    
-      //qbar
-    PP=dipk->rightParticle()->momentum();
-    fmomsum+=PP;
-    PP=PP.rotateX(0.3);
-    fillMGmom(mom3,PP);
-    
-      //g1
-    PP=dipj->leftParticle()->momentum();
-    fmomsum+=PP;
-    PP=PP.rotateX(0.3);
-    fillMGmom(mom4,PP);
-    
-      //g2
-    PP=dipj->rightParticle()->momentum();
-    fmomsum+=PP;
-    PP=PP.rotateX(0.3);
-    fillMGmom(mom5,PP);
-    
-      //  get the boost to to triple dipole restframe
-    auto boostto=fmomsum.findBoostToCM();
-    
-    auto CME=fmomsum.m2();
-      // point incoming axis along arbitrary y axis;
-    Lorentz5Momentum in1=Lorentz5Momentum(ZERO,sqrt(CME)/2.,ZERO,sqrt(CME)/2.);
-    Lorentz5Momentum in2=Lorentz5Momentum(ZERO,-sqrt(CME)/2.,ZERO,sqrt(CME)/2.);
-    
-    
-    
-    assert(dipj->leftParticle()->id()==21);
-    assert(dipj->rightParticle()->id()==21);
-    
-    in1=in1.boost(-boostto);
-    in1=in1.rotateX(0.3);
-    in2=in2.boost(-boostto);
-    in2=in2.rotateX(0.3);
-    fillMGmom(mom0,in1);
-    fillMGmom(mom1,in2);
-    
-    vector < double * >  momenta{{ mom0, mom1, mom2,
-                                   mom3, mom4, mom5}};
-    
-      // calculate the permutation from madgraph process.
-    auto perm=pro.producePermutation(UseRandom::rnd(),momenta);
-    
-    bool didperm=perm[0]!=5;
-    
-      // For final state we can just swap gluon momenta.
-    tmpvec.push_back(dipj->leftParticle()->momentum());  // g1
-    tmpvec.push_back(dipj->rightParticle()->momentum()); // g2
-    
-    dipj->leftParticle() ->setMomentum(tmpvec[perm[0]-1-4]);
-    dipj->rightParticle()->setMomentum(tmpvec[perm[1]-1-4]);
-    
-    return didperm;
-  }
-  
-}
-
-
-
-
-
-void Colorea::rearrange4(list<Dipole>::iterator dipi,
-                         list<Dipole>::iterator dipj,
-#ifndef NDEBUG
-                         list<Dipole>::iterator dipk,
-#else
-                         list<Dipole>::iterator ,
-#endif
-                         list<Dipole>::iterator dipl){
-  
-  assert(dipk->leftParticle()==dipj->rightParticle());
-  assert(dipl->leftParticle()==dipk->rightParticle());
-  
-  double  mom0[4], mom1[4], mom2[4], mom3[4];
-  double  mom6[4], mom4[4], mom5[4];
-  
-    // q       g1       g2      g3      qbar
-    // il -- ir=jl -- jr=kl -- kr=ll -- lr
-  
-    //q
-  fillMGmom(mom2,dipi->leftParticle()->momentum());
-    //qbar
-  fillMGmom(mom3,dipl->rightParticle()->momentum());
-    //g1
-  fillMGmom(mom4,dipj->leftParticle()->momentum());
-    //g2
-  fillMGmom(mom5,dipj->rightParticle()->momentum());
-    //g3
-  fillMGmom(mom6,dipl->leftParticle()->momentum());
-  
-    // q       g1       g2      g3      qbar
-    // il -- ir=jl -- jr=kl -- kr=ll -- lr
-  auto fmomsum=dipi->leftParticle()->momentum()+
-  dipj->leftParticle()->momentum()+
-  dipj->rightParticle()->momentum()+
-  dipl->leftParticle()->momentum()+
-  dipl->rightParticle()->momentum();
-  
-  auto boostto=fmomsum.findBoostToCM();
-  
-  auto CME=fmomsum.m2();
-    // point incoming axis along arbitrary y axis;
-  Lorentz5Momentum in1=Lorentz5Momentum(ZERO,sqrt(CME)/2.,ZERO,sqrt(CME)/2.);
-  Lorentz5Momentum in2=Lorentz5Momentum(ZERO,-sqrt(CME)/2.,ZERO,sqrt(CME)/2.);
-  
-  in1=in1.boost(-boostto);
-  in2=in2.boost(-boostto);
-  fillMGmom(mom0,in1);
-  fillMGmom(mom1,in2);
-  
-  vector < double * >  momenta{{ mom0, mom1,
-                                 mom2, mom3,
-                                 mom4, mom5, mom6}};
-  
-  static auto pro= eeuuggg();
-  
-    // set mass of q qbar
-  pro.setMass( 3 , dipi->leftParticle()->momentum().m()/GeV);
-  pro.setMass( 5 , dipl->rightParticle()->momentum().m()/GeV);
-  
-  
-  auto perm=pro.producePermutation(UseRandom::rnd(),momenta);
-  
-  vector<Lorentz5Momentum> tmpvec;
-  tmpvec.push_back(dipj->leftParticle()->momentum());  // g1
-  tmpvec.push_back(dipj->rightParticle()->momentum()); // g2
-  tmpvec.push_back(dipl->leftParticle()->momentum()); // g3
-  
-  dipj->leftParticle() ->setMomentum(tmpvec[perm[0]-1-4]);
-  dipj->rightParticle()->setMomentum(tmpvec[perm[1]-1-4]);
-  dipl->leftParticle() ->setMomentum(tmpvec[perm[2]-1-4]);
-  
-}
-
-
-
-
-
-void Colorea::rearrange5(list<Dipole>::iterator dipi,
-                         list<Dipole>::iterator dipj,
-#ifndef NDEBUG
-                         list<Dipole>::iterator dipk,
-#else
-                         list<Dipole>::iterator ,
-#endif
-                         list<Dipole>::iterator dipl,
-                         list<Dipole>::iterator dipm){
-  
-  assert(dipk->leftParticle()==dipj->rightParticle());
-  assert(dipl->leftParticle()==dipk->rightParticle());
-  
-  
-  double  mom0[4], mom1[4], mom2[4], mom3[4];
-  double  mom4[4], mom5[4], mom6[4], mom7[4];
-    // q       g1       g2      g3      g4      qbar
-    // il -- ir=jl -- jr=kl -- kr=ll -- lr=ml -- mr
-  
-    //q
-  fillMGmom(mom2,dipi->leftParticle()->momentum());
-    //qbar
-  fillMGmom(mom3,dipm->rightParticle()->momentum());
-    //g1
-  fillMGmom(mom4,dipj->leftParticle()->momentum());
-    //g2
-  fillMGmom(mom5,dipj->rightParticle()->momentum());
-    //g3
-  fillMGmom(mom6,dipl->leftParticle()->momentum());
-    //g4
-  fillMGmom(mom7,dipm->leftParticle()->momentum());
-  
-    // q       g1       g2      g3      g4      qbar
-    // il -- ir=jl -- jr=kl -- kr=ll -- lr=ml -- mr
-  auto fmomsum=dipi->leftParticle()->momentum()+
-  dipj->leftParticle()->momentum()+
-  dipj->rightParticle()->momentum()+
-  dipl->leftParticle()->momentum()+
-  dipl->rightParticle()->momentum()+
-  dipm->rightParticle()->momentum();
-  
-  auto boostto=fmomsum.findBoostToCM();
-  
-  auto CME=fmomsum.m2();
-    // point incoming axis along arbitrary y axis;
-  Lorentz5Momentum in1=Lorentz5Momentum(ZERO,sqrt(CME)/2.,ZERO,sqrt(CME)/2.);
-  Lorentz5Momentum in2=Lorentz5Momentum(ZERO,-sqrt(CME)/2.,ZERO,sqrt(CME)/2.);
-  
-  
-  in1=in1.boost(-boostto);
-  in2=in2.boost(-boostto);
-  fillMGmom(mom0,in1);
-  fillMGmom(mom1,in2);
-  
-  vector < double * >  momenta{{ mom0, mom1, mom2, mom3,
-                                 mom4, mom5, mom6, mom7}};
-  
-  static auto pro= eeuugggg();
-  
-    // set mass of q qbar
-  pro.setMass( 3 , dipi->leftParticle()->momentum().m()/GeV);
-  pro.setMass( 5 , dipl->rightParticle()->momentum().m()/GeV);
-  
-  auto perm=pro.producePermutation(UseRandom::rnd(),momenta);
-  
-  vector<Lorentz5Momentum> tmpvec;
-  tmpvec.push_back(dipj->leftParticle()->momentum());  // g1
-  tmpvec.push_back(dipj->rightParticle()->momentum()); // g2
-  tmpvec.push_back(dipl->leftParticle()->momentum()); // g3
-  tmpvec.push_back(dipm->leftParticle()->momentum()); // g4
-  
-    // set the gluon momenta with permuted momenta.
-  dipj->leftParticle() ->setMomentum(tmpvec[perm[0]-1-4]);
-  dipj->rightParticle()->setMomentum(tmpvec[perm[1]-1-4]);
-  dipl->leftParticle() ->setMomentum(tmpvec[perm[2]-1-4]);
-  dipm->leftParticle() ->setMomentum(tmpvec[perm[3]-1-4]);
-  
-}
-
-
-
-
-
-
diff --git a/Shower/Dipole/Colorea/Colorea.fh b/Shower/Dipole/Colorea/Colorea.fh
deleted file mode 100644
--- a/Shower/Dipole/Colorea/Colorea.fh
+++ /dev/null
@@ -1,21 +0,0 @@
-// -*- C++ -*-
-// This is the forward declaration of the Colorea class
-
-#ifndef HERWIG_Colorea_FH
-#define HERWIG_Colorea_FH
-
-#include "ThePEG/Config/ThePEG.h"
-#include "ThePEG/Config/Pointers.h"
-
-
-namespace Herwig {
-  
-class Colorea;
-using namespace ThePEG;
-  
-  ThePEG_DECLARE_POINTERS(Colorea , ColoreaPtr );
-  
-
-}
-
-#endif // HERWIG_Colorea_FH
diff --git a/Shower/Dipole/Colorea/Colorea.h b/Shower/Dipole/Colorea/Colorea.h
deleted file mode 100644
--- a/Shower/Dipole/Colorea/Colorea.h
+++ /dev/null
@@ -1,147 +0,0 @@
-// -*- C++ -*-
-//
-// Colorea.h is a part of Herwig - A multi-purpose Monte Carlo event generator
-// Copyright (C) 2002-2017 The Herwig Collaboration
-//
-// Herwig is licenced under version 3 of the GPL, see COPYING for details.
-// Please respect the MCnet academic guidelines, see GUIDELINES for details.
-//
-#ifndef HERWIG_Colorea_H
-#define HERWIG_Colorea_H
-//
-// This is the declaration of the Colorea class.
-//
-#include "Herwig/Shower/Dipole/Base/DipoleChain.fh"
-#include "Herwig/Shower/Dipole/Base/Dipole.h"
-
-namespace Herwig {
-
-using namespace ThePEG;
-
-/**
- * \ingroup DipoleShower
- * \author Johannes Bellm
- *
- * This class implemets the method described in arXiv:1801.06113.
- * and it's extension described in arXiv:180X.XXXXX.
- * It allows to calculate the probability to rearrange
- * dipole chains with simple matrix elements.
- *
- * The implementation currently allows:
- * - rearranging pure FF dipole chains with
- *   processes: eeuugg eeuuggg and eeuugggg
- * - IF or FI dipoles can be rearranged with eeuugg. 
- * - II should not be rearranged.
- * - masses of the q qbar particles are set.
- *
- */
-class Colorea {
-
-public:
-
-  /**
-   * Default constructor
-   */
-  Colorea();
-  
-  /**
-   * main function to rearrange the dipole chain.
-   * - dipmax: chains with dipmax are rearranged with matix elements including
-   *           dipmax dipoles:
-   *                  dipmax=3 -> eeuugg
-   *                  dipmax=4 -> eeuuggg
-   *                  dipmax=5 -> eeuugggg
-   *           if a chain contains more than dipmax dipoles, we treat the chain
-   *           as long.
-   * - diplong: this parameter allows to change the behaviour for Coloreas
-   *            that are longer than dipmax (long chains).
-   *            If diplong is 3 the chain is rearranged with eeuugg
-   *            matrix elements.
-   *            If diplong is 4 the chain is rearranged with eeuuggg
-   *            matrix elements. diplong > 4 is currently not implemented.
-   *            Note: We dont observe a difference between the diplong=3 or
-   *                  diplong=4 treatment.
-   */
-  void rearrange(int dipmax,int diplong);
-  
-  /**
-   * Set the chain to use in the rearrangement.
-   */
-  void setChain(Ptr<DipoleChain>::tptr ch){theChain=ch;};
-  
-   // Everything below is private. The rearranging is acting only on the current chain.
-  private:
-  /**
-   * Main function for rearranging tripple dipoles.
-   */
-  void rearrange3(list<Dipole>::iterator dipi,
-                  list<Dipole>::iterator dipj,
-                  list<Dipole>::iterator dipk);
-  
-  /**
-   * Function to rearrange triple dipoles in the all FF dipole case.
-   */
-  void rearrange3_FF_FF_FF(list<Dipole>::iterator dipi,
-                           list<Dipole>::iterator dipj,
-                           list<Dipole>::iterator dipk);
-  
-  /**
-   * Function to rearrange triple dipoles if dipj is FI dipole.
-   * This function is also used for IF.
-   */
-  void rearrange3_FF_FI_IF(list<Dipole>::iterator dipi,
-                           list<Dipole>::iterator dipj,
-                           list<Dipole>::iterator dipk);
-  /**
-   * Main function for rearranging 4 dipoles.
-   * This funtion currently only implements the case of 4 FF dipoles.
-   */
-  void rearrange4(list<Dipole>::iterator dipi,
-                  list<Dipole>::iterator dipj,
-                  list<Dipole>::iterator dipk,
-                  list<Dipole>::iterator dipl);
-  /**
-   * Main function for rearranging 5 dipoles.
-   * This funtion currently only implements the case of 5 FF dipoles.
-   */
-  void rearrange5(list<Dipole>::iterator dipi,
-                  list<Dipole>::iterator dipj,
-                  list<Dipole>::iterator dipk,
-                  list<Dipole>::iterator dipl,
-                  list<Dipole>::iterator dipm);
-  /**
-   * Rearrange long chains.
-   */
-  void rearrangeLong(int diplong);
-  
-  /**
-   * Produce the possible swapping or the dipj gluons.
-   */
-  bool produceSwapping(list<Dipole>::iterator dipi,
-                       list<Dipole>::iterator dipj,
-                       list<Dipole>::iterator dipk,bool FF);
-
-    // helper function to remove particles from color line if color line connects them.
-  void rmcol(tColinePtr A,tColinePtr B, list<Dipole>::iterator & dip);
-
-    // remove connecting color lines from these dipoles
-  void removeColors(list<Dipole>::iterator dipi,
-                    list<Dipole>::iterator dipj,
-                    list<Dipole>::iterator dipk);
-
-    // Access the dipoles of the current chain.
-  list<Dipole>& dipoles(); 
-
-  private:
-    // the current chain to rearrange.
-  Ptr<DipoleChain>::tptr theChain;
-
-};
-
-inline ostream& operator << (ostream& os, const Colorea& ) {
-  return os;
-}
-
-}
-
-#endif /* HERWIG_Colorea_H */
diff --git a/Shower/Dipole/Colorea/HelAmps_sm.cc b/Shower/Dipole/Colorea/HelAmps_sm.cc
deleted file mode 100644
--- a/Shower/Dipole/Colorea/HelAmps_sm.cc
+++ /dev/null
@@ -1,1024 +0,0 @@
-//==========================================================================
-// This file has been automatically generated for C++ Standalone by
-// MadGraph5_aMC@NLO v. 2.5.4, 2017-03-28
-// By the MadGraph5_aMC@NLO Development Team
-// Visit launchpad.net/madgraph5 and amcatnlo.web.cern.ch
-//==========================================================================
-
-#include "HelAmps_sm.h"
-#include <complex> 
-#include <cmath> 
-#include <iostream> 
-#include <cstdlib> 
-using namespace std; 
-
-namespace MG5_sm_COLOREA
-{
-
-void ixxxxx(double p[4], double fmass, int nhel, int nsf, complex<double> fi[6])
-{
-  complex<double> chi[2]; 
-  double sf[2], sfomega[2], omega[2], pp, pp3, sqp0p3, sqm[2]; 
-  int ip, im, nh; 
-  fi[0] = complex<double> (-p[0] * nsf, -p[3] * nsf); 
-  fi[1] = complex<double> (-p[1] * nsf, -p[2] * nsf); 
-  nh = nhel * nsf; 
-  if (fmass != 0.0)
-  {
-    pp = min(p[0], sqrt(p[1] * p[1] + p[2] * p[2] + p[3] * p[3])); 
-    if (pp == 0.0)
-    {
-      sqm[0] = sqrt(std::abs(fmass)); 
-      sqm[1] = Sgn(sqm[0], fmass); 
-      ip = (1 + nh)/2; 
-      im = (1 - nh)/2; 
-      fi[2] = ip * sqm[ip]; 
-      fi[3] = im * nsf * sqm[ip]; 
-      fi[4] = ip * nsf * sqm[im]; 
-      fi[5] = im * sqm[im]; 
-    }
-    else
-    {
-      sf[0] = (1 + nsf + (1 - nsf) * nh) * 0.5; 
-      sf[1] = (1 + nsf - (1 - nsf) * nh) * 0.5; 
-      omega[0] = sqrt(p[0] + pp); 
-      omega[1] = fmass/omega[0]; 
-      ip = (1 + nh)/2; 
-      im = (1 - nh)/2; 
-      sfomega[0] = sf[0] * omega[ip]; 
-      sfomega[1] = sf[1] * omega[im]; 
-      pp3 = max(pp + p[3], 0.0); 
-      chi[0] = complex<double> (sqrt(pp3 * 0.5/pp), 0); 
-      if (pp3 == 0.0)
-      {
-        chi[1] = complex<double> (-nh, 0); 
-      }
-      else
-      {
-        chi[1] = complex<double> (nh * p[1], p[2])/sqrt(2.0 * pp * pp3); 
-      }
-      fi[2] = sfomega[0] * chi[im]; 
-      fi[3] = sfomega[0] * chi[ip]; 
-      fi[4] = sfomega[1] * chi[im]; 
-      fi[5] = sfomega[1] * chi[ip]; 
-    }
-  }
-  else
-  {
-    if (p[1] == 0.0 and p[2] == 0.0 and p[3] < 0.0)
-    {
-      sqp0p3 = 0.0; 
-    }
-    else
-    {
-      sqp0p3 = sqrt(max(p[0] + p[3], 0.0)) * nsf; 
-    }
-    chi[0] = complex<double> (sqp0p3, 0.0); 
-    if (sqp0p3 == 0.0)
-    {
-      chi[1] = complex<double> (-nhel * sqrt(2.0 * p[0]), 0.0); 
-    }
-    else
-    {
-      chi[1] = complex<double> (nh * p[1], p[2])/sqp0p3; 
-    }
-    if (nh == 1)
-    {
-      fi[2] = complex<double> (0.0, 0.0); 
-      fi[3] = complex<double> (0.0, 0.0); 
-      fi[4] = chi[0]; 
-      fi[5] = chi[1]; 
-    }
-    else
-    {
-      fi[2] = chi[1]; 
-      fi[3] = chi[0]; 
-      fi[4] = complex<double> (0.0, 0.0); 
-      fi[5] = complex<double> (0.0, 0.0); 
-    }
-  }
-  return; 
-}
-
-
-double Sgn(double a, double b)
-{
-  return (b < 0)? - abs(a):abs(a); 
-}
-
-
-void txxxxx(double p[4], double tmass, int nhel, int nst, complex<double>
-    tc[18])
-{
-  complex<double> ft[6][4], ep[4], em[4], e0[4]; 
-  double pt, pt2, pp, pzpt, emp, sqh, sqs; 
-  int i, j; 
-
-  sqh = sqrt(0.5); 
-  sqs = sqrt(0.5/3); 
-
-  pt2 = p[1] * p[1] + p[2] * p[2]; 
-  pp = min(p[0], sqrt(pt2 + p[3] * p[3])); 
-  pt = min(pp, sqrt(pt2)); 
-
-  ft[4][0] = complex<double> (p[0] * nst, p[3] * nst); 
-  ft[5][0] = complex<double> (p[1] * nst, p[2] * nst); 
-
-  // construct eps+
-  if(nhel >= 0)
-  {
-    if(pp == 0)
-    {
-      ep[0] = complex<double> (0, 0); 
-      ep[1] = complex<double> (-sqh, 0); 
-      ep[2] = complex<double> (0, nst * sqh); 
-      ep[3] = complex<double> (0, 0); 
-    }
-    else
-    {
-      ep[0] = complex<double> (0, 0); 
-      ep[3] = complex<double> (pt/pp * sqh, 0); 
-
-      if(pt != 0)
-      {
-        pzpt = p[3]/(pp * pt) * sqh; 
-        ep[1] = complex<double> (-p[1] * pzpt, -nst * p[2]/pt * sqh); 
-        ep[2] = complex<double> (-p[2] * pzpt, nst * p[1]/pt * sqh); 
-      }
-      else
-      {
-        ep[1] = complex<double> (-sqh, 0); 
-        ep[2] = complex<double> (0, nst * Sgn(sqh, p[3])); 
-      }
-    }
-
-  }
-
-  // construct eps-
-  if(nhel <= 0)
-  {
-    if(pp == 0)
-    {
-      em[0] = complex<double> (0, 0); 
-      em[1] = complex<double> (sqh, 0); 
-      em[2] = complex<double> (0, nst * sqh); 
-      em[3] = complex<double> (0, 0); 
-    }
-    else
-    {
-      em[0] = complex<double> (0, 0); 
-      em[3] = complex<double> (-pt/pp * sqh, 0); 
-
-      if(pt != 0)
-      {
-        pzpt = -p[3]/(pp * pt) * sqh; 
-        em[1] = complex<double> (-p[1] * pzpt, -nst * p[2]/pt * sqh); 
-        em[2] = complex<double> (-p[2] * pzpt, nst * p[1]/pt * sqh); 
-      }
-      else
-      {
-        em[1] = complex<double> (sqh, 0); 
-        em[2] = complex<double> (0, nst * Sgn(sqh, p[3])); 
-      }
-    }
-  }
-
-  // construct eps0
-  if(std::labs(nhel) <= 1)
-  {
-    if(pp == 0)
-    {
-      e0[0] = complex<double> (0, 0); 
-      e0[1] = complex<double> (0, 0); 
-      e0[2] = complex<double> (0, 0); 
-      e0[3] = complex<double> (1, 0); 
-    }
-    else
-    {
-      emp = p[0]/(tmass * pp); 
-      e0[0] = complex<double> (pp/tmass, 0); 
-      e0[3] = complex<double> (p[3] * emp, 0); 
-
-      if(pt != 0)
-      {
-        e0[1] = complex<double> (p[1] * emp, 0); 
-        e0[2] = complex<double> (p[2] * emp, 0); 
-      }
-      else
-      {
-        e0[1] = complex<double> (0, 0); 
-        e0[2] = complex<double> (0, 0); 
-      }
-    }
-  }
-
-  if(nhel == 2)
-  {
-    for(j = 0; j < 4; j++ )
-    {
-      for(i = 0; i < 4; i++ )
-        ft[i][j] = ep[i] * ep[j]; 
-    }
-  }
-  else if(nhel == -2)
-  {
-    for(j = 0; j < 4; j++ )
-    {
-      for(i = 0; i < 4; i++ )
-        ft[i][j] = em[i] * em[j]; 
-    }
-  }
-  else if(tmass == 0)
-  {
-    for(j = 0; j < 4; j++ )
-    {
-      for(i = 0; i < 4; i++ )
-        ft[i][j] = 0; 
-    }
-  }
-  else if(tmass != 0)
-  {
-    if(nhel == 1)
-    {
-      for(j = 0; j < 4; j++ )
-      {
-        for(i = 0; i < 4; i++ )
-          ft[i][j] = sqh * (ep[i] * e0[j] + e0[i] * ep[j]); 
-      }
-    }
-    else if(nhel == 0)
-    {
-      for(j = 0; j < 4; j++ )
-      {
-        for(i = 0; i < 4; i++ )
-          ft[i][j] = sqs * (ep[i] * em[j] + em[i] * ep[j]
-         + 2.0 * e0[i] * e0[j]); 
-      }
-    }
-    else if(nhel == -1)
-    {
-      for(j = 0; j < 4; j++ )
-      {
-        for(i = 0; i < 4; i++ )
-          ft[i][j] = sqh * (em[i] * e0[j] + e0[i] * em[j]); 
-      }
-    }
-    else
-    {
-      std::cerr <<  "Invalid helicity in txxxxx.\n"; 
-      std::exit(1); 
-    }
-  }
-
-  tc[0] = ft[4][0]; 
-  tc[1] = ft[5][0]; 
-
-  for(j = 0; j < 4; j++ )
-  {
-    for(i = 0; i < 4; i++ )
-      tc[j * 4 + i + 2] = ft[j][i]; 
-  }
-}
-
-void vxxxxx(double p[4], double vmass, int nhel, int nsv, complex<double> vc[6])
-{
-  double hel, hel0, pt, pt2, pp, pzpt, emp, sqh; 
-  int nsvahl; 
-  sqh = sqrt(0.5); 
-  hel = double(nhel); 
-  nsvahl = nsv * std::abs(hel); 
-  pt2 = (p[1] * p[1]) + (p[2] * p[2]); 
-  pp = min(p[0], sqrt(pt2 + (p[3] * p[3]))); 
-  pt = min(pp, sqrt(pt2)); 
-  vc[0] = complex<double> (p[0] * nsv, p[3] * nsv); 
-  vc[1] = complex<double> (p[1] * nsv, p[2] * nsv); 
-  if (vmass != 0.0)
-  {
-    hel0 = 1.0 - std::abs(hel); 
-    if(pp == 0.0)
-    {
-      vc[2] = complex<double> (0.0, 0.0); 
-      vc[3] = complex<double> (-hel * sqh, 0.0); 
-      vc[4] = complex<double> (0.0, nsvahl * sqh); 
-      vc[5] = complex<double> (hel0, 0.0); 
-    }
-    else
-    {
-      emp = p[0]/(vmass * pp); 
-      vc[2] = complex<double> (hel0 * pp/vmass, 0.0); 
-      vc[5] = complex<double> (hel0 * p[3] * emp + hel * pt/pp * sqh, 0.0); 
-      if (pt != 0.0)
-      {
-        pzpt = p[3]/(pp * pt) * sqh * hel; 
-        vc[3] = complex<double> (hel0 * p[1] * emp - p[1] * pzpt, -nsvahl *
-            p[2]/pt * sqh);
-        vc[4] = complex<double> (hel0 * p[2] * emp - p[2] * pzpt, nsvahl *
-            p[1]/pt * sqh);
-      }
-      else
-      {
-        vc[3] = complex<double> (-hel * sqh, 0.0); 
-        vc[4] = complex<double> (0.0, nsvahl * Sgn(sqh, p[3])); 
-      }
-    }
-  }
-  else
-  {
-    pp = p[0]; 
-    pt = sqrt((p[1] * p[1]) + (p[2] * p[2])); 
-    vc[2] = complex<double> (0.0, 0.0); 
-    vc[5] = complex<double> (hel * pt/pp * sqh, 0.0); 
-    if (pt != 0.0)
-    {
-      pzpt = p[3]/(pp * pt) * sqh * hel; 
-      vc[3] = complex<double> (-p[1] * pzpt, -nsv * p[2]/pt * sqh); 
-      vc[4] = complex<double> (-p[2] * pzpt, nsv * p[1]/pt * sqh); 
-    }
-    else
-    {
-      vc[3] = complex<double> (-hel * sqh, 0.0); 
-      vc[4] = complex<double> (0.0, nsv * Sgn(sqh, p[3])); 
-    }
-  }
-  return; 
-}
-
-void sxxxxx(double p[4], int nss, complex<double> sc[3])
-{
-  sc[2] = complex<double> (1.00, 0.00); 
-  sc[0] = complex<double> (p[0] * nss, p[3] * nss); 
-  sc[1] = complex<double> (p[1] * nss, p[2] * nss); 
-  return; 
-}
-
-void oxxxxx(double p[4], double fmass, int nhel, int nsf, complex<double> fo[6])
-{
-  complex<double> chi[2]; 
-  double sf[2], sfomeg[2], omega[2], pp, pp3, sqp0p3, sqm[2]; 
-  int nh, ip, im; 
-  fo[0] = complex<double> (p[0] * nsf, p[3] * nsf); 
-  fo[1] = complex<double> (p[1] * nsf, p[2] * nsf); 
-  nh = nhel * nsf; 
-  if (fmass != 0.000)
-  {
-    pp = min(p[0], sqrt((p[1] * p[1]) + (p[2] * p[2]) + (p[3] * p[3]))); 
-    if (pp == 0.000)
-    {
-      sqm[0] = sqrt(std::abs(fmass)); 
-      sqm[1] = Sgn(sqm[0], fmass); 
-      ip = -((1 - nh)/2) * nhel; 
-      im = (1 + nh)/2 * nhel; 
-      fo[2] = im * sqm[std::abs(ip)]; 
-      fo[3] = ip * nsf * sqm[std::abs(ip)]; 
-      fo[4] = im * nsf * sqm[std::abs(im)]; 
-      fo[5] = ip * sqm[std::abs(im)]; 
-    }
-    else
-    {
-      pp = min(p[0], sqrt((p[1] * p[1]) + (p[2] * p[2]) + (p[3] * p[3]))); 
-      sf[0] = double(1 + nsf + (1 - nsf) * nh) * 0.5; 
-      sf[1] = double(1 + nsf - (1 - nsf) * nh) * 0.5; 
-      omega[0] = sqrt(p[0] + pp); 
-      omega[1] = fmass/omega[0]; 
-      ip = (1 + nh)/2; 
-      im = (1 - nh)/2; 
-      sfomeg[0] = sf[0] * omega[ip]; 
-      sfomeg[1] = sf[1] * omega[im]; 
-      pp3 = max(pp + p[3], 0.00); 
-      chi[0] = complex<double> (sqrt(pp3 * 0.5/pp), 0.00); 
-      if (pp3 == 0.00)
-      {
-        chi[1] = complex<double> (-nh, 0.00); 
-      }
-      else
-      {
-        chi[1] = complex<double> (nh * p[1], -p[2])/sqrt(2.0 * pp * pp3); 
-      }
-      fo[2] = sfomeg[1] * chi[im]; 
-      fo[3] = sfomeg[1] * chi[ip]; 
-      fo[4] = sfomeg[0] * chi[im]; 
-      fo[5] = sfomeg[0] * chi[ip]; 
-    }
-  }
-  else
-  {
-    if((p[1] == 0.00) and (p[2] == 0.00) and (p[3] < 0.00))
-    {
-      sqp0p3 = 0.00; 
-    }
-    else
-    {
-      sqp0p3 = sqrt(max(p[0] + p[3], 0.00)) * nsf; 
-    }
-    chi[0] = complex<double> (sqp0p3, 0.00); 
-    if(sqp0p3 == 0.000)
-    {
-      chi[1] = complex<double> (-nhel, 0.00) * sqrt(2.0 * p[0]); 
-    }
-    else
-    {
-      chi[1] = complex<double> (nh * p[1], -p[2])/sqp0p3; 
-    }
-    if(nh == 1)
-    {
-      fo[2] = chi[0]; 
-      fo[3] = chi[1]; 
-      fo[4] = complex<double> (0.00, 0.00); 
-      fo[5] = complex<double> (0.00, 0.00); 
-    }
-    else
-    {
-      fo[2] = complex<double> (0.00, 0.00); 
-      fo[3] = complex<double> (0.00, 0.00); 
-      fo[4] = chi[1]; 
-      fo[5] = chi[0]; 
-    }
-  }
-  return; 
-}
-
-void FFV1P0_3(std::complex<double> F1[], std::complex<double> F2[],
-    std::complex<double> COUP, double M3, double W3, std::complex<double> V3[])
-{
-  static std::complex<double> cI = std::complex<double> (0., 1.); 
-  double P3[4]; 
-  std::complex<double> denom; 
-  V3[0] = +F1[0] + F2[0]; 
-  V3[1] = +F1[1] + F2[1]; 
-  P3[0] = -V3[0].real(); 
-  P3[1] = -V3[1].real(); 
-  P3[2] = -V3[1].imag(); 
-  P3[3] = -V3[0].imag(); 
-  denom = COUP/((P3[0] * P3[0]) - (P3[1] * P3[1]) - (P3[2] * P3[2]) - (P3[3] *
-      P3[3]) - M3 * (M3 - cI * W3));
-  V3[2] = denom * (-cI) * (F1[2] * F2[4] + F1[3] * F2[5] + F1[4] * F2[2] +
-      F1[5] * F2[3]);
-  V3[3] = denom * (-cI) * (F1[4] * F2[3] + F1[5] * F2[2] - F1[2] * F2[5] -
-      F1[3] * F2[4]);
-  V3[4] = denom * (-cI) * (-cI * (F1[2] * F2[5] + F1[5] * F2[2]) + cI * (F1[3]
-      * F2[4] + F1[4] * F2[3]));
-  V3[5] = denom * (-cI) * (F1[3] * F2[5] + F1[4] * F2[2] - F1[2] * F2[4] -
-      F1[5] * F2[3]);
-}
-
-
-void FFV2_2(std::complex<double> F1[], std::complex<double> V3[],
-    std::complex<double> COUP, double M2, double W2, std::complex<double> F2[])
-{
-  static std::complex<double> cI = std::complex<double> (0., 1.); 
-  double P2[4]; 
-  std::complex<double> denom; 
-  F2[0] = +F1[0] + V3[0]; 
-  F2[1] = +F1[1] + V3[1]; 
-  P2[0] = -F2[0].real(); 
-  P2[1] = -F2[1].real(); 
-  P2[2] = -F2[1].imag(); 
-  P2[3] = -F2[0].imag(); 
-  denom = COUP/((P2[0] * P2[0]) - (P2[1] * P2[1]) - (P2[2] * P2[2]) - (P2[3] *
-      P2[3]) - M2 * (M2 - cI * W2));
-  F2[2] = denom * cI * (F1[2] * (P2[0] * (V3[2] + V3[5]) + (P2[1] * (-1.) *
-      (V3[3] + cI * (V3[4])) + (P2[2] * (+cI * (V3[3]) - V3[4]) - P2[3] *
-      (V3[2] + V3[5])))) + F1[3] * (P2[0] * (V3[3] - cI * (V3[4])) + (P2[1] *
-      (V3[5] - V3[2]) + (P2[2] * (-cI * (V3[5]) + cI * (V3[2])) + P2[3] * (+cI
-      * (V3[4]) - V3[3])))));
-  F2[3] = denom * cI * (F1[2] * (P2[0] * (V3[3] + cI * (V3[4])) + (P2[1] *
-      (-1.) * (V3[2] + V3[5]) + (P2[2] * (-1.) * (+cI * (V3[2] + V3[5])) +
-      P2[3] * (V3[3] + cI * (V3[4]))))) + F1[3] * (P2[0] * (V3[2] - V3[5]) +
-      (P2[1] * (+cI * (V3[4]) - V3[3]) + (P2[2] * (-1.) * (V3[4] + cI *
-      (V3[3])) + P2[3] * (V3[2] - V3[5])))));
-  F2[4] = denom * - cI * M2 * (F1[2] * (-1.) * (V3[2] + V3[5]) + F1[3] * (+cI *
-      (V3[4]) - V3[3]));
-  F2[5] = denom * cI * M2 * (F1[2] * (V3[3] + cI * (V3[4])) + F1[3] * (V3[2] -
-      V3[5]));
-}
-
-void FFV2_5_2(std::complex<double> F1[], std::complex<double> V3[],
-    std::complex<double> COUP1, std::complex<double> COUP2, double M2, double
-    W2, std::complex<double> F2[])
-{
-  std::complex<double> Ftmp[6];
-  int i; 
-  FFV2_2(F1, V3, COUP1, M2, W2, F2); 
-  FFV5_2(F1, V3, COUP2, M2, W2, Ftmp); 
-  i = 2; 
-  while (i < 6)
-  {
-    F2[i] = F2[i] + Ftmp[i]; 
-    i++; 
-  }
-}
-
-void FFV1_2(std::complex<double> F1[], std::complex<double> V3[],
-    std::complex<double> COUP, double M2, double W2, std::complex<double> F2[])
-{
-  static std::complex<double> cI = std::complex<double> (0., 1.); 
-  double P2[4]; 
-  std::complex<double> denom; 
-  F2[0] = +F1[0] + V3[0]; 
-  F2[1] = +F1[1] + V3[1]; 
-  P2[0] = -F2[0].real(); 
-  P2[1] = -F2[1].real(); 
-  P2[2] = -F2[1].imag(); 
-  P2[3] = -F2[0].imag(); 
-  denom = COUP/((P2[0] * P2[0]) - (P2[1] * P2[1]) - (P2[2] * P2[2]) - (P2[3] *
-      P2[3]) - M2 * (M2 - cI * W2));
-  F2[2] = denom * cI * (F1[2] * (P2[0] * (V3[2] + V3[5]) + (P2[1] * (-1.) *
-      (V3[3] + cI * (V3[4])) + (P2[2] * (+cI * (V3[3]) - V3[4]) - P2[3] *
-      (V3[2] + V3[5])))) + (F1[3] * (P2[0] * (V3[3] - cI * (V3[4])) + (P2[1] *
-      (V3[5] - V3[2]) + (P2[2] * (-cI * (V3[5]) + cI * (V3[2])) + P2[3] * (+cI
-      * (V3[4]) - V3[3])))) + M2 * (F1[4] * (V3[2] - V3[5]) + F1[5] * (+cI *
-      (V3[4]) - V3[3]))));
-  F2[3] = denom * (-cI) * (F1[2] * (P2[0] * (-1.) * (V3[3] + cI * (V3[4])) +
-      (P2[1] * (V3[2] + V3[5]) + (P2[2] * (+cI * (V3[2] + V3[5])) - P2[3] *
-      (V3[3] + cI * (V3[4]))))) + (F1[3] * (P2[0] * (V3[5] - V3[2]) + (P2[1] *
-      (V3[3] - cI * (V3[4])) + (P2[2] * (V3[4] + cI * (V3[3])) + P2[3] * (V3[5]
-      - V3[2])))) + M2 * (F1[4] * (V3[3] + cI * (V3[4])) - F1[5] * (V3[2] +
-      V3[5]))));
-  F2[4] = denom * (-cI) * (F1[4] * (P2[0] * (V3[5] - V3[2]) + (P2[1] * (V3[3] +
-      cI * (V3[4])) + (P2[2] * (V3[4] - cI * (V3[3])) + P2[3] * (V3[5] -
-      V3[2])))) + (F1[5] * (P2[0] * (V3[3] - cI * (V3[4])) + (P2[1] * (-1.) *
-      (V3[2] + V3[5]) + (P2[2] * (+cI * (V3[2] + V3[5])) + P2[3] * (V3[3] - cI
-      * (V3[4]))))) + M2 * (F1[2] * (-1.) * (V3[2] + V3[5]) + F1[3] * (+cI *
-      (V3[4]) - V3[3]))));
-  F2[5] = denom * cI * (F1[4] * (P2[0] * (-1.) * (V3[3] + cI * (V3[4])) +
-      (P2[1] * (V3[2] - V3[5]) + (P2[2] * (-cI * (V3[5]) + cI * (V3[2])) +
-      P2[3] * (V3[3] + cI * (V3[4]))))) + (F1[5] * (P2[0] * (V3[2] + V3[5]) +
-      (P2[1] * (+cI * (V3[4]) - V3[3]) + (P2[2] * (-1.) * (V3[4] + cI *
-      (V3[3])) - P2[3] * (V3[2] + V3[5])))) + M2 * (F1[2] * (V3[3] + cI *
-      (V3[4])) + F1[3] * (V3[2] - V3[5]))));
-}
-
-
-void FFV2_0(std::complex<double> F1[], std::complex<double> F2[],
-    std::complex<double> V3[], std::complex<double> COUP, std::complex<double>
-    & vertex)
-{
-  static std::complex<double> cI = std::complex<double> (0., 1.); 
-  std::complex<double> TMP9; 
-  TMP9 = (F1[2] * (F2[4] * (V3[2] + V3[5]) + F2[5] * (V3[3] + cI * (V3[4]))) +
-      F1[3] * (F2[4] * (V3[3] - cI * (V3[4])) + F2[5] * (V3[2] - V3[5])));
-  vertex = COUP * - cI * TMP9; 
-}
-
-void FFV2_5_0(std::complex<double> F1[], std::complex<double> F2[],
-    std::complex<double> V3[], std::complex<double> COUP1, std::complex<double>
-    COUP2, std::complex<double> & vertex)
-{
-  std::complex<double> tmp; 
-  FFV2_0(F1, F2, V3, COUP1, vertex); 
-  FFV5_0(F1, F2, V3, COUP2, tmp); 
-  vertex = vertex + tmp; 
-}
-
-void FFV5_1(std::complex<double> F2[], std::complex<double> V3[],
-    std::complex<double> COUP, double M1, double W1, std::complex<double> F1[])
-{
-  static std::complex<double> cI = std::complex<double> (0., 1.); 
-  double P1[4]; 
-  std::complex<double> denom; 
-  F1[0] = +F2[0] + V3[0]; 
-  F1[1] = +F2[1] + V3[1]; 
-  P1[0] = -F1[0].real(); 
-  P1[1] = -F1[1].real(); 
-  P1[2] = -F1[1].imag(); 
-  P1[3] = -F1[0].imag(); 
-  denom = COUP/((P1[0] * P1[0]) - (P1[1] * P1[1]) - (P1[2] * P1[2]) - (P1[3] *
-      P1[3]) - M1 * (M1 - cI * W1));
-  F1[2] = denom * 4. * cI * (F2[2] * (P1[0] * (V3[5] - V3[2]) + (P1[1] * (V3[3]
-      - cI * (V3[4])) + (P1[2] * (V3[4] + cI * (V3[3])) + P1[3] * (V3[5] -
-      V3[2])))) + (+1./4. * (M1 * (F2[5] * (V3[3] + cI * (V3[4])) + 4. * (F2[4]
-      * 1./4. * (V3[2] + V3[5])))) + F2[3] * (P1[0] * (V3[3] + cI * (V3[4])) +
-      (P1[1] * (-1.) * (V3[2] + V3[5]) + (P1[2] * (-1.) * (+cI * (V3[2] +
-      V3[5])) + P1[3] * (V3[3] + cI * (V3[4])))))));
-  F1[3] = denom * 4. * cI * (F2[2] * (P1[0] * (V3[3] - cI * (V3[4])) + (P1[1] *
-      (V3[5] - V3[2]) + (P1[2] * (-cI * (V3[5]) + cI * (V3[2])) + P1[3] * (+cI
-      * (V3[4]) - V3[3])))) + (+1./4. * (M1 * (F2[5] * (V3[2] - V3[5]) + 4. *
-      (F2[4] * 1./4. * (V3[3] - cI * (V3[4]))))) + F2[3] * (P1[0] * (-1.) *
-      (V3[2] + V3[5]) + (P1[1] * (V3[3] + cI * (V3[4])) + (P1[2] * (V3[4] - cI
-      * (V3[3])) + P1[3] * (V3[2] + V3[5]))))));
-  F1[4] = denom * (-cI) * (F2[4] * (P1[0] * (V3[2] + V3[5]) + (P1[1] * (+cI *
-      (V3[4]) - V3[3]) + (P1[2] * (-1.) * (V3[4] + cI * (V3[3])) - P1[3] *
-      (V3[2] + V3[5])))) + (F2[5] * (P1[0] * (V3[3] + cI * (V3[4])) + (P1[1] *
-      (V3[5] - V3[2]) + (P1[2] * (-cI * (V3[2]) + cI * (V3[5])) - P1[3] *
-      (V3[3] + cI * (V3[4]))))) + M1 * (F2[2] * 4. * (V3[5] - V3[2]) + 4. *
-      (F2[3] * (V3[3] + cI * (V3[4]))))));
-  F1[5] = denom * cI * (F2[4] * (P1[0] * (+cI * (V3[4]) - V3[3]) + (P1[1] *
-      (V3[2] + V3[5]) + (P1[2] * (-1.) * (+cI * (V3[2] + V3[5])) + P1[3] * (+cI
-      * (V3[4]) - V3[3])))) + (F2[5] * (P1[0] * (V3[5] - V3[2]) + (P1[1] *
-      (V3[3] + cI * (V3[4])) + (P1[2] * (V3[4] - cI * (V3[3])) + P1[3] * (V3[5]
-      - V3[2])))) + M1 * (F2[2] * 4. * (+cI * (V3[4]) - V3[3]) + 4. * (F2[3] *
-      (V3[2] + V3[5])))));
-}
-
-
-void FFV1_0(std::complex<double> F1[], std::complex<double> F2[],
-    std::complex<double> V3[], std::complex<double> COUP, std::complex<double>
-    & vertex)
-{
-  static std::complex<double> cI = std::complex<double> (0., 1.); 
-  std::complex<double> TMP13; 
-  TMP13 = (F1[2] * (F2[4] * (V3[2] + V3[5]) + F2[5] * (V3[3] + cI * (V3[4]))) +
-      (F1[3] * (F2[4] * (V3[3] - cI * (V3[4])) + F2[5] * (V3[2] - V3[5])) +
-      (F1[4] * (F2[2] * (V3[2] - V3[5]) - F2[3] * (V3[3] + cI * (V3[4]))) +
-      F1[5] * (F2[2] * (+cI * (V3[4]) - V3[3]) + F2[3] * (V3[2] + V3[5])))));
-  vertex = COUP * - cI * TMP13; 
-}
-
-
-void VVVV4P0_1(std::complex<double> V2[], std::complex<double> V3[],
-    std::complex<double> V4[], std::complex<double> COUP, double M1, double W1,
-    std::complex<double> V1[])
-{
-  static std::complex<double> cI = std::complex<double> (0., 1.); 
-  std::complex<double> TMP12; 
-  std::complex<double> TMP11; 
-  double P1[4]; 
-  std::complex<double> denom; 
-  V1[0] = +V2[0] + V3[0] + V4[0]; 
-  V1[1] = +V2[1] + V3[1] + V4[1]; 
-  P1[0] = -V1[0].real(); 
-  P1[1] = -V1[1].real(); 
-  P1[2] = -V1[1].imag(); 
-  P1[3] = -V1[0].imag(); 
-  TMP11 = (V2[2] * V4[2] - V2[3] * V4[3] - V2[4] * V4[4] - V2[5] * V4[5]); 
-  TMP12 = (V3[2] * V4[2] - V3[3] * V4[3] - V3[4] * V4[4] - V3[5] * V4[5]); 
-  denom = COUP/((P1[0] * P1[0]) - (P1[1] * P1[1]) - (P1[2] * P1[2]) - (P1[3] *
-      P1[3]) - M1 * (M1 - cI * W1));
-  V1[2] = denom * (-cI * (V3[2] * TMP11) + cI * (V2[2] * TMP12)); 
-  V1[3] = denom * (-cI * (V3[3] * TMP11) + cI * (V2[3] * TMP12)); 
-  V1[4] = denom * (-cI * (V3[4] * TMP11) + cI * (V2[4] * TMP12)); 
-  V1[5] = denom * (-cI * (V3[5] * TMP11) + cI * (V2[5] * TMP12)); 
-}
-
-
-void VVVV3P0_1(std::complex<double> V2[], std::complex<double> V3[],
-    std::complex<double> V4[], std::complex<double> COUP, double M1, double W1,
-    std::complex<double> V1[])
-{
-  static std::complex<double> cI = std::complex<double> (0., 1.); 
-  std::complex<double> TMP12; 
-  double P1[4]; 
-  std::complex<double> TMP6; 
-  std::complex<double> denom; 
-  V1[0] = +V2[0] + V3[0] + V4[0]; 
-  V1[1] = +V2[1] + V3[1] + V4[1]; 
-  P1[0] = -V1[0].real(); 
-  P1[1] = -V1[1].real(); 
-  P1[2] = -V1[1].imag(); 
-  P1[3] = -V1[0].imag(); 
-  TMP6 = (V3[2] * V2[2] - V3[3] * V2[3] - V3[4] * V2[4] - V3[5] * V2[5]); 
-  TMP12 = (V3[2] * V4[2] - V3[3] * V4[3] - V3[4] * V4[4] - V3[5] * V4[5]); 
-  denom = COUP/((P1[0] * P1[0]) - (P1[1] * P1[1]) - (P1[2] * P1[2]) - (P1[3] *
-      P1[3]) - M1 * (M1 - cI * W1));
-  V1[2] = denom * (-cI * (TMP6 * V4[2]) + cI * (V2[2] * TMP12)); 
-  V1[3] = denom * (-cI * (TMP6 * V4[3]) + cI * (V2[3] * TMP12)); 
-  V1[4] = denom * (-cI * (TMP6 * V4[4]) + cI * (V2[4] * TMP12)); 
-  V1[5] = denom * (-cI * (TMP6 * V4[5]) + cI * (V2[5] * TMP12)); 
-}
-
-
-void VVV1_0(std::complex<double> V1[], std::complex<double> V2[],
-    std::complex<double> V3[], std::complex<double> COUP, std::complex<double>
-    & vertex)
-{
-  static std::complex<double> cI = std::complex<double> (0., 1.); 
-  std::complex<double> TMP2; 
-  std::complex<double> TMP1; 
-  double P1[4]; 
-  std::complex<double> TMP0; 
-  double P2[4]; 
-  std::complex<double> TMP7; 
-  double P3[4]; 
-  std::complex<double> TMP6; 
-  std::complex<double> TMP5; 
-  std::complex<double> TMP4; 
-  std::complex<double> TMP3; 
-  std::complex<double> TMP8; 
-  P1[0] = V1[0].real(); 
-  P1[1] = V1[1].real(); 
-  P1[2] = V1[1].imag(); 
-  P1[3] = V1[0].imag(); 
-  P2[0] = V2[0].real(); 
-  P2[1] = V2[1].real(); 
-  P2[2] = V2[1].imag(); 
-  P2[3] = V2[0].imag(); 
-  P3[0] = V3[0].real(); 
-  P3[1] = V3[1].real(); 
-  P3[2] = V3[1].imag(); 
-  P3[3] = V3[0].imag(); 
-  TMP8 = (V1[2] * P3[0] - V1[3] * P3[1] - V1[4] * P3[2] - V1[5] * P3[3]); 
-  TMP5 = (V2[2] * P3[0] - V2[3] * P3[1] - V2[4] * P3[2] - V2[5] * P3[3]); 
-  TMP4 = (P1[0] * V2[2] - P1[1] * V2[3] - P1[2] * V2[4] - P1[3] * V2[5]); 
-  TMP7 = (V1[2] * P2[0] - V1[3] * P2[1] - V1[4] * P2[2] - V1[5] * P2[3]); 
-  TMP6 = (V3[2] * V2[2] - V3[3] * V2[3] - V3[4] * V2[4] - V3[5] * V2[5]); 
-  TMP1 = (V2[2] * V1[2] - V2[3] * V1[3] - V2[4] * V1[4] - V2[5] * V1[5]); 
-  TMP0 = (V3[2] * P1[0] - V3[3] * P1[1] - V3[4] * P1[2] - V3[5] * P1[3]); 
-  TMP3 = (V3[2] * V1[2] - V3[3] * V1[3] - V3[4] * V1[4] - V3[5] * V1[5]); 
-  TMP2 = (V3[2] * P2[0] - V3[3] * P2[1] - V3[4] * P2[2] - V3[5] * P2[3]); 
-  vertex = COUP * (TMP1 * (-cI * (TMP0) + cI * (TMP2)) + (TMP3 * (-cI * (TMP5)
-      + cI * (TMP4)) + TMP6 * (-cI * (TMP7) + cI * (TMP8))));
-}
-
-
-void FFV2_3(std::complex<double> F1[], std::complex<double> F2[],
-    std::complex<double> COUP, double M3, double W3, std::complex<double> V3[])
-{
-  static std::complex<double> cI = std::complex<double> (0., 1.); 
-  std::complex<double> denom; 
-  std::complex<double> TMP10; 
-  double P3[4]; 
-  double OM3; 
-  OM3 = 0.; 
-  if (M3 != 0.)
-    OM3 = 1./(M3 * M3); 
-  V3[0] = +F1[0] + F2[0]; 
-  V3[1] = +F1[1] + F2[1]; 
-  P3[0] = -V3[0].real(); 
-  P3[1] = -V3[1].real(); 
-  P3[2] = -V3[1].imag(); 
-  P3[3] = -V3[0].imag(); 
-  TMP10 = (F1[2] * (F2[4] * (P3[0] + P3[3]) + F2[5] * (P3[1] + cI * (P3[2]))) +
-      F1[3] * (F2[4] * (P3[1] - cI * (P3[2])) + F2[5] * (P3[0] - P3[3])));
-  denom = COUP/((P3[0] * P3[0]) - (P3[1] * P3[1]) - (P3[2] * P3[2]) - (P3[3] *
-      P3[3]) - M3 * (M3 - cI * W3));
-  V3[2] = denom * (-cI) * (F1[2] * F2[4] + F1[3] * F2[5] - P3[0] * OM3 *
-      TMP10);
-  V3[3] = denom * (-cI) * (-F1[2] * F2[5] - F1[3] * F2[4] - P3[1] * OM3 *
-      TMP10);
-  V3[4] = denom * (-cI) * (-cI * (F1[2] * F2[5]) + cI * (F1[3] * F2[4]) - P3[2]
-      * OM3 * TMP10);
-  V3[5] = denom * (-cI) * (F1[3] * F2[5] - F1[2] * F2[4] - P3[3] * OM3 *
-      TMP10);
-}
-
-void FFV2_4_3(std::complex<double> F1[], std::complex<double> F2[],
-    std::complex<double> COUP1, std::complex<double> COUP2, double M3, double
-    W3, std::complex<double> V3[])
-{
-  int i;
-  std::complex<double> Vtmp[6]; 
-  FFV2_3(F1, F2, COUP1, M3, W3, V3); 
-  FFV4_3(F1, F2, COUP2, M3, W3, Vtmp); 
-  i = 2; 
-  while (i < 6)
-  {
-    V3[i] = V3[i] + Vtmp[i]; 
-    i++; 
-  }
-}
-
-void FFV5_2(std::complex<double> F1[], std::complex<double> V3[],
-    std::complex<double> COUP, double M2, double W2, std::complex<double> F2[])
-{
-  static std::complex<double> cI = std::complex<double> (0., 1.); 
-  double P2[4]; 
-  std::complex<double> denom; 
-  F2[0] = +F1[0] + V3[0]; 
-  F2[1] = +F1[1] + V3[1]; 
-  P2[0] = -F2[0].real(); 
-  P2[1] = -F2[1].real(); 
-  P2[2] = -F2[1].imag(); 
-  P2[3] = -F2[0].imag(); 
-  denom = COUP/((P2[0] * P2[0]) - (P2[1] * P2[1]) - (P2[2] * P2[2]) - (P2[3] *
-      P2[3]) - M2 * (M2 - cI * W2));
-  F2[2] = denom * cI * (F1[2] * (P2[0] * (V3[2] + V3[5]) + (P2[1] * (-1.) *
-      (V3[3] + cI * (V3[4])) + (P2[2] * (+cI * (V3[3]) - V3[4]) - P2[3] *
-      (V3[2] + V3[5])))) + (F1[3] * (P2[0] * (V3[3] - cI * (V3[4])) + (P2[1] *
-      (V3[5] - V3[2]) + (P2[2] * (-cI * (V3[5]) + cI * (V3[2])) + P2[3] * (+cI
-      * (V3[4]) - V3[3])))) + M2 * (F1[4] * 4. * (V3[2] - V3[5]) + 4. * (F1[5]
-      * (+cI * (V3[4]) - V3[3])))));
-  F2[3] = denom * cI * (F1[2] * (P2[0] * (V3[3] + cI * (V3[4])) + (P2[1] *
-      (-1.) * (V3[2] + V3[5]) + (P2[2] * (-1.) * (+cI * (V3[2] + V3[5])) +
-      P2[3] * (V3[3] + cI * (V3[4]))))) + (F1[3] * (P2[0] * (V3[2] - V3[5]) +
-      (P2[1] * (+cI * (V3[4]) - V3[3]) + (P2[2] * (-1.) * (V3[4] + cI *
-      (V3[3])) + P2[3] * (V3[2] - V3[5])))) + M2 * (F1[4] * (-4.) * (V3[3] + cI
-      * (V3[4])) + 4. * (F1[5] * (V3[2] + V3[5])))));
-  F2[4] = denom * (-4. * cI) * (F1[4] * (P2[0] * (V3[5] - V3[2]) + (P2[1] *
-      (V3[3] + cI * (V3[4])) + (P2[2] * (V3[4] - cI * (V3[3])) + P2[3] * (V3[5]
-      - V3[2])))) + (+1./4. * (M2 * (F1[3] * (+cI * (V3[4]) - V3[3]) + 4. *
-      (F1[2] * (-1./4.) * (V3[2] + V3[5])))) + F1[5] * (P2[0] * (V3[3] - cI *
-      (V3[4])) + (P2[1] * (-1.) * (V3[2] + V3[5]) + (P2[2] * (+cI * (V3[2] +
-      V3[5])) + P2[3] * (V3[3] - cI * (V3[4])))))));
-  F2[5] = denom * (-4. * cI) * (F1[4] * (P2[0] * (V3[3] + cI * (V3[4])) +
-      (P2[1] * (V3[5] - V3[2]) + (P2[2] * (-cI * (V3[2]) + cI * (V3[5])) -
-      P2[3] * (V3[3] + cI * (V3[4]))))) + (+1./4. * (M2 * (F1[3] * (V3[5] -
-      V3[2]) + 4. * (F1[2] * (-1./4.) * (V3[3] + cI * (V3[4]))))) + F1[5] *
-      (P2[0] * (-1.) * (V3[2] + V3[5]) + (P2[1] * (V3[3] - cI * (V3[4])) +
-      (P2[2] * (V3[4] + cI * (V3[3])) + P2[3] * (V3[2] + V3[5]))))));
-}
-
-
-void FFV2_1(std::complex<double> F2[], std::complex<double> V3[],
-    std::complex<double> COUP, double M1, double W1, std::complex<double> F1[])
-{
-  static std::complex<double> cI = std::complex<double> (0., 1.); 
-  double P1[4]; 
-  std::complex<double> denom; 
-  F1[0] = +F2[0] + V3[0]; 
-  F1[1] = +F2[1] + V3[1]; 
-  P1[0] = -F1[0].real(); 
-  P1[1] = -F1[1].real(); 
-  P1[2] = -F1[1].imag(); 
-  P1[3] = -F1[0].imag(); 
-  denom = COUP/((P1[0] * P1[0]) - (P1[1] * P1[1]) - (P1[2] * P1[2]) - (P1[3] *
-      P1[3]) - M1 * (M1 - cI * W1));
-  F1[2] = denom * cI * M1 * (F2[4] * (V3[2] + V3[5]) + F2[5] * (V3[3] + cI *
-      (V3[4])));
-  F1[3] = denom * - cI * M1 * (F2[4] * (+cI * (V3[4]) - V3[3]) + F2[5] * (V3[5]
-      - V3[2]));
-  F1[4] = denom * (-cI) * (F2[4] * (P1[0] * (V3[2] + V3[5]) + (P1[1] * (+cI *
-      (V3[4]) - V3[3]) + (P1[2] * (-1.) * (V3[4] + cI * (V3[3])) - P1[3] *
-      (V3[2] + V3[5])))) + F2[5] * (P1[0] * (V3[3] + cI * (V3[4])) + (P1[1] *
-      (V3[5] - V3[2]) + (P1[2] * (-cI * (V3[2]) + cI * (V3[5])) - P1[3] *
-      (V3[3] + cI * (V3[4]))))));
-  F1[5] = denom * (-cI) * (F2[4] * (P1[0] * (V3[3] - cI * (V3[4])) + (P1[1] *
-      (-1.) * (V3[2] + V3[5]) + (P1[2] * (+cI * (V3[2] + V3[5])) + P1[3] *
-      (V3[3] - cI * (V3[4]))))) + F2[5] * (P1[0] * (V3[2] - V3[5]) + (P1[1] *
-      (-1.) * (V3[3] + cI * (V3[4])) + (P1[2] * (+cI * (V3[3]) - V3[4]) + P1[3]
-      * (V3[2] - V3[5])))));
-}
-
-void FFV2_5_1(std::complex<double> F2[], std::complex<double> V3[],
-    std::complex<double> COUP1, std::complex<double> COUP2, double M1, double
-    W1, std::complex<double> F1[])
-{
-  int i;
-  std::complex<double> Ftmp[6]; 
-  FFV2_1(F2, V3, COUP1, M1, W1, F1); 
-  FFV5_1(F2, V3, COUP2, M1, W1, Ftmp); 
-  i = 2; 
-  while (i < 6)
-  {
-    F1[i] = F1[i] + Ftmp[i]; 
-    i++; 
-  }
-}
-
-void FFV5_0(std::complex<double> F1[], std::complex<double> F2[],
-    std::complex<double> V3[], std::complex<double> COUP, std::complex<double>
-    & vertex)
-{
-  static std::complex<double> cI = std::complex<double> (0., 1.); 
-  std::complex<double> TMP15; 
-  std::complex<double> TMP16; 
-  TMP15 = (F1[2] * (F2[4] * (V3[2] + V3[5]) + F2[5] * (V3[3] + cI * (V3[4]))) +
-      F1[3] * (F2[4] * (V3[3] - cI * (V3[4])) + F2[5] * (V3[2] - V3[5])));
-  TMP16 = (F1[4] * (F2[2] * (V3[2] - V3[5]) - F2[3] * (V3[3] + cI * (V3[4]))) +
-      F1[5] * (F2[2] * (+cI * (V3[4]) - V3[3]) + F2[3] * (V3[2] + V3[5])));
-  vertex = COUP * (-1.) * (+cI * (TMP15) + 4. * cI * (TMP16)); 
-}
-
-
-void FFV1_1(std::complex<double> F2[], std::complex<double> V3[],
-    std::complex<double> COUP, double M1, double W1, std::complex<double> F1[])
-{
-  static std::complex<double> cI = std::complex<double> (0., 1.); 
-  double P1[4]; 
-  std::complex<double> denom; 
-  F1[0] = +F2[0] + V3[0]; 
-  F1[1] = +F2[1] + V3[1]; 
-  P1[0] = -F1[0].real(); 
-  P1[1] = -F1[1].real(); 
-  P1[2] = -F1[1].imag(); 
-  P1[3] = -F1[0].imag(); 
-  denom = COUP/((P1[0] * P1[0]) - (P1[1] * P1[1]) - (P1[2] * P1[2]) - (P1[3] *
-      P1[3]) - M1 * (M1 - cI * W1));
-  F1[2] = denom * cI * (F2[2] * (P1[0] * (V3[5] - V3[2]) + (P1[1] * (V3[3] - cI
-      * (V3[4])) + (P1[2] * (V3[4] + cI * (V3[3])) + P1[3] * (V3[5] - V3[2]))))
-      + (F2[3] * (P1[0] * (V3[3] + cI * (V3[4])) + (P1[1] * (-1.) * (V3[2] +
-      V3[5]) + (P1[2] * (-1.) * (+cI * (V3[2] + V3[5])) + P1[3] * (V3[3] + cI *
-      (V3[4]))))) + M1 * (F2[4] * (V3[2] + V3[5]) + F2[5] * (V3[3] + cI *
-      (V3[4])))));
-  F1[3] = denom * (-cI) * (F2[2] * (P1[0] * (+cI * (V3[4]) - V3[3]) + (P1[1] *
-      (V3[2] - V3[5]) + (P1[2] * (-cI * (V3[2]) + cI * (V3[5])) + P1[3] *
-      (V3[3] - cI * (V3[4]))))) + (F2[3] * (P1[0] * (V3[2] + V3[5]) + (P1[1] *
-      (-1.) * (V3[3] + cI * (V3[4])) + (P1[2] * (+cI * (V3[3]) - V3[4]) - P1[3]
-      * (V3[2] + V3[5])))) + M1 * (F2[4] * (+cI * (V3[4]) - V3[3]) + F2[5] *
-      (V3[5] - V3[2]))));
-  F1[4] = denom * (-cI) * (F2[4] * (P1[0] * (V3[2] + V3[5]) + (P1[1] * (+cI *
-      (V3[4]) - V3[3]) + (P1[2] * (-1.) * (V3[4] + cI * (V3[3])) - P1[3] *
-      (V3[2] + V3[5])))) + (F2[5] * (P1[0] * (V3[3] + cI * (V3[4])) + (P1[1] *
-      (V3[5] - V3[2]) + (P1[2] * (-cI * (V3[2]) + cI * (V3[5])) - P1[3] *
-      (V3[3] + cI * (V3[4]))))) + M1 * (F2[2] * (V3[5] - V3[2]) + F2[3] *
-      (V3[3] + cI * (V3[4])))));
-  F1[5] = denom * cI * (F2[4] * (P1[0] * (+cI * (V3[4]) - V3[3]) + (P1[1] *
-      (V3[2] + V3[5]) + (P1[2] * (-1.) * (+cI * (V3[2] + V3[5])) + P1[3] * (+cI
-      * (V3[4]) - V3[3])))) + (F2[5] * (P1[0] * (V3[5] - V3[2]) + (P1[1] *
-      (V3[3] + cI * (V3[4])) + (P1[2] * (V3[4] - cI * (V3[3])) + P1[3] * (V3[5]
-      - V3[2])))) + M1 * (F2[2] * (+cI * (V3[4]) - V3[3]) + F2[3] * (V3[2] +
-      V3[5]))));
-}
-
-
-void FFV4_3(std::complex<double> F1[], std::complex<double> F2[],
-    std::complex<double> COUP, double M3, double W3, std::complex<double> V3[])
-{
-  static std::complex<double> cI = std::complex<double> (0., 1.); 
-  std::complex<double> denom; 
-  std::complex<double> TMP10; 
-  double P3[4]; 
-  double OM3; 
-  std::complex<double> TMP14; 
-  OM3 = 0.; 
-  if (M3 != 0.)
-    OM3 = 1./(M3 * M3); 
-  V3[0] = +F1[0] + F2[0]; 
-  V3[1] = +F1[1] + F2[1]; 
-  P3[0] = -V3[0].real(); 
-  P3[1] = -V3[1].real(); 
-  P3[2] = -V3[1].imag(); 
-  P3[3] = -V3[0].imag(); 
-  TMP14 = (F1[4] * (F2[2] * (P3[0] - P3[3]) - F2[3] * (P3[1] + cI * (P3[2]))) +
-      F1[5] * (F2[2] * (+cI * (P3[2]) - P3[1]) + F2[3] * (P3[0] + P3[3])));
-  TMP10 = (F1[2] * (F2[4] * (P3[0] + P3[3]) + F2[5] * (P3[1] + cI * (P3[2]))) +
-      F1[3] * (F2[4] * (P3[1] - cI * (P3[2])) + F2[5] * (P3[0] - P3[3])));
-  denom = COUP/((P3[0] * P3[0]) - (P3[1] * P3[1]) - (P3[2] * P3[2]) - (P3[3] *
-      P3[3]) - M3 * (M3 - cI * W3));
-  V3[2] = denom * (-2. * cI) * (OM3 * - 1./2. * P3[0] * (TMP10 + 2. * (TMP14))
-      + (+1./2. * (F1[2] * F2[4] + F1[3] * F2[5]) + F1[4] * F2[2] + F1[5] *
-      F2[3]));
-  V3[3] = denom * (-2. * cI) * (OM3 * - 1./2. * P3[1] * (TMP10 + 2. * (TMP14))
-      + (-1./2. * (F1[2] * F2[5] + F1[3] * F2[4]) + F1[4] * F2[3] + F1[5] *
-      F2[2]));
-  V3[4] = denom * 2. * cI * (OM3 * 1./2. * P3[2] * (TMP10 + 2. * (TMP14)) +
-      (+1./2. * cI * (F1[2] * F2[5]) - 1./2. * cI * (F1[3] * F2[4]) - cI *
-      (F1[4] * F2[3]) + cI * (F1[5] * F2[2])));
-  V3[5] = denom * 2. * cI * (OM3 * 1./2. * P3[3] * (TMP10 + 2. * (TMP14)) +
-      (+1./2. * (F1[2] * F2[4]) - 1./2. * (F1[3] * F2[5]) - F1[4] * F2[2] +
-      F1[5] * F2[3]));
-}
-
-
-void VVVV1P0_1(std::complex<double> V2[], std::complex<double> V3[],
-    std::complex<double> V4[], std::complex<double> COUP, double M1, double W1,
-    std::complex<double> V1[])
-{
-  static std::complex<double> cI = std::complex<double> (0., 1.); 
-  std::complex<double> TMP11; 
-  double P1[4]; 
-  std::complex<double> TMP6; 
-  std::complex<double> denom; 
-  V1[0] = +V2[0] + V3[0] + V4[0]; 
-  V1[1] = +V2[1] + V3[1] + V4[1]; 
-  P1[0] = -V1[0].real(); 
-  P1[1] = -V1[1].real(); 
-  P1[2] = -V1[1].imag(); 
-  P1[3] = -V1[0].imag(); 
-  TMP6 = (V3[2] * V2[2] - V3[3] * V2[3] - V3[4] * V2[4] - V3[5] * V2[5]); 
-  TMP11 = (V2[2] * V4[2] - V2[3] * V4[3] - V2[4] * V4[4] - V2[5] * V4[5]); 
-  denom = COUP/((P1[0] * P1[0]) - (P1[1] * P1[1]) - (P1[2] * P1[2]) - (P1[3] *
-      P1[3]) - M1 * (M1 - cI * W1));
-  V1[2] = denom * (-cI * (TMP6 * V4[2]) + cI * (V3[2] * TMP11)); 
-  V1[3] = denom * (-cI * (TMP6 * V4[3]) + cI * (V3[3] * TMP11)); 
-  V1[4] = denom * (-cI * (TMP6 * V4[4]) + cI * (V3[4] * TMP11)); 
-  V1[5] = denom * (-cI * (TMP6 * V4[5]) + cI * (V3[5] * TMP11)); 
-}
-
-
-void VVV1P0_1(std::complex<double> V2[], std::complex<double> V3[],
-    std::complex<double> COUP, double M1, double W1, std::complex<double> V1[])
-{
-  static std::complex<double> cI = std::complex<double> (0., 1.); 
-  std::complex<double> TMP2; 
-  double P1[4]; 
-  std::complex<double> TMP0; 
-  double P2[4]; 
-  double P3[4]; 
-  std::complex<double> TMP6; 
-  std::complex<double> TMP5; 
-  std::complex<double> TMP4; 
-  std::complex<double> denom; 
-  P2[0] = V2[0].real(); 
-  P2[1] = V2[1].real(); 
-  P2[2] = V2[1].imag(); 
-  P2[3] = V2[0].imag(); 
-  P3[0] = V3[0].real(); 
-  P3[1] = V3[1].real(); 
-  P3[2] = V3[1].imag(); 
-  P3[3] = V3[0].imag(); 
-  V1[0] = +V2[0] + V3[0]; 
-  V1[1] = +V2[1] + V3[1]; 
-  P1[0] = -V1[0].real(); 
-  P1[1] = -V1[1].real(); 
-  P1[2] = -V1[1].imag(); 
-  P1[3] = -V1[0].imag(); 
-  TMP5 = (V2[2] * P3[0] - V2[3] * P3[1] - V2[4] * P3[2] - V2[5] * P3[3]); 
-  TMP4 = (P1[0] * V2[2] - P1[1] * V2[3] - P1[2] * V2[4] - P1[3] * V2[5]); 
-  TMP6 = (V3[2] * V2[2] - V3[3] * V2[3] - V3[4] * V2[4] - V3[5] * V2[5]); 
-  TMP0 = (V3[2] * P1[0] - V3[3] * P1[1] - V3[4] * P1[2] - V3[5] * P1[3]); 
-  TMP2 = (V3[2] * P2[0] - V3[3] * P2[1] - V3[4] * P2[2] - V3[5] * P2[3]); 
-  denom = COUP/((P1[0] * P1[0]) - (P1[1] * P1[1]) - (P1[2] * P1[2]) - (P1[3] *
-      P1[3]) - M1 * (M1 - cI * W1));
-  V1[2] = denom * (TMP6 * (-cI * (P2[0]) + cI * (P3[0])) + (V2[2] * (-cI *
-      (TMP0) + cI * (TMP2)) + V3[2] * (-cI * (TMP5) + cI * (TMP4))));
-  V1[3] = denom * (TMP6 * (-cI * (P2[1]) + cI * (P3[1])) + (V2[3] * (-cI *
-      (TMP0) + cI * (TMP2)) + V3[3] * (-cI * (TMP5) + cI * (TMP4))));
-  V1[4] = denom * (TMP6 * (-cI * (P2[2]) + cI * (P3[2])) + (V2[4] * (-cI *
-      (TMP0) + cI * (TMP2)) + V3[4] * (-cI * (TMP5) + cI * (TMP4))));
-  V1[5] = denom * (TMP6 * (-cI * (P2[3]) + cI * (P3[3])) + (V2[5] * (-cI *
-      (TMP0) + cI * (TMP2)) + V3[5] * (-cI * (TMP5) + cI * (TMP4))));
-}
-
-
-}  // end namespace MG5_sm_COLOREA
-
diff --git a/Shower/Dipole/Colorea/HelAmps_sm.h b/Shower/Dipole/Colorea/HelAmps_sm.h
deleted file mode 100644
--- a/Shower/Dipole/Colorea/HelAmps_sm.h
+++ /dev/null
@@ -1,106 +0,0 @@
-//==========================================================================
-// This file has been automatically generated for C++ Standalone
-// MadGraph5_aMC@NLO v. 2.5.4, 2017-03-28
-// By the MadGraph5_aMC@NLO Development Team
-// Visit launchpad.net/madgraph5 and amcatnlo.web.cern.ch
-//==========================================================================
-
-#ifndef HelAmps_sm_H
-#define HelAmps_sm_H
-
-#include <cmath> 
-#include <complex> 
-
-using namespace std; 
-
-namespace MG5_sm_COLOREA
-{
-double Sgn(double e, double f); 
-
-void oxxxxx(double p[4], double fmass, int nhel, int nsf, std::complex<double>
-    fo[6]);
-
-void sxxxxx(double p[4], int nss, std::complex<double> sc[3]); 
-
-void ixxxxx(double p[4], double fmass, int nhel, int nsf, std::complex<double>
-    fi[6]);
-
-void txxxxx(double p[4], double tmass, int nhel, int nst, std::complex<double>
-    fi[18]);
-
-void vxxxxx(double p[4], double vmass, int nhel, int nsv, std::complex<double>
-    v[6]);
-
-void FFV1P0_3(std::complex<double> F1[], std::complex<double> F2[],
-    std::complex<double> COUP, double M3, double W3, std::complex<double> V3[]);
-
-void FFV2_2(std::complex<double> F1[], std::complex<double> V3[],
-    std::complex<double> COUP, double M2, double W2, std::complex<double> F2[]);
-void FFV2_5_2(std::complex<double> F1[], std::complex<double> V3[],
-    std::complex<double> COUP1, std::complex<double> COUP2, double M2, double
-    W2, std::complex<double> F2[]);
-
-void FFV1_2(std::complex<double> F1[], std::complex<double> V3[],
-    std::complex<double> COUP, double M2, double W2, std::complex<double> F2[]);
-
-void FFV2_0(std::complex<double> F1[], std::complex<double> F2[],
-    std::complex<double> V3[], std::complex<double> COUP, std::complex<double>
-    & vertex);
-void FFV2_5_0(std::complex<double> F1[], std::complex<double> F2[],
-    std::complex<double> V3[], std::complex<double> COUP1, std::complex<double>
-    COUP2, std::complex<double> & vertex);
-
-void FFV5_1(std::complex<double> F2[], std::complex<double> V3[],
-    std::complex<double> COUP, double M1, double W1, std::complex<double> F1[]);
-
-void FFV1_0(std::complex<double> F1[], std::complex<double> F2[],
-    std::complex<double> V3[], std::complex<double> COUP, std::complex<double>
-    & vertex);
-
-void VVVV4P0_1(std::complex<double> V2[], std::complex<double> V3[],
-    std::complex<double> V4[], std::complex<double> COUP, double M1, double W1,
-    std::complex<double> V1[]);
-
-void VVVV3P0_1(std::complex<double> V2[], std::complex<double> V3[],
-    std::complex<double> V4[], std::complex<double> COUP, double M1, double W1,
-    std::complex<double> V1[]);
-
-void VVV1_0(std::complex<double> V1[], std::complex<double> V2[],
-    std::complex<double> V3[], std::complex<double> COUP, std::complex<double>
-    & vertex);
-
-void FFV2_3(std::complex<double> F1[], std::complex<double> F2[],
-    std::complex<double> COUP, double M3, double W3, std::complex<double> V3[]);
-void FFV2_4_3(std::complex<double> F1[], std::complex<double> F2[],
-    std::complex<double> COUP1, std::complex<double> COUP2, double M3, double
-    W3, std::complex<double> V3[]);
-
-void FFV5_2(std::complex<double> F1[], std::complex<double> V3[],
-    std::complex<double> COUP, double M2, double W2, std::complex<double> F2[]);
-
-void FFV2_1(std::complex<double> F2[], std::complex<double> V3[],
-    std::complex<double> COUP, double M1, double W1, std::complex<double> F1[]);
-void FFV2_5_1(std::complex<double> F2[], std::complex<double> V3[],
-    std::complex<double> COUP1, std::complex<double> COUP2, double M1, double
-    W1, std::complex<double> F1[]);
-
-void FFV5_0(std::complex<double> F1[], std::complex<double> F2[],
-    std::complex<double> V3[], std::complex<double> COUP, std::complex<double>
-    & vertex);
-
-void FFV1_1(std::complex<double> F2[], std::complex<double> V3[],
-    std::complex<double> COUP, double M1, double W1, std::complex<double> F1[]);
-
-void FFV4_3(std::complex<double> F1[], std::complex<double> F2[],
-    std::complex<double> COUP, double M3, double W3, std::complex<double> V3[]);
-
-void VVVV1P0_1(std::complex<double> V2[], std::complex<double> V3[],
-    std::complex<double> V4[], std::complex<double> COUP, double M1, double W1,
-    std::complex<double> V1[]);
-
-void VVV1P0_1(std::complex<double> V2[], std::complex<double> V3[],
-    std::complex<double> COUP, double M1, double W1, std::complex<double> V1[]);
-
-}  // end namespace MG5_sm_COLOREA
-
-#endif  // HelAmps_sm_H
diff --git a/Shower/Dipole/Colorea/Makefile.am b/Shower/Dipole/Colorea/Makefile.am
deleted file mode 100644
--- a/Shower/Dipole/Colorea/Makefile.am
+++ /dev/null
@@ -1,19 +0,0 @@
-noinst_LTLIBRARIES = libHwDipoleShowerColorea.la
-
-libHwDipoleShowerColorea_la_SOURCES = \
-	Colorea.fh \
-	Colorea.cc 	\
-	Colorea.h	\
-	HelAmps_sm.cc    \
-	HelAmps_sm.h     \
-	Parameters_sm.cc \
-	Parameters_sm.h  \
-	read_slha_COLOREA.cc	 \
-	read_slha_COLOREA.h	 \
-	eeuugg.h	 \
-	eeuugg.cc	 \
-	eeuuggg.h	 \
-	eeuuggg.cc	 \
-	eeuugggg.h	 \
-	eeuugggg.cc	
-
diff --git a/Shower/Dipole/Colorea/Parameters_sm.cc b/Shower/Dipole/Colorea/Parameters_sm.cc
deleted file mode 100644
--- a/Shower/Dipole/Colorea/Parameters_sm.cc
+++ /dev/null
@@ -1,241 +0,0 @@
-//==========================================================================
-// This file has been automatically generated for C++ by
-// MadGraph5_aMC@NLO v. 2.5.4, 2017-03-28
-// By the MadGraph5_aMC@NLO Development Team
-// Visit launchpad.net/madgraph5 and amcatnlo.web.cern.ch
-//==========================================================================
-
-#include <iostream> 
-#include <iomanip> 
-#include "Parameters_sm.h"
-
-// Initialize static instance
-Parameters_sm * Parameters_sm::instance = 0; 
-
-// Function to get static instance - only one instance per program
-Parameters_sm * Parameters_sm::getInstance()
-{
-  if (instance == 0)
-    instance = new Parameters_sm(); 
-
-  return instance; 
-}
-
-void Parameters_sm::setIndependentParameters(SLHAReader_COLOREA& slha)
-{
-  // Define "zero"
-  zero = 0; 
-  ZERO = 0; 
-  // Prepare a vector for indices
-  vector<int> indices(2, 0); 
-  mdl_WH = slha.get_block_entry("decay", 25, 6.382339e-03); 
-  mdl_WW = slha.get_block_entry("decay", 24, 2.047600e+00); 
-  mdl_WZ = slha.get_block_entry("decay", 23, 2.441404e+00); 
-  mdl_WT = slha.get_block_entry("decay", 6, 1.491500e+00); 
-  mdl_ymtau = slha.get_block_entry("yukawa", 15, 1.777000e+00); 
-  mdl_ymt = slha.get_block_entry("yukawa", 6, 1.730000e+02); 
-  mdl_ymb = slha.get_block_entry("yukawa", 5, 4.700000e+00); 
-  aS = slha.get_block_entry("sminputs", 3, 1.180000e-01); 
-  mdl_Gf = slha.get_block_entry("sminputs", 2, 1.166390e-05); 
-  aEWM1 = slha.get_block_entry("sminputs", 1, 1.325070e+02); 
-  mdl_MH = slha.get_block_entry("mass", 25, 1.250000e+02); 
-  mdl_MZ = slha.get_block_entry("mass", 23, 9.118800e+01); 
-  mdl_MTA = slha.get_block_entry("mass", 15, 1.777000e+00); 
-  mdl_MT = slha.get_block_entry("mass", 6, 1.730000e+02); 
-  mdl_MB = slha.get_block_entry("mass", 5, 4.700000e+00); 
-  mdl_conjg__CKM3x3 = 1.; 
-  mdl_CKM3x3 = 1.; 
-  mdl_conjg__CKM1x1 = 1.; 
-  mdl_complexi = std::complex<double> (0., 1.); 
-  mdl_MZ__exp__2 = ((mdl_MZ) * (mdl_MZ)); 
-  mdl_MZ__exp__4 = ((mdl_MZ) * (mdl_MZ) * (mdl_MZ) * (mdl_MZ)); 
-  mdl_sqrt__2 = sqrt(2.); 
-  mdl_MH__exp__2 = ((mdl_MH) * (mdl_MH)); 
-  mdl_aEW = 1./aEWM1; 
-  mdl_MW = sqrt(mdl_MZ__exp__2/2. + sqrt(mdl_MZ__exp__4/4. - (mdl_aEW * M_PI *
-      mdl_MZ__exp__2)/(mdl_Gf * mdl_sqrt__2)));
-  mdl_sqrt__aEW = sqrt(mdl_aEW); 
-  mdl_ee = 2. * mdl_sqrt__aEW * sqrt(M_PI); 
-  mdl_MW__exp__2 = ((mdl_MW) * (mdl_MW)); 
-  mdl_sw2 = 1. - mdl_MW__exp__2/mdl_MZ__exp__2; 
-  mdl_cw = sqrt(1. - mdl_sw2); 
-  mdl_sqrt__sw2 = sqrt(mdl_sw2); 
-  mdl_sw = mdl_sqrt__sw2; 
-  mdl_g1 = mdl_ee/mdl_cw; 
-  mdl_gw = mdl_ee/mdl_sw; 
-  mdl_vev = (2. * mdl_MW * mdl_sw)/mdl_ee; 
-  mdl_vev__exp__2 = ((mdl_vev) * (mdl_vev)); 
-  mdl_lam = mdl_MH__exp__2/(2. * mdl_vev__exp__2); 
-  mdl_yb = (mdl_ymb * mdl_sqrt__2)/mdl_vev; 
-  mdl_yt = (mdl_ymt * mdl_sqrt__2)/mdl_vev; 
-  mdl_ytau = (mdl_ymtau * mdl_sqrt__2)/mdl_vev; 
-  mdl_muH = sqrt(mdl_lam * mdl_vev__exp__2); 
-  mdl_I1x33 = mdl_yb * mdl_conjg__CKM3x3; 
-  mdl_I2x33 = mdl_yt * mdl_conjg__CKM3x3; 
-  mdl_I3x33 = mdl_CKM3x3 * mdl_yt; 
-  mdl_I4x33 = mdl_CKM3x3 * mdl_yb; 
-  mdl_ee__exp__2 = ((mdl_ee) * (mdl_ee)); 
-  mdl_sw__exp__2 = ((mdl_sw) * (mdl_sw)); 
-  mdl_cw__exp__2 = ((mdl_cw) * (mdl_cw)); 
-}
-void Parameters_sm::setIndependentCouplings()
-{
-  GC_2 = (2. * mdl_ee * mdl_complexi)/3.; 
-  GC_3 = -(mdl_ee * mdl_complexi); 
-  GC_50 = -(mdl_cw * mdl_ee * mdl_complexi)/(2. * mdl_sw); 
-  GC_51 = (mdl_cw * mdl_ee * mdl_complexi)/(2. * mdl_sw); 
-  GC_58 = -(mdl_ee * mdl_complexi * mdl_sw)/(6. * mdl_cw); 
-  GC_59 = (mdl_ee * mdl_complexi * mdl_sw)/(2. * mdl_cw); 
-}
-void Parameters_sm::setDependentParameters()
-{
-  mdl_sqrt__aS = sqrt(aS); 
-  G = 2. * mdl_sqrt__aS * sqrt(M_PI); 
-  mdl_G__exp__2 = ((G) * (G)); 
-}
-void Parameters_sm::setDependentCouplings()
-{
-  GC_12 = mdl_complexi * mdl_G__exp__2; 
-  GC_11 = mdl_complexi * G; 
-  GC_10 = -G; 
-}
-
-// Routines for printing out parameters
-void Parameters_sm::printIndependentParameters()
-{
-  cout <<  "sm model parameters independent of event kinematics:" << endl; 
-  cout << setw(20) <<  "mdl_WH " <<  "= " << setiosflags(ios::scientific) <<
-      setw(10) << mdl_WH << endl;
-  cout << setw(20) <<  "mdl_WW " <<  "= " << setiosflags(ios::scientific) <<
-      setw(10) << mdl_WW << endl;
-  cout << setw(20) <<  "mdl_WZ " <<  "= " << setiosflags(ios::scientific) <<
-      setw(10) << mdl_WZ << endl;
-  cout << setw(20) <<  "mdl_WT " <<  "= " << setiosflags(ios::scientific) <<
-      setw(10) << mdl_WT << endl;
-  cout << setw(20) <<  "mdl_ymtau " <<  "= " << setiosflags(ios::scientific) <<
-      setw(10) << mdl_ymtau << endl;
-  cout << setw(20) <<  "mdl_ymt " <<  "= " << setiosflags(ios::scientific) <<
-      setw(10) << mdl_ymt << endl;
-  cout << setw(20) <<  "mdl_ymb " <<  "= " << setiosflags(ios::scientific) <<
-      setw(10) << mdl_ymb << endl;
-  cout << setw(20) <<  "aS " <<  "= " << setiosflags(ios::scientific) <<
-      setw(10) << aS << endl;
-  cout << setw(20) <<  "mdl_Gf " <<  "= " << setiosflags(ios::scientific) <<
-      setw(10) << mdl_Gf << endl;
-  cout << setw(20) <<  "aEWM1 " <<  "= " << setiosflags(ios::scientific) <<
-      setw(10) << aEWM1 << endl;
-  cout << setw(20) <<  "mdl_MH " <<  "= " << setiosflags(ios::scientific) <<
-      setw(10) << mdl_MH << endl;
-  cout << setw(20) <<  "mdl_MZ " <<  "= " << setiosflags(ios::scientific) <<
-      setw(10) << mdl_MZ << endl;
-  cout << setw(20) <<  "mdl_MTA " <<  "= " << setiosflags(ios::scientific) <<
-      setw(10) << mdl_MTA << endl;
-  cout << setw(20) <<  "mdl_MT " <<  "= " << setiosflags(ios::scientific) <<
-      setw(10) << mdl_MT << endl;
-  cout << setw(20) <<  "mdl_MB " <<  "= " << setiosflags(ios::scientific) <<
-      setw(10) << mdl_MB << endl;
-  cout << setw(20) <<  "mdl_conjg__CKM3x3 " <<  "= " <<
-      setiosflags(ios::scientific) << setw(10) << mdl_conjg__CKM3x3 << endl;
-  cout << setw(20) <<  "mdl_CKM3x3 " <<  "= " << setiosflags(ios::scientific)
-      << setw(10) << mdl_CKM3x3 << endl;
-  cout << setw(20) <<  "mdl_conjg__CKM1x1 " <<  "= " <<
-      setiosflags(ios::scientific) << setw(10) << mdl_conjg__CKM1x1 << endl;
-  cout << setw(20) <<  "mdl_complexi " <<  "= " << setiosflags(ios::scientific)
-      << setw(10) << mdl_complexi << endl;
-  cout << setw(20) <<  "mdl_MZ__exp__2 " <<  "= " <<
-      setiosflags(ios::scientific) << setw(10) << mdl_MZ__exp__2 << endl;
-  cout << setw(20) <<  "mdl_MZ__exp__4 " <<  "= " <<
-      setiosflags(ios::scientific) << setw(10) << mdl_MZ__exp__4 << endl;
-  cout << setw(20) <<  "mdl_sqrt__2 " <<  "= " << setiosflags(ios::scientific)
-      << setw(10) << mdl_sqrt__2 << endl;
-  cout << setw(20) <<  "mdl_MH__exp__2 " <<  "= " <<
-      setiosflags(ios::scientific) << setw(10) << mdl_MH__exp__2 << endl;
-  cout << setw(20) <<  "mdl_aEW " <<  "= " << setiosflags(ios::scientific) <<
-      setw(10) << mdl_aEW << endl;
-  cout << setw(20) <<  "mdl_MW " <<  "= " << setiosflags(ios::scientific) <<
-      setw(10) << mdl_MW << endl;
-  cout << setw(20) <<  "mdl_sqrt__aEW " <<  "= " <<
-      setiosflags(ios::scientific) << setw(10) << mdl_sqrt__aEW << endl;
-  cout << setw(20) <<  "mdl_ee " <<  "= " << setiosflags(ios::scientific) <<
-      setw(10) << mdl_ee << endl;
-  cout << setw(20) <<  "mdl_MW__exp__2 " <<  "= " <<
-      setiosflags(ios::scientific) << setw(10) << mdl_MW__exp__2 << endl;
-  cout << setw(20) <<  "mdl_sw2 " <<  "= " << setiosflags(ios::scientific) <<
-      setw(10) << mdl_sw2 << endl;
-  cout << setw(20) <<  "mdl_cw " <<  "= " << setiosflags(ios::scientific) <<
-      setw(10) << mdl_cw << endl;
-  cout << setw(20) <<  "mdl_sqrt__sw2 " <<  "= " <<
-      setiosflags(ios::scientific) << setw(10) << mdl_sqrt__sw2 << endl;
-  cout << setw(20) <<  "mdl_sw " <<  "= " << setiosflags(ios::scientific) <<
-      setw(10) << mdl_sw << endl;
-  cout << setw(20) <<  "mdl_g1 " <<  "= " << setiosflags(ios::scientific) <<
-      setw(10) << mdl_g1 << endl;
-  cout << setw(20) <<  "mdl_gw " <<  "= " << setiosflags(ios::scientific) <<
-      setw(10) << mdl_gw << endl;
-  cout << setw(20) <<  "mdl_vev " <<  "= " << setiosflags(ios::scientific) <<
-      setw(10) << mdl_vev << endl;
-  cout << setw(20) <<  "mdl_vev__exp__2 " <<  "= " <<
-      setiosflags(ios::scientific) << setw(10) << mdl_vev__exp__2 << endl;
-  cout << setw(20) <<  "mdl_lam " <<  "= " << setiosflags(ios::scientific) <<
-      setw(10) << mdl_lam << endl;
-  cout << setw(20) <<  "mdl_yb " <<  "= " << setiosflags(ios::scientific) <<
-      setw(10) << mdl_yb << endl;
-  cout << setw(20) <<  "mdl_yt " <<  "= " << setiosflags(ios::scientific) <<
-      setw(10) << mdl_yt << endl;
-  cout << setw(20) <<  "mdl_ytau " <<  "= " << setiosflags(ios::scientific) <<
-      setw(10) << mdl_ytau << endl;
-  cout << setw(20) <<  "mdl_muH " <<  "= " << setiosflags(ios::scientific) <<
-      setw(10) << mdl_muH << endl;
-  cout << setw(20) <<  "mdl_I1x33 " <<  "= " << setiosflags(ios::scientific) <<
-      setw(10) << mdl_I1x33 << endl;
-  cout << setw(20) <<  "mdl_I2x33 " <<  "= " << setiosflags(ios::scientific) <<
-      setw(10) << mdl_I2x33 << endl;
-  cout << setw(20) <<  "mdl_I3x33 " <<  "= " << setiosflags(ios::scientific) <<
-      setw(10) << mdl_I3x33 << endl;
-  cout << setw(20) <<  "mdl_I4x33 " <<  "= " << setiosflags(ios::scientific) <<
-      setw(10) << mdl_I4x33 << endl;
-  cout << setw(20) <<  "mdl_ee__exp__2 " <<  "= " <<
-      setiosflags(ios::scientific) << setw(10) << mdl_ee__exp__2 << endl;
-  cout << setw(20) <<  "mdl_sw__exp__2 " <<  "= " <<
-      setiosflags(ios::scientific) << setw(10) << mdl_sw__exp__2 << endl;
-  cout << setw(20) <<  "mdl_cw__exp__2 " <<  "= " <<
-      setiosflags(ios::scientific) << setw(10) << mdl_cw__exp__2 << endl;
-}
-void Parameters_sm::printIndependentCouplings()
-{
-  cout <<  "sm model couplings independent of event kinematics:" << endl; 
-  cout << setw(20) <<  "GC_2 " <<  "= " << setiosflags(ios::scientific) <<
-      setw(10) << GC_2 << endl;
-  cout << setw(20) <<  "GC_3 " <<  "= " << setiosflags(ios::scientific) <<
-      setw(10) << GC_3 << endl;
-  cout << setw(20) <<  "GC_50 " <<  "= " << setiosflags(ios::scientific) <<
-      setw(10) << GC_50 << endl;
-  cout << setw(20) <<  "GC_51 " <<  "= " << setiosflags(ios::scientific) <<
-      setw(10) << GC_51 << endl;
-  cout << setw(20) <<  "GC_58 " <<  "= " << setiosflags(ios::scientific) <<
-      setw(10) << GC_58 << endl;
-  cout << setw(20) <<  "GC_59 " <<  "= " << setiosflags(ios::scientific) <<
-      setw(10) << GC_59 << endl;
-}
-void Parameters_sm::printDependentParameters()
-{
-  cout <<  "sm model parameters dependent on event kinematics:" << endl; 
-  cout << setw(20) <<  "mdl_sqrt__aS " <<  "= " << setiosflags(ios::scientific)
-      << setw(10) << mdl_sqrt__aS << endl;
-  cout << setw(20) <<  "G " <<  "= " << setiosflags(ios::scientific) <<
-      setw(10) << G << endl;
-  cout << setw(20) <<  "mdl_G__exp__2 " <<  "= " <<
-      setiosflags(ios::scientific) << setw(10) << mdl_G__exp__2 << endl;
-}
-void Parameters_sm::printDependentCouplings()
-{
-  cout <<  "sm model couplings dependent on event kinematics:" << endl; 
-  cout << setw(20) <<  "GC_12 " <<  "= " << setiosflags(ios::scientific) <<
-      setw(10) << GC_12 << endl;
-  cout << setw(20) <<  "GC_11 " <<  "= " << setiosflags(ios::scientific) <<
-      setw(10) << GC_11 << endl;
-  cout << setw(20) <<  "GC_10 " <<  "= " << setiosflags(ios::scientific) <<
-      setw(10) << GC_10 << endl;
-}
-
-
diff --git a/Shower/Dipole/Colorea/Parameters_sm.h b/Shower/Dipole/Colorea/Parameters_sm.h
deleted file mode 100644
--- a/Shower/Dipole/Colorea/Parameters_sm.h
+++ /dev/null
@@ -1,66 +0,0 @@
-//==========================================================================
-// This file has been automatically generated for C++
-// MadGraph5_aMC@NLO v. 2.5.4, 2017-03-28
-// By the MadGraph5_aMC@NLO Development Team
-// Visit launchpad.net/madgraph5 and amcatnlo.web.cern.ch
-//==========================================================================
-
-#ifndef Parameters_sm_H
-#define Parameters_sm_H
-
-#include <complex> 
-
-#include "read_slha_COLOREA.h"
-using namespace std; 
-
-class Parameters_sm
-{
-  public:
-
-    static Parameters_sm * getInstance(); 
-
-    // Define "zero"
-    double zero, ZERO; 
-    // Model parameters independent of aS
-    double mdl_WH, mdl_WW, mdl_WZ, mdl_WT, mdl_ymtau, mdl_ymt, mdl_ymb, aS,
-        mdl_Gf, aEWM1, mdl_MH, mdl_MZ, mdl_MTA, mdl_MT, mdl_MB,
-        mdl_conjg__CKM3x3, mdl_CKM3x3, mdl_conjg__CKM1x1, mdl_MZ__exp__2,
-        mdl_MZ__exp__4, mdl_sqrt__2, mdl_MH__exp__2, mdl_aEW, mdl_MW,
-        mdl_sqrt__aEW, mdl_ee, mdl_MW__exp__2, mdl_sw2, mdl_cw, mdl_sqrt__sw2,
-        mdl_sw, mdl_g1, mdl_gw, mdl_vev, mdl_vev__exp__2, mdl_lam, mdl_yb,
-        mdl_yt, mdl_ytau, mdl_muH, mdl_ee__exp__2, mdl_sw__exp__2,
-        mdl_cw__exp__2;
-    std::complex<double> mdl_complexi, mdl_I1x33, mdl_I2x33, mdl_I3x33,
-        mdl_I4x33;
-    // Model parameters dependent on aS
-    double mdl_sqrt__aS, G, mdl_G__exp__2; 
-    // Model couplings independent of aS
-    std::complex<double> GC_2, GC_3, GC_50, GC_51, GC_58, GC_59; 
-    // Model couplings dependent on aS
-    std::complex<double> GC_12, GC_11, GC_10; 
-
-    // Set parameters that are unchanged during the run
-    void setIndependentParameters(SLHAReader_COLOREA& slha);
-    // Set couplings that are unchanged during the run
-    void setIndependentCouplings(); 
-    // Set parameters that are changed event by event
-    void setDependentParameters(); 
-    // Set couplings that are changed event by event
-    void setDependentCouplings(); 
-
-    // Print parameters that are unchanged during the run
-    void printIndependentParameters(); 
-    // Print couplings that are unchanged during the run
-    void printIndependentCouplings(); 
-    // Print parameters that are changed event by event
-    void printDependentParameters(); 
-    // Print couplings that are changed event by event
-    void printDependentCouplings(); 
-
-
-  private:
-    static Parameters_sm * instance; 
-}; 
-
-#endif  // Parameters_sm_H
-
diff --git a/Shower/Dipole/Colorea/eeuugg.cc b/Shower/Dipole/Colorea/eeuugg.cc
deleted file mode 100644
--- a/Shower/Dipole/Colorea/eeuugg.cc
+++ /dev/null
@@ -1,291 +0,0 @@
-//==========================================================================
-// This file has been automatically generated for C++ Standalone by
-// MadGraph5_aMC@NLO v. 2.5.4, 2017-03-28
-// By the MadGraph5_aMC@NLO Development Team
-// Visit launchpad.net/madgraph5 and amcatnlo.web.cern.ch
-//==========================================================================
-// and was then modified by J. Bellm.
-#include "eeuugg.h"
-#include "HelAmps_sm.h"
-#include <iostream>
-
-using namespace MG5_sm_COLOREA; 
-
-//==========================================================================
-// Class member functions for calculating the matrix elements for
-// Process: e+ e- > u u~ g g WEIGHTED<=6 @1
-
-//--------------------------------------------------------------------------
-// Initialize process.
-
-vector<int> eeuugg::producePermutation(double r,vector < double * > & momenta){
-  
-  setMomenta(momenta);
-  sigmaKin();
-  
-  static const int res[2][5] = {
-    {5, 6, 3, 4, 0},
-    {6, 5, 3, 4, 0}};
-  
-  double jampsum=0.;
-  for( int i=0;i<2;i++) jampsum+=jamp2[0][i];
-//  std::cout<<"\njampsum "<<jampsum<<std::flush;
-  double cur=0.;
-
-  for(int i=0;i<2;i++){
-//    std::cout<<"\njamp2[0][i] "<<jamp2[0][i]<<std::flush;
-    cur+=jamp2[0][i];
-    if( cur/jampsum > r )return std::vector<int>(res[i], res[i] + sizeof res[i] / sizeof res[i][0]);
-  }
-  std::cerr<<"\nproducePermutation: Upps.. Something went wrong!!\n"<<std::flush;
-  return  std::vector<int>();
-}
-
-
-
-void eeuugg::initProc(string param_card_name)
-{
-  cout<<"\nColorea: Init process eeuugg for rearrangement (arXiv:1801.06113).";
-  // Instantiate the model class and set parameters that stay fixed during run
-  pars = Parameters_sm::getInstance(); 
-  SLHAReader_COLOREA slha(param_card_name); 
-  pars->setIndependentParameters(slha); 
-  pars->setIndependentCouplings(); 
-//  pars->printIndependentParameters();
-//  pars->printIndependentCouplings();
-  // Set external particle masses for this matrix element
-  mME.push_back(pars->ZERO); 
-  mME.push_back(pars->ZERO); 
-  mME.push_back(pars->ZERO); 
-  mME.push_back(pars->ZERO); 
-  mME.push_back(pars->ZERO); 
-  mME.push_back(pars->ZERO); 
-  jamp2[0] = new double[2]; 
-}
-
-//--------------------------------------------------------------------------
-// Evaluate |M|^2, part independent of incoming flavour.
-
-void eeuugg::sigmaKin()
-{
-  // Set the parameters which change event by event
-  pars->setDependentParameters(); 
-  pars->setDependentCouplings(); 
-  static bool firsttime = true; 
-  if (firsttime)
-  {
-//    pars->printDependentParameters();
-//    pars->printDependentCouplings(); 
-    firsttime = false;
-  }
-
-  // Reset color flows
-  for(int i = 0; i < 2; i++ )
-    jamp2[0][i] = 0.; 
-
-  // Local variables and constants
-  const int ncomb = 64; 
-  static bool goodhel[ncomb] = {false}; 
-  static int ntry = 0, sum_hel = 0, ngood = 0; 
-  static int igood[ncomb]; 
-  static int jhel;
-  double t[nprocesses]; 
-  // Helicities for the process
-  static const int helicities[ncomb][nexternal] = {{-1, -1, -1, -1, -1, -1},
-      {-1, -1, -1, -1, -1, 1}, {-1, -1, -1, -1, 1, -1}, {-1, -1, -1, -1, 1, 1},
-      {-1, -1, -1, 1, -1, -1}, {-1, -1, -1, 1, -1, 1}, {-1, -1, -1, 1, 1, -1},
-      {-1, -1, -1, 1, 1, 1}, {-1, -1, 1, -1, -1, -1}, {-1, -1, 1, -1, -1, 1},
-      {-1, -1, 1, -1, 1, -1}, {-1, -1, 1, -1, 1, 1}, {-1, -1, 1, 1, -1, -1},
-      {-1, -1, 1, 1, -1, 1}, {-1, -1, 1, 1, 1, -1}, {-1, -1, 1, 1, 1, 1}, {-1,
-      1, -1, -1, -1, -1}, {-1, 1, -1, -1, -1, 1}, {-1, 1, -1, -1, 1, -1}, {-1,
-      1, -1, -1, 1, 1}, {-1, 1, -1, 1, -1, -1}, {-1, 1, -1, 1, -1, 1}, {-1, 1,
-      -1, 1, 1, -1}, {-1, 1, -1, 1, 1, 1}, {-1, 1, 1, -1, -1, -1}, {-1, 1, 1,
-      -1, -1, 1}, {-1, 1, 1, -1, 1, -1}, {-1, 1, 1, -1, 1, 1}, {-1, 1, 1, 1,
-      -1, -1}, {-1, 1, 1, 1, -1, 1}, {-1, 1, 1, 1, 1, -1}, {-1, 1, 1, 1, 1, 1},
-      {1, -1, -1, -1, -1, -1}, {1, -1, -1, -1, -1, 1}, {1, -1, -1, -1, 1, -1},
-      {1, -1, -1, -1, 1, 1}, {1, -1, -1, 1, -1, -1}, {1, -1, -1, 1, -1, 1}, {1,
-      -1, -1, 1, 1, -1}, {1, -1, -1, 1, 1, 1}, {1, -1, 1, -1, -1, -1}, {1, -1,
-      1, -1, -1, 1}, {1, -1, 1, -1, 1, -1}, {1, -1, 1, -1, 1, 1}, {1, -1, 1, 1,
-      -1, -1}, {1, -1, 1, 1, -1, 1}, {1, -1, 1, 1, 1, -1}, {1, -1, 1, 1, 1, 1},
-      {1, 1, -1, -1, -1, -1}, {1, 1, -1, -1, -1, 1}, {1, 1, -1, -1, 1, -1}, {1,
-      1, -1, -1, 1, 1}, {1, 1, -1, 1, -1, -1}, {1, 1, -1, 1, -1, 1}, {1, 1, -1,
-      1, 1, -1}, {1, 1, -1, 1, 1, 1}, {1, 1, 1, -1, -1, -1}, {1, 1, 1, -1, -1,
-      1}, {1, 1, 1, -1, 1, -1}, {1, 1, 1, -1, 1, 1}, {1, 1, 1, 1, -1, -1}, {1,
-      1, 1, 1, -1, 1}, {1, 1, 1, 1, 1, -1}, {1, 1, 1, 1, 1, 1}};
-  // Denominators: spins, colors and identical particles
-  const int denominators[nprocesses] = {8}; 
-
-  ntry = ntry + 1; 
-
-  // Reset the matrix elements
-  for(int i = 0; i < nprocesses; i++ )
-  {
-    matrix_element[i] = 0.; 
-  }
-  // Define permutation
-  int perm[nexternal]; 
-  for(int i = 0; i < nexternal; i++ )
-  {
-    perm[i] = i; 
-  }
-
-  if (sum_hel == 0 || ntry < 10)
-  {
-    // Calculate the matrix element for all helicities
-    for(int ihel = 0; ihel < ncomb; ihel++ )
-    {
-      if (goodhel[ihel] || ntry < 2)
-      {
-        calculate_wavefunctions(perm, helicities[ihel]); 
-        t[0] = matrix_1_epem_uuxgg(); 
-
-        double tsum = 0; 
-        for(int iproc = 0; iproc < nprocesses; iproc++ )
-        {
-          matrix_element[iproc] += t[iproc]; 
-          tsum += t[iproc]; 
-        }
-        // Store which helicities give non-zero result
-        if (tsum != 0. && !goodhel[ihel])
-        {
-          goodhel[ihel] = true; 
-          ngood++; 
-          igood[ngood] = ihel; 
-        }
-      }
-    }
-    jhel = 0; 
-    sum_hel = min(sum_hel, ngood); 
-  }
-  else
-  {
-    // Only use the "good" helicities
-    for(int j = 0; j < sum_hel; j++ )
-    {
-      jhel++; 
-      if (jhel >= ngood)
-        jhel = 0; 
-      double hwgt = double(ngood)/double(sum_hel); 
-      int ihel = igood[jhel]; 
-      calculate_wavefunctions(perm, helicities[ihel]); 
-      t[0] = matrix_1_epem_uuxgg(); 
-
-      for(int iproc = 0; iproc < nprocesses; iproc++ )
-      {
-        matrix_element[iproc] += t[iproc] * hwgt; 
-      }
-    }
-  }
-
-  for (int i = 0; i < nprocesses; i++ )
-    matrix_element[i] /= denominators[i]; 
-
-
-
-}
-
-
-//--------------------------------------------------------------------------
-// Evaluate |M|^2 for each subprocess
-
-void eeuugg::calculate_wavefunctions(const int perm[], const int hel[])
-{
-  // Calculate wavefunctions for all processes
-  
-
-  // Calculate all wavefunctions
-  oxxxxx(p[perm[0]], mME[0], hel[0], -1, w[0]); 
-  ixxxxx(p[perm[1]], mME[1], hel[1], +1, w[1]); 
-  oxxxxx(p[perm[2]], mME[2], hel[2], +1, w[2]); 
-  ixxxxx(p[perm[3]], mME[3], hel[3], -1, w[3]); 
-  vxxxxx(p[perm[4]], mME[4], hel[4], +1, w[4]); 
-  vxxxxx(p[perm[5]], mME[5], hel[5], +1, w[5]); 
-  FFV1P0_3(w[1], w[0], pars->GC_3, pars->ZERO, pars->ZERO, w[6]); 
-  FFV1_1(w[2], w[4], pars->GC_11, pars->ZERO, pars->ZERO, w[7]); 
-  FFV1_2(w[3], w[6], pars->GC_2, pars->ZERO, pars->ZERO, w[8]); 
-  FFV2_4_3(w[1], w[0], pars->GC_50, pars->GC_59, pars->mdl_MZ, pars->mdl_WZ,
-      w[9]);
-  FFV2_5_2(w[3], w[9], pars->GC_51, pars->GC_58, pars->ZERO, pars->ZERO,
-      w[10]);
-  FFV1_2(w[3], w[5], pars->GC_11, pars->ZERO, pars->ZERO, w[11]); 
-  FFV1_1(w[2], w[5], pars->GC_11, pars->ZERO, pars->ZERO, w[12]); 
-  FFV1_2(w[3], w[4], pars->GC_11, pars->ZERO, pars->ZERO, w[13]); 
-  FFV1_1(w[2], w[6], pars->GC_2, pars->ZERO, pars->ZERO, w[14]); 
-  FFV2_5_1(w[2], w[9], pars->GC_51, pars->GC_58, pars->ZERO, pars->ZERO,
-      w[15]);
-  VVV1P0_1(w[4], w[5], pars->GC_10, pars->ZERO, pars->ZERO, w[16]); 
-
-  // Calculate all amplitudes
-  // Amplitude(s) for diagram number 0
-  FFV1_0(w[8], w[7], w[5], pars->GC_11, amp[0]); 
-  FFV1_0(w[10], w[7], w[5], pars->GC_11, amp[1]); 
-  FFV1_0(w[11], w[7], w[6], pars->GC_2, amp[2]); 
-  FFV2_5_0(w[11], w[7], w[9], pars->GC_51, pars->GC_58, amp[3]); 
-  FFV1_0(w[8], w[12], w[4], pars->GC_11, amp[4]); 
-  FFV1_0(w[10], w[12], w[4], pars->GC_11, amp[5]); 
-  FFV1_0(w[13], w[12], w[6], pars->GC_2, amp[6]); 
-  FFV2_5_0(w[13], w[12], w[9], pars->GC_51, pars->GC_58, amp[7]); 
-  FFV1_0(w[13], w[14], w[5], pars->GC_11, amp[8]); 
-  FFV1_0(w[13], w[15], w[5], pars->GC_11, amp[9]); 
-  FFV1_0(w[11], w[14], w[4], pars->GC_11, amp[10]); 
-  FFV1_0(w[11], w[15], w[4], pars->GC_11, amp[11]); 
-  FFV1_0(w[3], w[14], w[16], pars->GC_11, amp[12]); 
-  FFV1_0(w[8], w[2], w[16], pars->GC_11, amp[13]); 
-  FFV1_0(w[3], w[15], w[16], pars->GC_11, amp[14]); 
-  FFV1_0(w[10], w[2], w[16], pars->GC_11, amp[15]); 
-
-}
-double eeuugg::matrix_1_epem_uuxgg()
-{
-  //int i, j;
-  // Local variables
-  //const int ngraphs = 16;
-  //const int ncolor = 2;
-  std::complex<double> jamp[2];
-  // The color matrix;
-  //static const double denom[ncolor] = {3, 3};
-  //static const double cf[ncolor][ncolor] = {{16, -2}, {-2, 16}};
-
-  // Calculate color flows
-  jamp[0] = +amp[0] + amp[1] + amp[2] + amp[3] + amp[10] + amp[11] -
-      std::complex<double> (0, 1) * amp[12] - std::complex<double> (0, 1) *
-      amp[13] - std::complex<double> (0, 1) * amp[14] - std::complex<double>
-      (0, 1) * amp[15];
-  jamp[1] = +amp[4] + amp[5] + amp[6] + amp[7] + amp[8] + amp[9] +
-      std::complex<double> (0, 1) * amp[12] + std::complex<double> (0, 1) *
-      amp[13] + std::complex<double> (0, 1) * amp[14] + std::complex<double>
-      (0, 1) * amp[15];
-
-  // Store the leading color flows for choice of color
-  for(int i = 0; i < 2; i++ )
-    jamp2[0][i] += real(jamp[i] * conj(jamp[i])); 
-
-  return -1.;
-}
-
-
-double eeuugg::get_jamp2(int i)
-{
-  return jamp2[0][i];
-}
-
-int eeuugg::colorstring(int i, int j)
-{
-  static const double res[2][5] = {
-    {5, 6, 3, 4, 0},
-    {6, 5, 3, 4, 0}};
-  return res[i][j];
-}
-
-
-int eeuugg::NCol()
-{
-  const int ncolor = 2;
-  return ncolor;
-}
-
-
-
-
-
-
diff --git a/Shower/Dipole/Colorea/eeuugg.h b/Shower/Dipole/Colorea/eeuugg.h
deleted file mode 100644
--- a/Shower/Dipole/Colorea/eeuugg.h
+++ /dev/null
@@ -1,52 +0,0 @@
-  //==========================================================================
-  // This file has been automatically generated for C++ Standalone by
-  // MadGraph5_aMC@NLO v. 2.5.4, 2017-03-28
-  // By the MadGraph5_aMC@NLO Development Team
-  // Visit launchpad.net/madgraph5 and amcatnlo.web.cern.ch
-  //==========================================================================
-  // and was then modified by J. Bellm.
-#ifndef MG5_Sigma_sm_epem_uuxgg_H
-#define MG5_Sigma_sm_epem_uuxgg_H
-#include <complex> 
-#include <vector>
-#include "Parameters_sm.h"
-using namespace std;
-class eeuugg
-{
-  public:
-  eeuugg() {
-      initProc("param_card.dat");
-  }
-    // Retrun the prefered gluon order
-  vector<int> producePermutation(double r,vector < double * > & momenta);
-  void setMass(int i,double M){mME[i]=M;}
-  private:
-    ///////// Process Dependent
-  static const int ninitial = 2;
-  static const int nexternal = 6;
-  static const int nprocesses = 1;
-  static const int nwavefuncs = 17;
-  static const int namplitudes = 16;
-  std::complex<double> w[nwavefuncs][18];
-  double matrix_1_epem_uuxgg();
-    ///////// Generic
-  double matrix_element[nprocesses];
-  std::complex<double> amp[namplitudes];
-  double * jamp2[nprocesses];
-  Parameters_sm * pars;
-  vector<double> mME;
-  vector < double * > p;
-  int id1, id2;
-  void initProc(string param_card_name);
-  void sigmaKin();
-  const vector<double> & getMasses() const {return mME;}
-  vector < double * > getMomenta(){return p;}
-  void setMomenta(vector < double * > & momenta){p = momenta;}
-  void setInitial(int inid1, int inid2){id1 = inid1; id2 = inid2;}
-  void calculate_wavefunctions(const int perm[], const int hel[]);
-    // New function
-  double get_jamp2(int i);
-  int colorstring(int i, int j);
-  int NCol();
-};
-#endif  // MG5_Sigma_sm_epem_uuxgg_H
diff --git a/Shower/Dipole/Colorea/eeuuggg.cc b/Shower/Dipole/Colorea/eeuuggg.cc
deleted file mode 100644
--- a/Shower/Dipole/Colorea/eeuuggg.cc
+++ /dev/null
@@ -1,531 +0,0 @@
-//==========================================================================
-// This file has been automatically generated for C++ Standalone by
-// MadGraph5_aMC@NLO v. 2.5.4, 2017-03-28
-// By the MadGraph5_aMC@NLO Development Team
-// Visit launchpad.net/madgraph5 and amcatnlo.web.cern.ch
-//==========================================================================
-// and was then modified by J. Bellm.
-#include "eeuuggg.h"
-#include "HelAmps_sm.h"
-#include <iostream>
-
-using namespace MG5_sm_COLOREA; 
-
-//==========================================================================
-// Class member functions for calculating the matrix elements for
-// Process: e+ e- > u u~ g g g WEIGHTED<=7 @1
-
-//--------------------------------------------------------------------------
-// Initialize process.
-
-vector<int>  eeuuggg::producePermutation(double r,vector < double * > & momenta){
-  static bool initialized=false;
-  if (!initialized){
-    initProc("param_card.dat");
-    initialized=true;
-  }
-  setMomenta(momenta);
-  sigmaKin();
-  
-  static const int res[6][6] = {
-    {5, 6, 7, 3, 4, 0},
-    {5, 7, 6, 3, 4, 0},
-    {6, 5, 7, 3, 4, 0},
-    {6, 7, 5, 3, 4, 0},
-    {7, 5, 6, 3, 4, 0},
-    {7, 6, 5, 3, 4, 0}};
-  
-  double jampsum=0.;
-  for( int i=0;i<6;i++) jampsum+=jamp2[0][i];
-  double cur=0.;
-  for(int i=0;i<6;i++){
-    cur+=jamp2[0][i];
-    if( cur/jampsum > r )return std::vector<int>(res[i], res[i] + sizeof res[i] / sizeof res[i][0]);
-  }
-  //std::cout<<"producePermutation: Upps.. Something went wrong!!";
-  return  std::vector<int>();
-}
-
-
-void eeuuggg::initProc(string param_card_name)
-{
-  // Instantiate the model class and set parameters that stay fixed during run
-  cout<<"\nColorea: Init process eeuuggg for rearrangement (arXiv:1801.06113).";
-  pars = Parameters_sm::getInstance(); 
-  SLHAReader_COLOREA slha(param_card_name); 
-  pars->setIndependentParameters(slha); 
-  pars->setIndependentCouplings(); 
-//  pars->printIndependentParameters();
-//  pars->printIndependentCouplings();
-  // Set external particle masses for this matrix element
-  mME.push_back(pars->ZERO); 
-  mME.push_back(pars->ZERO); 
-  mME.push_back(pars->ZERO); 
-  mME.push_back(pars->ZERO); 
-  mME.push_back(pars->ZERO); 
-  mME.push_back(pars->ZERO); 
-  mME.push_back(pars->ZERO); 
-  jamp2[0] = new double[6]; 
-}
-
-//--------------------------------------------------------------------------
-// Evaluate |M|^2, part independent of incoming flavour.
-
-void eeuuggg::sigmaKin()
-{
-  // Set the parameters which change event by event
-  pars->setDependentParameters(); 
-  pars->setDependentCouplings(); 
-  static bool firsttime = true; 
-  if (firsttime)
-  {
-//    pars->printDependentParameters();
-//    pars->printDependentCouplings();
-    firsttime = false;
-  }
-
-  // Reset color flows
-  for(int i = 0; i < 6; i++ )
-    jamp2[0][i] = 0.; 
-
-  // Local variables and constants
-  const int ncomb = 128; 
-  static bool goodhel[ncomb] = {false}; 
-  static int ntry = 0, sum_hel = 0, ngood = 0; 
-  static int igood[ncomb]; 
-  static int jhel; 
-//  std::complex<double> * * wfs;
-  double t[nprocesses]; 
-  // Helicities for the process
-  static const int helicities[ncomb][nexternal] = {{-1, -1, -1, -1, -1, -1,
-      -1}, {-1, -1, -1, -1, -1, -1, 1}, {-1, -1, -1, -1, -1, 1, -1}, {-1, -1,
-      -1, -1, -1, 1, 1}, {-1, -1, -1, -1, 1, -1, -1}, {-1, -1, -1, -1, 1, -1,
-      1}, {-1, -1, -1, -1, 1, 1, -1}, {-1, -1, -1, -1, 1, 1, 1}, {-1, -1, -1,
-      1, -1, -1, -1}, {-1, -1, -1, 1, -1, -1, 1}, {-1, -1, -1, 1, -1, 1, -1},
-      {-1, -1, -1, 1, -1, 1, 1}, {-1, -1, -1, 1, 1, -1, -1}, {-1, -1, -1, 1, 1,
-      -1, 1}, {-1, -1, -1, 1, 1, 1, -1}, {-1, -1, -1, 1, 1, 1, 1}, {-1, -1, 1,
-      -1, -1, -1, -1}, {-1, -1, 1, -1, -1, -1, 1}, {-1, -1, 1, -1, -1, 1, -1},
-      {-1, -1, 1, -1, -1, 1, 1}, {-1, -1, 1, -1, 1, -1, -1}, {-1, -1, 1, -1, 1,
-      -1, 1}, {-1, -1, 1, -1, 1, 1, -1}, {-1, -1, 1, -1, 1, 1, 1}, {-1, -1, 1,
-      1, -1, -1, -1}, {-1, -1, 1, 1, -1, -1, 1}, {-1, -1, 1, 1, -1, 1, -1},
-      {-1, -1, 1, 1, -1, 1, 1}, {-1, -1, 1, 1, 1, -1, -1}, {-1, -1, 1, 1, 1,
-      -1, 1}, {-1, -1, 1, 1, 1, 1, -1}, {-1, -1, 1, 1, 1, 1, 1}, {-1, 1, -1,
-      -1, -1, -1, -1}, {-1, 1, -1, -1, -1, -1, 1}, {-1, 1, -1, -1, -1, 1, -1},
-      {-1, 1, -1, -1, -1, 1, 1}, {-1, 1, -1, -1, 1, -1, -1}, {-1, 1, -1, -1, 1,
-      -1, 1}, {-1, 1, -1, -1, 1, 1, -1}, {-1, 1, -1, -1, 1, 1, 1}, {-1, 1, -1,
-      1, -1, -1, -1}, {-1, 1, -1, 1, -1, -1, 1}, {-1, 1, -1, 1, -1, 1, -1},
-      {-1, 1, -1, 1, -1, 1, 1}, {-1, 1, -1, 1, 1, -1, -1}, {-1, 1, -1, 1, 1,
-      -1, 1}, {-1, 1, -1, 1, 1, 1, -1}, {-1, 1, -1, 1, 1, 1, 1}, {-1, 1, 1, -1,
-      -1, -1, -1}, {-1, 1, 1, -1, -1, -1, 1}, {-1, 1, 1, -1, -1, 1, -1}, {-1,
-      1, 1, -1, -1, 1, 1}, {-1, 1, 1, -1, 1, -1, -1}, {-1, 1, 1, -1, 1, -1, 1},
-      {-1, 1, 1, -1, 1, 1, -1}, {-1, 1, 1, -1, 1, 1, 1}, {-1, 1, 1, 1, -1, -1,
-      -1}, {-1, 1, 1, 1, -1, -1, 1}, {-1, 1, 1, 1, -1, 1, -1}, {-1, 1, 1, 1,
-      -1, 1, 1}, {-1, 1, 1, 1, 1, -1, -1}, {-1, 1, 1, 1, 1, -1, 1}, {-1, 1, 1,
-      1, 1, 1, -1}, {-1, 1, 1, 1, 1, 1, 1}, {1, -1, -1, -1, -1, -1, -1}, {1,
-      -1, -1, -1, -1, -1, 1}, {1, -1, -1, -1, -1, 1, -1}, {1, -1, -1, -1, -1,
-      1, 1}, {1, -1, -1, -1, 1, -1, -1}, {1, -1, -1, -1, 1, -1, 1}, {1, -1, -1,
-      -1, 1, 1, -1}, {1, -1, -1, -1, 1, 1, 1}, {1, -1, -1, 1, -1, -1, -1}, {1,
-      -1, -1, 1, -1, -1, 1}, {1, -1, -1, 1, -1, 1, -1}, {1, -1, -1, 1, -1, 1,
-      1}, {1, -1, -1, 1, 1, -1, -1}, {1, -1, -1, 1, 1, -1, 1}, {1, -1, -1, 1,
-      1, 1, -1}, {1, -1, -1, 1, 1, 1, 1}, {1, -1, 1, -1, -1, -1, -1}, {1, -1,
-      1, -1, -1, -1, 1}, {1, -1, 1, -1, -1, 1, -1}, {1, -1, 1, -1, -1, 1, 1},
-      {1, -1, 1, -1, 1, -1, -1}, {1, -1, 1, -1, 1, -1, 1}, {1, -1, 1, -1, 1, 1,
-      -1}, {1, -1, 1, -1, 1, 1, 1}, {1, -1, 1, 1, -1, -1, -1}, {1, -1, 1, 1,
-      -1, -1, 1}, {1, -1, 1, 1, -1, 1, -1}, {1, -1, 1, 1, -1, 1, 1}, {1, -1, 1,
-      1, 1, -1, -1}, {1, -1, 1, 1, 1, -1, 1}, {1, -1, 1, 1, 1, 1, -1}, {1, -1,
-      1, 1, 1, 1, 1}, {1, 1, -1, -1, -1, -1, -1}, {1, 1, -1, -1, -1, -1, 1},
-      {1, 1, -1, -1, -1, 1, -1}, {1, 1, -1, -1, -1, 1, 1}, {1, 1, -1, -1, 1,
-      -1, -1}, {1, 1, -1, -1, 1, -1, 1}, {1, 1, -1, -1, 1, 1, -1}, {1, 1, -1,
-      -1, 1, 1, 1}, {1, 1, -1, 1, -1, -1, -1}, {1, 1, -1, 1, -1, -1, 1}, {1, 1,
-      -1, 1, -1, 1, -1}, {1, 1, -1, 1, -1, 1, 1}, {1, 1, -1, 1, 1, -1, -1}, {1,
-      1, -1, 1, 1, -1, 1}, {1, 1, -1, 1, 1, 1, -1}, {1, 1, -1, 1, 1, 1, 1}, {1,
-      1, 1, -1, -1, -1, -1}, {1, 1, 1, -1, -1, -1, 1}, {1, 1, 1, -1, -1, 1,
-      -1}, {1, 1, 1, -1, -1, 1, 1}, {1, 1, 1, -1, 1, -1, -1}, {1, 1, 1, -1, 1,
-      -1, 1}, {1, 1, 1, -1, 1, 1, -1}, {1, 1, 1, -1, 1, 1, 1}, {1, 1, 1, 1, -1,
-      -1, -1}, {1, 1, 1, 1, -1, -1, 1}, {1, 1, 1, 1, -1, 1, -1}, {1, 1, 1, 1,
-      -1, 1, 1}, {1, 1, 1, 1, 1, -1, -1}, {1, 1, 1, 1, 1, -1, 1}, {1, 1, 1, 1,
-      1, 1, -1}, {1, 1, 1, 1, 1, 1, 1}};
-  // Denominators: spins, colors and identical particles
-  const int denominators[nprocesses] = {24}; 
-
-  ntry = ntry + 1; 
-
-  // Reset the matrix elements
-  for(int i = 0; i < nprocesses; i++ )
-  {
-    matrix_element[i] = 0.; 
-  }
-  // Define permutation
-  int perm[nexternal]; 
-  for(int i = 0; i < nexternal; i++ )
-  {
-    perm[i] = i; 
-  }
-
-  if (sum_hel == 0 || ntry < 10)
-  {
-    // Calculate the matrix element for all helicities
-    for(int ihel = 0; ihel < ncomb; ihel++ )
-    {
-      if (goodhel[ihel] || ntry < 2)
-      {
-        calculate_wavefunctions(perm, helicities[ihel]); 
-        t[0] = matrix_1_epem_uuxggg(); 
-
-        double tsum = 0; 
-        for(int iproc = 0; iproc < nprocesses; iproc++ )
-        {
-          matrix_element[iproc] += t[iproc]; 
-          tsum += t[iproc]; 
-        }
-        // Store which helicities give non-zero result
-        if (tsum != 0. && !goodhel[ihel])
-        {
-          goodhel[ihel] = true; 
-          ngood++; 
-          igood[ngood] = ihel; 
-        }
-      }
-    }
-    jhel = 0; 
-    sum_hel = min(sum_hel, ngood); 
-  }
-  else
-  {
-    // Only use the "good" helicities
-    for(int j = 0; j < sum_hel; j++ )
-    {
-      jhel++; 
-      if (jhel >= ngood)
-        jhel = 0; 
-      double hwgt = double(ngood)/double(sum_hel); 
-      int ihel = igood[jhel]; 
-      calculate_wavefunctions(perm, helicities[ihel]); 
-      t[0] = matrix_1_epem_uuxggg(); 
-
-      for(int iproc = 0; iproc < nprocesses; iproc++ )
-      {
-        matrix_element[iproc] += t[iproc] * hwgt; 
-      }
-    }
-  }
-
-  for (int i = 0; i < nprocesses; i++ )
-    matrix_element[i] /= denominators[i]; 
-
-
-
-}
-
-
-//==========================================================================
-// Private class member functions
-
-//--------------------------------------------------------------------------
-// Evaluate |M|^2 for each subprocess
-
-void eeuuggg::calculate_wavefunctions(const int perm[], const int hel[])
-{
-  // Calculate wavefunctions for all processes
-//  int i;//, j;
-
-  // Calculate all wavefunctions
-  oxxxxx(p[perm[0]], mME[0], hel[0], -1, w[0]); 
-  ixxxxx(p[perm[1]], mME[1], hel[1], +1, w[1]); 
-  oxxxxx(p[perm[2]], mME[2], hel[2], +1, w[2]); 
-  ixxxxx(p[perm[3]], mME[3], hel[3], -1, w[3]); 
-  vxxxxx(p[perm[4]], mME[4], hel[4], +1, w[4]); 
-  vxxxxx(p[perm[5]], mME[5], hel[5], +1, w[5]); 
-  vxxxxx(p[perm[6]], mME[6], hel[6], +1, w[6]); 
-  FFV1P0_3(w[1], w[0], pars->GC_3, pars->ZERO, pars->ZERO, w[7]); 
-  FFV1_1(w[2], w[4], pars->GC_11, pars->ZERO, pars->ZERO, w[8]); 
-  FFV1_2(w[3], w[7], pars->GC_2, pars->ZERO, pars->ZERO, w[9]); 
-  FFV1_1(w[8], w[5], pars->GC_11, pars->ZERO, pars->ZERO, w[10]); 
-  FFV1_1(w[8], w[6], pars->GC_11, pars->ZERO, pars->ZERO, w[11]); 
-  FFV2_4_3(w[1], w[0], pars->GC_50, pars->GC_59, pars->mdl_MZ, pars->mdl_WZ,
-      w[12]);
-  FFV2_5_2(w[3], w[12], pars->GC_51, pars->GC_58, pars->ZERO, pars->ZERO,
-      w[13]);
-  FFV1_2(w[3], w[5], pars->GC_11, pars->ZERO, pars->ZERO, w[14]); 
-  FFV1_1(w[8], w[7], pars->GC_2, pars->ZERO, pars->ZERO, w[15]); 
-  FFV1_2(w[14], w[7], pars->GC_2, pars->ZERO, pars->ZERO, w[16]); 
-  FFV2_5_1(w[8], w[12], pars->GC_51, pars->GC_58, pars->ZERO, pars->ZERO,
-      w[17]);
-  FFV2_5_2(w[14], w[12], pars->GC_51, pars->GC_58, pars->ZERO, pars->ZERO,
-      w[18]);
-  FFV1_2(w[3], w[6], pars->GC_11, pars->ZERO, pars->ZERO, w[19]); 
-  FFV1_2(w[19], w[7], pars->GC_2, pars->ZERO, pars->ZERO, w[20]); 
-  FFV2_5_2(w[19], w[12], pars->GC_51, pars->GC_58, pars->ZERO, pars->ZERO,
-      w[21]);
-  VVV1P0_1(w[5], w[6], pars->GC_10, pars->ZERO, pars->ZERO, w[22]); 
-  FFV1_1(w[2], w[5], pars->GC_11, pars->ZERO, pars->ZERO, w[23]); 
-  FFV1_1(w[23], w[4], pars->GC_11, pars->ZERO, pars->ZERO, w[24]); 
-  FFV1_1(w[23], w[6], pars->GC_11, pars->ZERO, pars->ZERO, w[25]); 
-  FFV1_2(w[3], w[4], pars->GC_11, pars->ZERO, pars->ZERO, w[26]); 
-  FFV1_1(w[23], w[7], pars->GC_2, pars->ZERO, pars->ZERO, w[27]); 
-  FFV1_2(w[26], w[7], pars->GC_2, pars->ZERO, pars->ZERO, w[28]); 
-  FFV2_5_1(w[23], w[12], pars->GC_51, pars->GC_58, pars->ZERO, pars->ZERO,
-      w[29]);
-  FFV2_5_2(w[26], w[12], pars->GC_51, pars->GC_58, pars->ZERO, pars->ZERO,
-      w[30]);
-  VVV1P0_1(w[4], w[6], pars->GC_10, pars->ZERO, pars->ZERO, w[31]); 
-  FFV1_1(w[2], w[6], pars->GC_11, pars->ZERO, pars->ZERO, w[32]); 
-  FFV1_1(w[32], w[4], pars->GC_11, pars->ZERO, pars->ZERO, w[33]); 
-  FFV1_1(w[32], w[5], pars->GC_11, pars->ZERO, pars->ZERO, w[34]); 
-  FFV1_1(w[32], w[7], pars->GC_2, pars->ZERO, pars->ZERO, w[35]); 
-  FFV2_5_1(w[32], w[12], pars->GC_51, pars->GC_58, pars->ZERO, pars->ZERO,
-      w[36]);
-  VVV1P0_1(w[4], w[5], pars->GC_10, pars->ZERO, pars->ZERO, w[37]); 
-  FFV1_1(w[2], w[7], pars->GC_2, pars->ZERO, pars->ZERO, w[38]); 
-  FFV1_2(w[26], w[5], pars->GC_11, pars->ZERO, pars->ZERO, w[39]); 
-  FFV1_2(w[26], w[6], pars->GC_11, pars->ZERO, pars->ZERO, w[40]); 
-  FFV2_5_1(w[2], w[12], pars->GC_51, pars->GC_58, pars->ZERO, pars->ZERO,
-      w[41]);
-  FFV1_2(w[14], w[4], pars->GC_11, pars->ZERO, pars->ZERO, w[42]); 
-  FFV1_2(w[14], w[6], pars->GC_11, pars->ZERO, pars->ZERO, w[43]); 
-  FFV1_2(w[19], w[4], pars->GC_11, pars->ZERO, pars->ZERO, w[44]); 
-  FFV1_2(w[19], w[5], pars->GC_11, pars->ZERO, pars->ZERO, w[45]); 
-  FFV1_2(w[3], w[37], pars->GC_11, pars->ZERO, pars->ZERO, w[46]); 
-  VVV1P0_1(w[37], w[6], pars->GC_10, pars->ZERO, pars->ZERO, w[47]); 
-  FFV1_1(w[2], w[37], pars->GC_11, pars->ZERO, pars->ZERO, w[48]); 
-  FFV1_2(w[3], w[31], pars->GC_11, pars->ZERO, pars->ZERO, w[49]); 
-  VVV1P0_1(w[31], w[5], pars->GC_10, pars->ZERO, pars->ZERO, w[50]); 
-  FFV1_1(w[2], w[31], pars->GC_11, pars->ZERO, pars->ZERO, w[51]); 
-  FFV1_2(w[3], w[22], pars->GC_11, pars->ZERO, pars->ZERO, w[52]); 
-  VVV1P0_1(w[4], w[22], pars->GC_10, pars->ZERO, pars->ZERO, w[53]); 
-  FFV1_1(w[2], w[22], pars->GC_11, pars->ZERO, pars->ZERO, w[54]); 
-  VVVV1P0_1(w[4], w[5], w[6], pars->GC_12, pars->ZERO, pars->ZERO, w[55]); 
-  VVVV3P0_1(w[4], w[5], w[6], pars->GC_12, pars->ZERO, pars->ZERO, w[56]); 
-  VVVV4P0_1(w[4], w[5], w[6], pars->GC_12, pars->ZERO, pars->ZERO, w[57]); 
-
-  // Calculate all amplitudes
-  // Amplitude(s) for diagram number 0
-  FFV1_0(w[9], w[10], w[6], pars->GC_11, amp[0]); 
-  FFV1_0(w[9], w[11], w[5], pars->GC_11, amp[1]); 
-  FFV1_0(w[13], w[10], w[6], pars->GC_11, amp[2]); 
-  FFV1_0(w[13], w[11], w[5], pars->GC_11, amp[3]); 
-  FFV1_0(w[14], w[15], w[6], pars->GC_11, amp[4]); 
-  FFV1_0(w[16], w[8], w[6], pars->GC_11, amp[5]); 
-  FFV1_0(w[14], w[17], w[6], pars->GC_11, amp[6]); 
-  FFV1_0(w[18], w[8], w[6], pars->GC_11, amp[7]); 
-  FFV1_0(w[19], w[15], w[5], pars->GC_11, amp[8]); 
-  FFV1_0(w[20], w[8], w[5], pars->GC_11, amp[9]); 
-  FFV1_0(w[19], w[17], w[5], pars->GC_11, amp[10]); 
-  FFV1_0(w[21], w[8], w[5], pars->GC_11, amp[11]); 
-  FFV1_0(w[3], w[15], w[22], pars->GC_11, amp[12]); 
-  FFV1_0(w[9], w[8], w[22], pars->GC_11, amp[13]); 
-  FFV1_0(w[3], w[17], w[22], pars->GC_11, amp[14]); 
-  FFV1_0(w[13], w[8], w[22], pars->GC_11, amp[15]); 
-  FFV1_0(w[9], w[24], w[6], pars->GC_11, amp[16]); 
-  FFV1_0(w[9], w[25], w[4], pars->GC_11, amp[17]); 
-  FFV1_0(w[13], w[24], w[6], pars->GC_11, amp[18]); 
-  FFV1_0(w[13], w[25], w[4], pars->GC_11, amp[19]); 
-  FFV1_0(w[26], w[27], w[6], pars->GC_11, amp[20]); 
-  FFV1_0(w[28], w[23], w[6], pars->GC_11, amp[21]); 
-  FFV1_0(w[26], w[29], w[6], pars->GC_11, amp[22]); 
-  FFV1_0(w[30], w[23], w[6], pars->GC_11, amp[23]); 
-  FFV1_0(w[19], w[27], w[4], pars->GC_11, amp[24]); 
-  FFV1_0(w[20], w[23], w[4], pars->GC_11, amp[25]); 
-  FFV1_0(w[19], w[29], w[4], pars->GC_11, amp[26]); 
-  FFV1_0(w[21], w[23], w[4], pars->GC_11, amp[27]); 
-  FFV1_0(w[3], w[27], w[31], pars->GC_11, amp[28]); 
-  FFV1_0(w[9], w[23], w[31], pars->GC_11, amp[29]); 
-  FFV1_0(w[3], w[29], w[31], pars->GC_11, amp[30]); 
-  FFV1_0(w[13], w[23], w[31], pars->GC_11, amp[31]); 
-  FFV1_0(w[9], w[33], w[5], pars->GC_11, amp[32]); 
-  FFV1_0(w[9], w[34], w[4], pars->GC_11, amp[33]); 
-  FFV1_0(w[13], w[33], w[5], pars->GC_11, amp[34]); 
-  FFV1_0(w[13], w[34], w[4], pars->GC_11, amp[35]); 
-  FFV1_0(w[26], w[35], w[5], pars->GC_11, amp[36]); 
-  FFV1_0(w[28], w[32], w[5], pars->GC_11, amp[37]); 
-  FFV1_0(w[26], w[36], w[5], pars->GC_11, amp[38]); 
-  FFV1_0(w[30], w[32], w[5], pars->GC_11, amp[39]); 
-  FFV1_0(w[14], w[35], w[4], pars->GC_11, amp[40]); 
-  FFV1_0(w[16], w[32], w[4], pars->GC_11, amp[41]); 
-  FFV1_0(w[14], w[36], w[4], pars->GC_11, amp[42]); 
-  FFV1_0(w[18], w[32], w[4], pars->GC_11, amp[43]); 
-  FFV1_0(w[3], w[35], w[37], pars->GC_11, amp[44]); 
-  FFV1_0(w[9], w[32], w[37], pars->GC_11, amp[45]); 
-  FFV1_0(w[3], w[36], w[37], pars->GC_11, amp[46]); 
-  FFV1_0(w[13], w[32], w[37], pars->GC_11, amp[47]); 
-  FFV1_0(w[39], w[38], w[6], pars->GC_11, amp[48]); 
-  FFV1_0(w[40], w[38], w[5], pars->GC_11, amp[49]); 
-  FFV1_0(w[39], w[41], w[6], pars->GC_11, amp[50]); 
-  FFV1_0(w[40], w[41], w[5], pars->GC_11, amp[51]); 
-  FFV1_0(w[26], w[38], w[22], pars->GC_11, amp[52]); 
-  FFV1_0(w[28], w[2], w[22], pars->GC_11, amp[53]); 
-  FFV1_0(w[26], w[41], w[22], pars->GC_11, amp[54]); 
-  FFV1_0(w[30], w[2], w[22], pars->GC_11, amp[55]); 
-  FFV1_0(w[42], w[38], w[6], pars->GC_11, amp[56]); 
-  FFV1_0(w[43], w[38], w[4], pars->GC_11, amp[57]); 
-  FFV1_0(w[42], w[41], w[6], pars->GC_11, amp[58]); 
-  FFV1_0(w[43], w[41], w[4], pars->GC_11, amp[59]); 
-  FFV1_0(w[14], w[38], w[31], pars->GC_11, amp[60]); 
-  FFV1_0(w[16], w[2], w[31], pars->GC_11, amp[61]); 
-  FFV1_0(w[14], w[41], w[31], pars->GC_11, amp[62]); 
-  FFV1_0(w[18], w[2], w[31], pars->GC_11, amp[63]); 
-  FFV1_0(w[44], w[38], w[5], pars->GC_11, amp[64]); 
-  FFV1_0(w[45], w[38], w[4], pars->GC_11, amp[65]); 
-  FFV1_0(w[44], w[41], w[5], pars->GC_11, amp[66]); 
-  FFV1_0(w[45], w[41], w[4], pars->GC_11, amp[67]); 
-  FFV1_0(w[19], w[38], w[37], pars->GC_11, amp[68]); 
-  FFV1_0(w[20], w[2], w[37], pars->GC_11, amp[69]); 
-  FFV1_0(w[19], w[41], w[37], pars->GC_11, amp[70]); 
-  FFV1_0(w[21], w[2], w[37], pars->GC_11, amp[71]); 
-  FFV1_0(w[46], w[38], w[6], pars->GC_11, amp[72]); 
-  FFV1_0(w[3], w[38], w[47], pars->GC_11, amp[73]); 
-  FFV1_0(w[9], w[48], w[6], pars->GC_11, amp[74]); 
-  FFV1_0(w[9], w[2], w[47], pars->GC_11, amp[75]); 
-  FFV1_0(w[46], w[41], w[6], pars->GC_11, amp[76]); 
-  FFV1_0(w[3], w[41], w[47], pars->GC_11, amp[77]); 
-  FFV1_0(w[13], w[48], w[6], pars->GC_11, amp[78]); 
-  FFV1_0(w[13], w[2], w[47], pars->GC_11, amp[79]); 
-  FFV1_0(w[49], w[38], w[5], pars->GC_11, amp[80]); 
-  FFV1_0(w[3], w[38], w[50], pars->GC_11, amp[81]); 
-  FFV1_0(w[9], w[51], w[5], pars->GC_11, amp[82]); 
-  FFV1_0(w[9], w[2], w[50], pars->GC_11, amp[83]); 
-  FFV1_0(w[49], w[41], w[5], pars->GC_11, amp[84]); 
-  FFV1_0(w[3], w[41], w[50], pars->GC_11, amp[85]); 
-  FFV1_0(w[13], w[51], w[5], pars->GC_11, amp[86]); 
-  FFV1_0(w[13], w[2], w[50], pars->GC_11, amp[87]); 
-  FFV1_0(w[52], w[38], w[4], pars->GC_11, amp[88]); 
-  FFV1_0(w[3], w[38], w[53], pars->GC_11, amp[89]); 
-  FFV1_0(w[9], w[54], w[4], pars->GC_11, amp[90]); 
-  FFV1_0(w[9], w[2], w[53], pars->GC_11, amp[91]); 
-  FFV1_0(w[52], w[41], w[4], pars->GC_11, amp[92]); 
-  FFV1_0(w[3], w[41], w[53], pars->GC_11, amp[93]); 
-  FFV1_0(w[13], w[54], w[4], pars->GC_11, amp[94]); 
-  FFV1_0(w[13], w[2], w[53], pars->GC_11, amp[95]); 
-  FFV1_0(w[3], w[38], w[55], pars->GC_11, amp[96]); 
-  FFV1_0(w[3], w[38], w[56], pars->GC_11, amp[97]); 
-  FFV1_0(w[3], w[38], w[57], pars->GC_11, amp[98]); 
-  FFV1_0(w[9], w[2], w[55], pars->GC_11, amp[99]); 
-  FFV1_0(w[9], w[2], w[56], pars->GC_11, amp[100]); 
-  FFV1_0(w[9], w[2], w[57], pars->GC_11, amp[101]); 
-  FFV1_0(w[3], w[41], w[55], pars->GC_11, amp[102]); 
-  FFV1_0(w[3], w[41], w[56], pars->GC_11, amp[103]); 
-  FFV1_0(w[3], w[41], w[57], pars->GC_11, amp[104]); 
-  FFV1_0(w[13], w[2], w[55], pars->GC_11, amp[105]); 
-  FFV1_0(w[13], w[2], w[56], pars->GC_11, amp[106]); 
-  FFV1_0(w[13], w[2], w[57], pars->GC_11, amp[107]); 
-
-}
-double eeuuggg::matrix_1_epem_uuxggg()
-{
-  int i;//, j;
-  // Local variables
-//  const int ngraphs = 108; 
-  const int ncolor = 6;
-  std::complex<double> jamp[ncolor]; 
-  // The color matrix;
-//  static const double denom[ncolor] = {9, 9, 9, 9, 9, 9};
-//  static const double cf[ncolor][ncolor] = {{64, -8, -8, 1, 1, 10}, {-8, 64, 1,
-//      10, -8, 1}, {-8, 1, 64, -8, 10, 1}, {1, 10, -8, 64, 1, -8}, {1, -8, 10,
-//      1, 64, -8}, {10, 1, 1, -8, -8, 64}};
-
-  // Calculate color flows
-  jamp[0] = +amp[0] + amp[2] + amp[8] + amp[9] + amp[10] + amp[11] -
-      std::complex<double> (0, 1) * amp[12] - std::complex<double> (0, 1) *
-      amp[13] - std::complex<double> (0, 1) * amp[14] - std::complex<double>
-      (0, 1) * amp[15] + amp[65] + amp[67] - std::complex<double> (0, 1) *
-      amp[68] - std::complex<double> (0, 1) * amp[69] - std::complex<double>
-      (0, 1) * amp[70] - std::complex<double> (0, 1) * amp[71] - amp[73] -
-      std::complex<double> (0, 1) * amp[74] - amp[75] - amp[77] -
-      std::complex<double> (0, 1) * amp[78] - amp[79] - std::complex<double>
-      (0, 1) * amp[88] - amp[89] - amp[91] - std::complex<double> (0, 1) *
-      amp[92] - amp[93] - amp[95] + amp[98] - amp[96] + amp[101] - amp[99] +
-      amp[104] - amp[102] + amp[107] - amp[105];
-  jamp[1] = +amp[1] + amp[3] + amp[4] + amp[5] + amp[6] + amp[7] +
-      std::complex<double> (0, 1) * amp[12] + std::complex<double> (0, 1) *
-      amp[13] + std::complex<double> (0, 1) * amp[14] + std::complex<double>
-      (0, 1) * amp[15] + amp[57] + amp[59] - std::complex<double> (0, 1) *
-      amp[60] - std::complex<double> (0, 1) * amp[61] - std::complex<double>
-      (0, 1) * amp[62] - std::complex<double> (0, 1) * amp[63] - amp[81] -
-      std::complex<double> (0, 1) * amp[82] - amp[83] - amp[85] -
-      std::complex<double> (0, 1) * amp[86] - amp[87] + std::complex<double>
-      (0, 1) * amp[88] + amp[89] + amp[91] + std::complex<double> (0, 1) *
-      amp[92] + amp[93] + amp[95] + amp[96] + amp[97] + amp[99] + amp[100] +
-      amp[102] + amp[103] + amp[105] + amp[106];
-  jamp[2] = +amp[16] + amp[18] + amp[24] + amp[25] + amp[26] + amp[27] -
-      std::complex<double> (0, 1) * amp[28] - std::complex<double> (0, 1) *
-      amp[29] - std::complex<double> (0, 1) * amp[30] - std::complex<double>
-      (0, 1) * amp[31] + amp[64] + amp[66] + std::complex<double> (0, 1) *
-      amp[68] + std::complex<double> (0, 1) * amp[69] + std::complex<double>
-      (0, 1) * amp[70] + std::complex<double> (0, 1) * amp[71] + amp[73] +
-      std::complex<double> (0, 1) * amp[74] + amp[75] + amp[77] +
-      std::complex<double> (0, 1) * amp[78] + amp[79] - std::complex<double>
-      (0, 1) * amp[80] + amp[81] + amp[83] - std::complex<double> (0, 1) *
-      amp[84] + amp[85] + amp[87] - amp[98] - amp[97] - amp[101] - amp[100] -
-      amp[104] - amp[103] - amp[107] - amp[106];
-  jamp[3] = +amp[17] + amp[19] + amp[20] + amp[21] + amp[22] + amp[23] +
-      std::complex<double> (0, 1) * amp[28] + std::complex<double> (0, 1) *
-      amp[29] + std::complex<double> (0, 1) * amp[30] + std::complex<double>
-      (0, 1) * amp[31] + amp[49] + amp[51] - std::complex<double> (0, 1) *
-      amp[52] - std::complex<double> (0, 1) * amp[53] - std::complex<double>
-      (0, 1) * amp[54] - std::complex<double> (0, 1) * amp[55] +
-      std::complex<double> (0, 1) * amp[80] - amp[81] - amp[83] +
-      std::complex<double> (0, 1) * amp[84] - amp[85] - amp[87] + amp[89] -
-      std::complex<double> (0, 1) * amp[90] + amp[91] + amp[93] -
-      std::complex<double> (0, 1) * amp[94] + amp[95] + amp[96] + amp[97] +
-      amp[99] + amp[100] + amp[102] + amp[103] + amp[105] + amp[106];
-  jamp[4] = +amp[32] + amp[34] + amp[40] + amp[41] + amp[42] + amp[43] -
-      std::complex<double> (0, 1) * amp[44] - std::complex<double> (0, 1) *
-      amp[45] - std::complex<double> (0, 1) * amp[46] - std::complex<double>
-      (0, 1) * amp[47] + amp[56] + amp[58] + std::complex<double> (0, 1) *
-      amp[60] + std::complex<double> (0, 1) * amp[61] + std::complex<double>
-      (0, 1) * amp[62] + std::complex<double> (0, 1) * amp[63] -
-      std::complex<double> (0, 1) * amp[72] + amp[73] + amp[75] -
-      std::complex<double> (0, 1) * amp[76] + amp[77] + amp[79] + amp[81] +
-      std::complex<double> (0, 1) * amp[82] + amp[83] + amp[85] +
-      std::complex<double> (0, 1) * amp[86] + amp[87] - amp[98] - amp[97] -
-      amp[101] - amp[100] - amp[104] - amp[103] - amp[107] - amp[106];
-  jamp[5] = +amp[33] + amp[35] + amp[36] + amp[37] + amp[38] + amp[39] +
-      std::complex<double> (0, 1) * amp[44] + std::complex<double> (0, 1) *
-      amp[45] + std::complex<double> (0, 1) * amp[46] + std::complex<double>
-      (0, 1) * amp[47] + amp[48] + amp[50] + std::complex<double> (0, 1) *
-      amp[52] + std::complex<double> (0, 1) * amp[53] + std::complex<double>
-      (0, 1) * amp[54] + std::complex<double> (0, 1) * amp[55] +
-      std::complex<double> (0, 1) * amp[72] - amp[73] - amp[75] +
-      std::complex<double> (0, 1) * amp[76] - amp[77] - amp[79] - amp[89] +
-      std::complex<double> (0, 1) * amp[90] - amp[91] - amp[93] +
-      std::complex<double> (0, 1) * amp[94] - amp[95] + amp[98] - amp[96] +
-      amp[101] - amp[99] + amp[104] - amp[102] + amp[107] - amp[105];
-
-
-
-  // Store the leading color flows for choice of color
-  for(i = 0; i < ncolor; i++ )
-    jamp2[0][i] += real(jamp[i] * conj(jamp[i])); 
-
-  return -1.; 
-}
-
-
-double eeuuggg::get_jamp2(int i)
-{
-  return jamp2[0][i];
-}
-
-int eeuuggg::colorstring(int i, int j)
-{
-  static const double res[6][6] = {
-    {5, 6, 7, 3, 4, 0},
-    {5, 7, 6, 3, 4, 0},
-    {6, 5, 7, 3, 4, 0},
-    {6, 7, 5, 3, 4, 0},
-    {7, 5, 6, 3, 4, 0},
-    {7, 6, 5, 3, 4, 0}};
-  return res[i][j];
-}
-
-
-int eeuuggg::NCol()
-{
-  const int ncolor = 6;
-  return ncolor;
-}
-
-
-
-
-
diff --git a/Shower/Dipole/Colorea/eeuuggg.h b/Shower/Dipole/Colorea/eeuuggg.h
deleted file mode 100644
--- a/Shower/Dipole/Colorea/eeuuggg.h
+++ /dev/null
@@ -1,52 +0,0 @@
-  //==========================================================================
-  // This file has been automatically generated for C++ Standalone by
-  // MadGraph5_aMC@NLO v. 2.5.4, 2017-03-28
-  // By the MadGraph5_aMC@NLO Development Team
-  // Visit launchpad.net/madgraph5 and amcatnlo.web.cern.ch
-  //==========================================================================
-  // and was then modified by J. Bellm.
-#ifndef MG5_Sigma_sm_epem_uuxggg_H
-#define MG5_Sigma_sm_epem_uuxggg_H
-#include <complex> 
-#include <vector>
-#include "Parameters_sm.h"
-using namespace std;
-class eeuuggg
-{
-  public:
-  eeuuggg() { 
-      initProc("param_card.dat");
-  }
-    // Retrun the prefered gluon order
-  vector<int> producePermutation(double r,vector < double * > & momenta);
-  void setMass(int i,double M){mME[i]=M;}
-  private:
-    ///////// Process Dependent
-  static const int ninitial = 2;
-  static const int nexternal = 7;
-  static const int nprocesses = 1;
-  static const int nwavefuncs = 58;
-  static const int namplitudes = 108;
-  std::complex<double> w[nwavefuncs][18];
-  double matrix_1_epem_uuxggg();
-    ///////// Generic
-  double matrix_element[nprocesses];
-  std::complex<double> amp[namplitudes];
-  double * jamp2[nprocesses];
-  Parameters_sm * pars;
-  vector<double> mME;
-  vector < double * > p;
-  int id1, id2;
-  void initProc(string param_card_name);
-  void sigmaKin();
-  const vector<double> & getMasses() const {return mME;}
-  vector < double * > getMomenta(){return p;}
-  void setMomenta(vector < double * > & momenta){p = momenta;}
-  void setInitial(int inid1, int inid2){id1 = inid1; id2 = inid2;}
-  void calculate_wavefunctions(const int perm[], const int hel[]);
-    // New function
-  double get_jamp2(int i);
-  int colorstring(int i, int j);
-  int NCol();
-};
-#endif  // MG5_Sigma_sm_epem_uuxggg_H
diff --git a/Shower/Dipole/Colorea/eeuugggg.cc b/Shower/Dipole/Colorea/eeuugggg.cc
deleted file mode 100644
--- a/Shower/Dipole/Colorea/eeuugggg.cc
+++ /dev/null
@@ -1,3119 +0,0 @@
-//==========================================================================
-// This file has been automatically generated for C++ Standalone by
-// MadGraph5_aMC@NLO v. 2.5.4, 2017-03-28
-// By the MadGraph5_aMC@NLO Development Team
-// Visit launchpad.net/madgraph5 and amcatnlo.web.cern.ch
-//==========================================================================
-// and was then modified by J. Bellm.
-#include "eeuugggg.h"
-#include "HelAmps_sm.h"
-#include <iostream>
-
-using namespace MG5_sm_COLOREA; 
-
-//==========================================================================
-// Class member functions for calculating the matrix elements for
-// Process: e+ e- > u u~ g g g g WEIGHTED<=8 @1
-
-//--------------------------------------------------------------------------
-// Initialize process.
-
-vector<int>  eeuugggg::producePermutation(double r,vector < double * > & momenta){
-  static bool initialized=false;
-  if (!initialized){
-    initProc("param_card.dat");
-    initialized=true;
-  }
-  setMomenta(momenta);
-  sigmaKin();
-  
-  
-  static const int res[24][8] = {
-    {5, 6, 7, 8, 3, 4, 0, 0},
-    {5, 6, 8, 7, 3, 4, 0, 0},
-    {5, 7, 6, 8, 3, 4, 0, 0},
-    {5, 7, 8, 6, 3, 4, 0, 0},
-    {5, 8, 6, 7, 3, 4, 0, 0},
-    {5, 8, 7, 6, 3, 4, 0, 0},
-    {6, 5, 7, 8, 3, 4, 0, 0},
-    {6, 5, 8, 7, 3, 4, 0, 0},
-    {6, 7, 5, 8, 3, 4, 0, 0},
-    {6, 7, 8, 5, 3, 4, 0, 0},
-    {6, 8, 5, 7, 3, 4, 0, 0},
-    {6, 8, 7, 5, 3, 4, 0, 0},
-    {7, 5, 6, 8, 3, 4, 0, 0},
-    {7, 5, 8, 6, 3, 4, 0, 0},
-    {7, 6, 5, 8, 3, 4, 0, 0},
-    {7, 6, 8, 5, 3, 4, 0, 0},
-    {7, 8, 5, 6, 3, 4, 0, 0},
-    {7, 8, 6, 5, 3, 4, 0, 0},
-    {8, 5, 6, 7, 3, 4, 0, 0},
-    {8, 5, 7, 6, 3, 4, 0, 0},
-    {8, 6, 5, 7, 3, 4, 0, 0},
-    {8, 6, 7, 5, 3, 4, 0, 0},
-    {8, 7, 5, 6, 3, 4, 0, 0},
-    {8, 7, 6, 5, 3, 4, 0, 0}};
-  
-  double jampsum=0.;
-  for( int i=0;i<24;i++) jampsum+=jamp2[0][i];
-  double cur=0.;
-  for(int i=0;i<24;i++){
-    cur+=jamp2[0][i];
-    if( cur/jampsum > r )return std::vector<int>(res[i], res[i] + sizeof res[i] / sizeof res[i][0]);
-  }
-  //std::cout<<"producePermutation: Upps.. Something went wrong!!";
-  return  std::vector<int>();
-}
-
-
-
-void eeuugggg::initProc(string param_card_name)
-{
-  cout<<"\nColorea: Init process eeuugggg for rearrangement (arXiv:1801.06113).";
-  // Instantiate the model class and set parameters that stay fixed during run
-  pars = Parameters_sm::getInstance(); 
-  SLHAReader_COLOREA slha(param_card_name); 
-  pars->setIndependentParameters(slha); 
-  pars->setIndependentCouplings(); 
-//  pars->printIndependentParameters();
-//  pars->printIndependentCouplings();
-  // Set external particle masses for this matrix element
-  mME.push_back(pars->ZERO); 
-  mME.push_back(pars->ZERO); 
-  mME.push_back(pars->ZERO); 
-  mME.push_back(pars->ZERO); 
-  mME.push_back(pars->ZERO); 
-  mME.push_back(pars->ZERO); 
-  mME.push_back(pars->ZERO); 
-  mME.push_back(pars->ZERO); 
-  jamp2[0] = new double[24]; 
-}
-
-//--------------------------------------------------------------------------
-// Evaluate |M|^2, part independent of incoming flavour.
-
-void eeuugggg::sigmaKin()
-{
-  // Set the parameters which change event by event
-  pars->setDependentParameters(); 
-  pars->setDependentCouplings(); 
-  static bool firsttime = true; 
-  if (firsttime)
-  {
-//    pars->printDependentParameters();
-//    pars->printDependentCouplings();
-    firsttime = false;
-  }
-
-  // Reset color flows
-  for(int i = 0; i < 24; i++ )
-    jamp2[0][i] = 0.; 
-
-  // Local variables and constants
-  const int ncomb = 256; 
-  static bool goodhel[ncomb] = {false}; 
-  static int ntry = 0, sum_hel = 0, ngood = 0; 
-  static int igood[ncomb]; 
-  static int jhel; 
-//  std::complex<double> * * wfs;
-  double t[nprocesses];
-  // Helicities for the process
-  static const int helicities[ncomb][nexternal] = {{-1, -1, -1, -1, -1, -1, -1,
-      -1}, {-1, -1, -1, -1, -1, -1, -1, 1}, {-1, -1, -1, -1, -1, -1, 1, -1},
-      {-1, -1, -1, -1, -1, -1, 1, 1}, {-1, -1, -1, -1, -1, 1, -1, -1}, {-1, -1,
-      -1, -1, -1, 1, -1, 1}, {-1, -1, -1, -1, -1, 1, 1, -1}, {-1, -1, -1, -1,
-      -1, 1, 1, 1}, {-1, -1, -1, -1, 1, -1, -1, -1}, {-1, -1, -1, -1, 1, -1,
-      -1, 1}, {-1, -1, -1, -1, 1, -1, 1, -1}, {-1, -1, -1, -1, 1, -1, 1, 1},
-      {-1, -1, -1, -1, 1, 1, -1, -1}, {-1, -1, -1, -1, 1, 1, -1, 1}, {-1, -1,
-      -1, -1, 1, 1, 1, -1}, {-1, -1, -1, -1, 1, 1, 1, 1}, {-1, -1, -1, 1, -1,
-      -1, -1, -1}, {-1, -1, -1, 1, -1, -1, -1, 1}, {-1, -1, -1, 1, -1, -1, 1,
-      -1}, {-1, -1, -1, 1, -1, -1, 1, 1}, {-1, -1, -1, 1, -1, 1, -1, -1}, {-1,
-      -1, -1, 1, -1, 1, -1, 1}, {-1, -1, -1, 1, -1, 1, 1, -1}, {-1, -1, -1, 1,
-      -1, 1, 1, 1}, {-1, -1, -1, 1, 1, -1, -1, -1}, {-1, -1, -1, 1, 1, -1, -1,
-      1}, {-1, -1, -1, 1, 1, -1, 1, -1}, {-1, -1, -1, 1, 1, -1, 1, 1}, {-1, -1,
-      -1, 1, 1, 1, -1, -1}, {-1, -1, -1, 1, 1, 1, -1, 1}, {-1, -1, -1, 1, 1, 1,
-      1, -1}, {-1, -1, -1, 1, 1, 1, 1, 1}, {-1, -1, 1, -1, -1, -1, -1, -1},
-      {-1, -1, 1, -1, -1, -1, -1, 1}, {-1, -1, 1, -1, -1, -1, 1, -1}, {-1, -1,
-      1, -1, -1, -1, 1, 1}, {-1, -1, 1, -1, -1, 1, -1, -1}, {-1, -1, 1, -1, -1,
-      1, -1, 1}, {-1, -1, 1, -1, -1, 1, 1, -1}, {-1, -1, 1, -1, -1, 1, 1, 1},
-      {-1, -1, 1, -1, 1, -1, -1, -1}, {-1, -1, 1, -1, 1, -1, -1, 1}, {-1, -1,
-      1, -1, 1, -1, 1, -1}, {-1, -1, 1, -1, 1, -1, 1, 1}, {-1, -1, 1, -1, 1, 1,
-      -1, -1}, {-1, -1, 1, -1, 1, 1, -1, 1}, {-1, -1, 1, -1, 1, 1, 1, -1}, {-1,
-      -1, 1, -1, 1, 1, 1, 1}, {-1, -1, 1, 1, -1, -1, -1, -1}, {-1, -1, 1, 1,
-      -1, -1, -1, 1}, {-1, -1, 1, 1, -1, -1, 1, -1}, {-1, -1, 1, 1, -1, -1, 1,
-      1}, {-1, -1, 1, 1, -1, 1, -1, -1}, {-1, -1, 1, 1, -1, 1, -1, 1}, {-1, -1,
-      1, 1, -1, 1, 1, -1}, {-1, -1, 1, 1, -1, 1, 1, 1}, {-1, -1, 1, 1, 1, -1,
-      -1, -1}, {-1, -1, 1, 1, 1, -1, -1, 1}, {-1, -1, 1, 1, 1, -1, 1, -1}, {-1,
-      -1, 1, 1, 1, -1, 1, 1}, {-1, -1, 1, 1, 1, 1, -1, -1}, {-1, -1, 1, 1, 1,
-      1, -1, 1}, {-1, -1, 1, 1, 1, 1, 1, -1}, {-1, -1, 1, 1, 1, 1, 1, 1}, {-1,
-      1, -1, -1, -1, -1, -1, -1}, {-1, 1, -1, -1, -1, -1, -1, 1}, {-1, 1, -1,
-      -1, -1, -1, 1, -1}, {-1, 1, -1, -1, -1, -1, 1, 1}, {-1, 1, -1, -1, -1, 1,
-      -1, -1}, {-1, 1, -1, -1, -1, 1, -1, 1}, {-1, 1, -1, -1, -1, 1, 1, -1},
-      {-1, 1, -1, -1, -1, 1, 1, 1}, {-1, 1, -1, -1, 1, -1, -1, -1}, {-1, 1, -1,
-      -1, 1, -1, -1, 1}, {-1, 1, -1, -1, 1, -1, 1, -1}, {-1, 1, -1, -1, 1, -1,
-      1, 1}, {-1, 1, -1, -1, 1, 1, -1, -1}, {-1, 1, -1, -1, 1, 1, -1, 1}, {-1,
-      1, -1, -1, 1, 1, 1, -1}, {-1, 1, -1, -1, 1, 1, 1, 1}, {-1, 1, -1, 1, -1,
-      -1, -1, -1}, {-1, 1, -1, 1, -1, -1, -1, 1}, {-1, 1, -1, 1, -1, -1, 1,
-      -1}, {-1, 1, -1, 1, -1, -1, 1, 1}, {-1, 1, -1, 1, -1, 1, -1, -1}, {-1, 1,
-      -1, 1, -1, 1, -1, 1}, {-1, 1, -1, 1, -1, 1, 1, -1}, {-1, 1, -1, 1, -1, 1,
-      1, 1}, {-1, 1, -1, 1, 1, -1, -1, -1}, {-1, 1, -1, 1, 1, -1, -1, 1}, {-1,
-      1, -1, 1, 1, -1, 1, -1}, {-1, 1, -1, 1, 1, -1, 1, 1}, {-1, 1, -1, 1, 1,
-      1, -1, -1}, {-1, 1, -1, 1, 1, 1, -1, 1}, {-1, 1, -1, 1, 1, 1, 1, -1},
-      {-1, 1, -1, 1, 1, 1, 1, 1}, {-1, 1, 1, -1, -1, -1, -1, -1}, {-1, 1, 1,
-      -1, -1, -1, -1, 1}, {-1, 1, 1, -1, -1, -1, 1, -1}, {-1, 1, 1, -1, -1, -1,
-      1, 1}, {-1, 1, 1, -1, -1, 1, -1, -1}, {-1, 1, 1, -1, -1, 1, -1, 1}, {-1,
-      1, 1, -1, -1, 1, 1, -1}, {-1, 1, 1, -1, -1, 1, 1, 1}, {-1, 1, 1, -1, 1,
-      -1, -1, -1}, {-1, 1, 1, -1, 1, -1, -1, 1}, {-1, 1, 1, -1, 1, -1, 1, -1},
-      {-1, 1, 1, -1, 1, -1, 1, 1}, {-1, 1, 1, -1, 1, 1, -1, -1}, {-1, 1, 1, -1,
-      1, 1, -1, 1}, {-1, 1, 1, -1, 1, 1, 1, -1}, {-1, 1, 1, -1, 1, 1, 1, 1},
-      {-1, 1, 1, 1, -1, -1, -1, -1}, {-1, 1, 1, 1, -1, -1, -1, 1}, {-1, 1, 1,
-      1, -1, -1, 1, -1}, {-1, 1, 1, 1, -1, -1, 1, 1}, {-1, 1, 1, 1, -1, 1, -1,
-      -1}, {-1, 1, 1, 1, -1, 1, -1, 1}, {-1, 1, 1, 1, -1, 1, 1, -1}, {-1, 1, 1,
-      1, -1, 1, 1, 1}, {-1, 1, 1, 1, 1, -1, -1, -1}, {-1, 1, 1, 1, 1, -1, -1,
-      1}, {-1, 1, 1, 1, 1, -1, 1, -1}, {-1, 1, 1, 1, 1, -1, 1, 1}, {-1, 1, 1,
-      1, 1, 1, -1, -1}, {-1, 1, 1, 1, 1, 1, -1, 1}, {-1, 1, 1, 1, 1, 1, 1, -1},
-      {-1, 1, 1, 1, 1, 1, 1, 1}, {1, -1, -1, -1, -1, -1, -1, -1}, {1, -1, -1,
-      -1, -1, -1, -1, 1}, {1, -1, -1, -1, -1, -1, 1, -1}, {1, -1, -1, -1, -1,
-      -1, 1, 1}, {1, -1, -1, -1, -1, 1, -1, -1}, {1, -1, -1, -1, -1, 1, -1, 1},
-      {1, -1, -1, -1, -1, 1, 1, -1}, {1, -1, -1, -1, -1, 1, 1, 1}, {1, -1, -1,
-      -1, 1, -1, -1, -1}, {1, -1, -1, -1, 1, -1, -1, 1}, {1, -1, -1, -1, 1, -1,
-      1, -1}, {1, -1, -1, -1, 1, -1, 1, 1}, {1, -1, -1, -1, 1, 1, -1, -1}, {1,
-      -1, -1, -1, 1, 1, -1, 1}, {1, -1, -1, -1, 1, 1, 1, -1}, {1, -1, -1, -1,
-      1, 1, 1, 1}, {1, -1, -1, 1, -1, -1, -1, -1}, {1, -1, -1, 1, -1, -1, -1,
-      1}, {1, -1, -1, 1, -1, -1, 1, -1}, {1, -1, -1, 1, -1, -1, 1, 1}, {1, -1,
-      -1, 1, -1, 1, -1, -1}, {1, -1, -1, 1, -1, 1, -1, 1}, {1, -1, -1, 1, -1,
-      1, 1, -1}, {1, -1, -1, 1, -1, 1, 1, 1}, {1, -1, -1, 1, 1, -1, -1, -1},
-      {1, -1, -1, 1, 1, -1, -1, 1}, {1, -1, -1, 1, 1, -1, 1, -1}, {1, -1, -1,
-      1, 1, -1, 1, 1}, {1, -1, -1, 1, 1, 1, -1, -1}, {1, -1, -1, 1, 1, 1, -1,
-      1}, {1, -1, -1, 1, 1, 1, 1, -1}, {1, -1, -1, 1, 1, 1, 1, 1}, {1, -1, 1,
-      -1, -1, -1, -1, -1}, {1, -1, 1, -1, -1, -1, -1, 1}, {1, -1, 1, -1, -1,
-      -1, 1, -1}, {1, -1, 1, -1, -1, -1, 1, 1}, {1, -1, 1, -1, -1, 1, -1, -1},
-      {1, -1, 1, -1, -1, 1, -1, 1}, {1, -1, 1, -1, -1, 1, 1, -1}, {1, -1, 1,
-      -1, -1, 1, 1, 1}, {1, -1, 1, -1, 1, -1, -1, -1}, {1, -1, 1, -1, 1, -1,
-      -1, 1}, {1, -1, 1, -1, 1, -1, 1, -1}, {1, -1, 1, -1, 1, -1, 1, 1}, {1,
-      -1, 1, -1, 1, 1, -1, -1}, {1, -1, 1, -1, 1, 1, -1, 1}, {1, -1, 1, -1, 1,
-      1, 1, -1}, {1, -1, 1, -1, 1, 1, 1, 1}, {1, -1, 1, 1, -1, -1, -1, -1}, {1,
-      -1, 1, 1, -1, -1, -1, 1}, {1, -1, 1, 1, -1, -1, 1, -1}, {1, -1, 1, 1, -1,
-      -1, 1, 1}, {1, -1, 1, 1, -1, 1, -1, -1}, {1, -1, 1, 1, -1, 1, -1, 1}, {1,
-      -1, 1, 1, -1, 1, 1, -1}, {1, -1, 1, 1, -1, 1, 1, 1}, {1, -1, 1, 1, 1, -1,
-      -1, -1}, {1, -1, 1, 1, 1, -1, -1, 1}, {1, -1, 1, 1, 1, -1, 1, -1}, {1,
-      -1, 1, 1, 1, -1, 1, 1}, {1, -1, 1, 1, 1, 1, -1, -1}, {1, -1, 1, 1, 1, 1,
-      -1, 1}, {1, -1, 1, 1, 1, 1, 1, -1}, {1, -1, 1, 1, 1, 1, 1, 1}, {1, 1, -1,
-      -1, -1, -1, -1, -1}, {1, 1, -1, -1, -1, -1, -1, 1}, {1, 1, -1, -1, -1,
-      -1, 1, -1}, {1, 1, -1, -1, -1, -1, 1, 1}, {1, 1, -1, -1, -1, 1, -1, -1},
-      {1, 1, -1, -1, -1, 1, -1, 1}, {1, 1, -1, -1, -1, 1, 1, -1}, {1, 1, -1,
-      -1, -1, 1, 1, 1}, {1, 1, -1, -1, 1, -1, -1, -1}, {1, 1, -1, -1, 1, -1,
-      -1, 1}, {1, 1, -1, -1, 1, -1, 1, -1}, {1, 1, -1, -1, 1, -1, 1, 1}, {1, 1,
-      -1, -1, 1, 1, -1, -1}, {1, 1, -1, -1, 1, 1, -1, 1}, {1, 1, -1, -1, 1, 1,
-      1, -1}, {1, 1, -1, -1, 1, 1, 1, 1}, {1, 1, -1, 1, -1, -1, -1, -1}, {1, 1,
-      -1, 1, -1, -1, -1, 1}, {1, 1, -1, 1, -1, -1, 1, -1}, {1, 1, -1, 1, -1,
-      -1, 1, 1}, {1, 1, -1, 1, -1, 1, -1, -1}, {1, 1, -1, 1, -1, 1, -1, 1}, {1,
-      1, -1, 1, -1, 1, 1, -1}, {1, 1, -1, 1, -1, 1, 1, 1}, {1, 1, -1, 1, 1, -1,
-      -1, -1}, {1, 1, -1, 1, 1, -1, -1, 1}, {1, 1, -1, 1, 1, -1, 1, -1}, {1, 1,
-      -1, 1, 1, -1, 1, 1}, {1, 1, -1, 1, 1, 1, -1, -1}, {1, 1, -1, 1, 1, 1, -1,
-      1}, {1, 1, -1, 1, 1, 1, 1, -1}, {1, 1, -1, 1, 1, 1, 1, 1}, {1, 1, 1, -1,
-      -1, -1, -1, -1}, {1, 1, 1, -1, -1, -1, -1, 1}, {1, 1, 1, -1, -1, -1, 1,
-      -1}, {1, 1, 1, -1, -1, -1, 1, 1}, {1, 1, 1, -1, -1, 1, -1, -1}, {1, 1, 1,
-      -1, -1, 1, -1, 1}, {1, 1, 1, -1, -1, 1, 1, -1}, {1, 1, 1, -1, -1, 1, 1,
-      1}, {1, 1, 1, -1, 1, -1, -1, -1}, {1, 1, 1, -1, 1, -1, -1, 1}, {1, 1, 1,
-      -1, 1, -1, 1, -1}, {1, 1, 1, -1, 1, -1, 1, 1}, {1, 1, 1, -1, 1, 1, -1,
-      -1}, {1, 1, 1, -1, 1, 1, -1, 1}, {1, 1, 1, -1, 1, 1, 1, -1}, {1, 1, 1,
-      -1, 1, 1, 1, 1}, {1, 1, 1, 1, -1, -1, -1, -1}, {1, 1, 1, 1, -1, -1, -1,
-      1}, {1, 1, 1, 1, -1, -1, 1, -1}, {1, 1, 1, 1, -1, -1, 1, 1}, {1, 1, 1, 1,
-      -1, 1, -1, -1}, {1, 1, 1, 1, -1, 1, -1, 1}, {1, 1, 1, 1, -1, 1, 1, -1},
-      {1, 1, 1, 1, -1, 1, 1, 1}, {1, 1, 1, 1, 1, -1, -1, -1}, {1, 1, 1, 1, 1,
-      -1, -1, 1}, {1, 1, 1, 1, 1, -1, 1, -1}, {1, 1, 1, 1, 1, -1, 1, 1}, {1, 1,
-      1, 1, 1, 1, -1, -1}, {1, 1, 1, 1, 1, 1, -1, 1}, {1, 1, 1, 1, 1, 1, 1,
-      -1}, {1, 1, 1, 1, 1, 1, 1, 1}};
-  // Denominators: spins, colors and identical particles
-  const int denominators[nprocesses] = {96}; 
-
-  ntry = ntry + 1; 
-
-  // Reset the matrix elements
-  for(int i = 0; i < nprocesses; i++ )
-  {
-    matrix_element[i] = 0.; 
-  }
-  // Define permutation
-  int perm[nexternal]; 
-  for(int i = 0; i < nexternal; i++ )
-  {
-    perm[i] = i; 
-  }
-
-  if (sum_hel == 0 || ntry < 10)
-  {
-    // Calculate the matrix element for all helicities
-    for(int ihel = 0; ihel < ncomb; ihel++ )
-    {
-      if (goodhel[ihel] || ntry < 2)
-      {
-        calculate_wavefunctions(perm, helicities[ihel]); 
-        t[0] = matrix_1_epem_uuxgggg(); 
-
-        double tsum = 0; 
-        for(int iproc = 0; iproc < nprocesses; iproc++ )
-        {
-          matrix_element[iproc] += t[iproc]; 
-          tsum += t[iproc]; 
-        }
-        // Store which helicities give non-zero result
-        if (tsum != 0. && !goodhel[ihel])
-        {
-          goodhel[ihel] = true; 
-          ngood++; 
-          igood[ngood] = ihel; 
-        }
-      }
-    }
-    jhel = 0; 
-    sum_hel = min(sum_hel, ngood); 
-  }
-  else
-  {
-    // Only use the "good" helicities
-    for(int j = 0; j < sum_hel; j++ )
-    {
-      jhel++; 
-      if (jhel >= ngood)
-        jhel = 0; 
-      double hwgt = double(ngood)/double(sum_hel); 
-      int ihel = igood[jhel]; 
-      calculate_wavefunctions(perm, helicities[ihel]); 
-      t[0] = matrix_1_epem_uuxgggg(); 
-
-      for(int iproc = 0; iproc < nprocesses; iproc++ )
-      {
-        matrix_element[iproc] += t[iproc] * hwgt; 
-      }
-    }
-  }
-
-  for (int i = 0; i < nprocesses; i++ )
-    matrix_element[i] /= denominators[i]; 
-
-
-
-}
-
-
-//--------------------------------------------------------------------------
-// Evaluate |M|^2 for each subprocess
-
-void eeuugggg::calculate_wavefunctions(const int perm[], const int hel[])
-{
-
-  // Calculate all wavefunctions
-  oxxxxx(p[perm[0]], mME[0], hel[0], -1, w[0]); 
-  ixxxxx(p[perm[1]], mME[1], hel[1], +1, w[1]); 
-  oxxxxx(p[perm[2]], mME[2], hel[2], +1, w[2]); 
-  ixxxxx(p[perm[3]], mME[3], hel[3], -1, w[3]); 
-  vxxxxx(p[perm[4]], mME[4], hel[4], +1, w[4]); 
-  vxxxxx(p[perm[5]], mME[5], hel[5], +1, w[5]); 
-  vxxxxx(p[perm[6]], mME[6], hel[6], +1, w[6]); 
-  vxxxxx(p[perm[7]], mME[7], hel[7], +1, w[7]); 
-  FFV1P0_3(w[1], w[0], pars->GC_3, pars->ZERO, pars->ZERO, w[8]); 
-  FFV1_1(w[2], w[4], pars->GC_11, pars->ZERO, pars->ZERO, w[9]); 
-  FFV1_2(w[3], w[8], pars->GC_2, pars->ZERO, pars->ZERO, w[10]); 
-  FFV1_1(w[9], w[5], pars->GC_11, pars->ZERO, pars->ZERO, w[11]); 
-  FFV1_2(w[10], w[6], pars->GC_11, pars->ZERO, pars->ZERO, w[12]); 
-  FFV1_2(w[10], w[7], pars->GC_11, pars->ZERO, pars->ZERO, w[13]); 
-  FFV1_1(w[9], w[6], pars->GC_11, pars->ZERO, pars->ZERO, w[14]); 
-  FFV1_2(w[10], w[5], pars->GC_11, pars->ZERO, pars->ZERO, w[15]); 
-  FFV1_1(w[9], w[7], pars->GC_11, pars->ZERO, pars->ZERO, w[16]); 
-  FFV2_4_3(w[1], w[0], pars->GC_50, pars->GC_59, pars->mdl_MZ, pars->mdl_WZ,
-      w[17]);
-  FFV2_5_2(w[3], w[17], pars->GC_51, pars->GC_58, pars->ZERO, pars->ZERO,
-      w[18]);
-  FFV1_2(w[18], w[6], pars->GC_11, pars->ZERO, pars->ZERO, w[19]); 
-  FFV1_2(w[18], w[7], pars->GC_11, pars->ZERO, pars->ZERO, w[20]); 
-  FFV1_2(w[18], w[5], pars->GC_11, pars->ZERO, pars->ZERO, w[21]); 
-  FFV1_2(w[3], w[5], pars->GC_11, pars->ZERO, pars->ZERO, w[22]); 
-  FFV1_1(w[9], w[8], pars->GC_2, pars->ZERO, pars->ZERO, w[23]); 
-  FFV1_2(w[22], w[6], pars->GC_11, pars->ZERO, pars->ZERO, w[24]); 
-  FFV1_2(w[22], w[7], pars->GC_11, pars->ZERO, pars->ZERO, w[25]); 
-  FFV1_2(w[22], w[8], pars->GC_2, pars->ZERO, pars->ZERO, w[26]); 
-  FFV2_5_1(w[9], w[17], pars->GC_51, pars->GC_58, pars->ZERO, pars->ZERO,
-      w[27]);
-  FFV2_5_2(w[22], w[17], pars->GC_51, pars->GC_58, pars->ZERO, pars->ZERO,
-      w[28]);
-  VVV1P0_1(w[6], w[7], pars->GC_10, pars->ZERO, pars->ZERO, w[29]); 
-  FFV1_2(w[3], w[6], pars->GC_11, pars->ZERO, pars->ZERO, w[30]); 
-  FFV1_2(w[30], w[5], pars->GC_11, pars->ZERO, pars->ZERO, w[31]); 
-  FFV1_2(w[30], w[7], pars->GC_11, pars->ZERO, pars->ZERO, w[32]); 
-  FFV1_2(w[30], w[8], pars->GC_2, pars->ZERO, pars->ZERO, w[33]); 
-  FFV2_5_2(w[30], w[17], pars->GC_51, pars->GC_58, pars->ZERO, pars->ZERO,
-      w[34]);
-  VVV1P0_1(w[5], w[7], pars->GC_10, pars->ZERO, pars->ZERO, w[35]); 
-  FFV1_2(w[3], w[7], pars->GC_11, pars->ZERO, pars->ZERO, w[36]); 
-  FFV1_2(w[36], w[5], pars->GC_11, pars->ZERO, pars->ZERO, w[37]); 
-  FFV1_2(w[36], w[6], pars->GC_11, pars->ZERO, pars->ZERO, w[38]); 
-  FFV1_2(w[36], w[8], pars->GC_2, pars->ZERO, pars->ZERO, w[39]); 
-  FFV2_5_2(w[36], w[17], pars->GC_51, pars->GC_58, pars->ZERO, pars->ZERO,
-      w[40]);
-  VVV1P0_1(w[5], w[6], pars->GC_10, pars->ZERO, pars->ZERO, w[41]); 
-  FFV1_2(w[3], w[41], pars->GC_11, pars->ZERO, pars->ZERO, w[42]); 
-  VVV1P0_1(w[41], w[7], pars->GC_10, pars->ZERO, pars->ZERO, w[43]); 
-  FFV1_1(w[9], w[41], pars->GC_11, pars->ZERO, pars->ZERO, w[44]); 
-  FFV1_2(w[3], w[35], pars->GC_11, pars->ZERO, pars->ZERO, w[45]); 
-  VVV1P0_1(w[35], w[6], pars->GC_10, pars->ZERO, pars->ZERO, w[46]); 
-  FFV1_1(w[9], w[35], pars->GC_11, pars->ZERO, pars->ZERO, w[47]); 
-  FFV1_2(w[3], w[29], pars->GC_11, pars->ZERO, pars->ZERO, w[48]); 
-  VVV1P0_1(w[5], w[29], pars->GC_10, pars->ZERO, pars->ZERO, w[49]); 
-  FFV1_1(w[9], w[29], pars->GC_11, pars->ZERO, pars->ZERO, w[50]); 
-  VVVV1P0_1(w[5], w[6], w[7], pars->GC_12, pars->ZERO, pars->ZERO, w[51]); 
-  VVVV3P0_1(w[5], w[6], w[7], pars->GC_12, pars->ZERO, pars->ZERO, w[52]); 
-  VVVV4P0_1(w[5], w[6], w[7], pars->GC_12, pars->ZERO, pars->ZERO, w[53]); 
-  FFV1_1(w[2], w[5], pars->GC_11, pars->ZERO, pars->ZERO, w[54]); 
-  FFV1_1(w[54], w[4], pars->GC_11, pars->ZERO, pars->ZERO, w[55]); 
-  FFV1_1(w[54], w[6], pars->GC_11, pars->ZERO, pars->ZERO, w[56]); 
-  FFV1_2(w[10], w[4], pars->GC_11, pars->ZERO, pars->ZERO, w[57]); 
-  FFV1_1(w[54], w[7], pars->GC_11, pars->ZERO, pars->ZERO, w[58]); 
-  FFV1_2(w[18], w[4], pars->GC_11, pars->ZERO, pars->ZERO, w[59]); 
-  FFV1_2(w[3], w[4], pars->GC_11, pars->ZERO, pars->ZERO, w[60]); 
-  FFV1_1(w[54], w[8], pars->GC_2, pars->ZERO, pars->ZERO, w[61]); 
-  FFV1_2(w[60], w[6], pars->GC_11, pars->ZERO, pars->ZERO, w[62]); 
-  FFV1_2(w[60], w[7], pars->GC_11, pars->ZERO, pars->ZERO, w[63]); 
-  FFV1_2(w[60], w[8], pars->GC_2, pars->ZERO, pars->ZERO, w[64]); 
-  FFV2_5_1(w[54], w[17], pars->GC_51, pars->GC_58, pars->ZERO, pars->ZERO,
-      w[65]);
-  FFV2_5_2(w[60], w[17], pars->GC_51, pars->GC_58, pars->ZERO, pars->ZERO,
-      w[66]);
-  FFV1_2(w[30], w[4], pars->GC_11, pars->ZERO, pars->ZERO, w[67]); 
-  VVV1P0_1(w[4], w[7], pars->GC_10, pars->ZERO, pars->ZERO, w[68]); 
-  FFV1_2(w[36], w[4], pars->GC_11, pars->ZERO, pars->ZERO, w[69]); 
-  VVV1P0_1(w[4], w[6], pars->GC_10, pars->ZERO, pars->ZERO, w[70]); 
-  FFV1_2(w[3], w[70], pars->GC_11, pars->ZERO, pars->ZERO, w[71]); 
-  VVV1P0_1(w[70], w[7], pars->GC_10, pars->ZERO, pars->ZERO, w[72]); 
-  FFV1_1(w[54], w[70], pars->GC_11, pars->ZERO, pars->ZERO, w[73]); 
-  FFV1_2(w[3], w[68], pars->GC_11, pars->ZERO, pars->ZERO, w[74]); 
-  VVV1P0_1(w[68], w[6], pars->GC_10, pars->ZERO, pars->ZERO, w[75]); 
-  FFV1_1(w[54], w[68], pars->GC_11, pars->ZERO, pars->ZERO, w[76]); 
-  VVV1P0_1(w[4], w[29], pars->GC_10, pars->ZERO, pars->ZERO, w[77]); 
-  FFV1_1(w[54], w[29], pars->GC_11, pars->ZERO, pars->ZERO, w[78]); 
-  VVVV1P0_1(w[4], w[6], w[7], pars->GC_12, pars->ZERO, pars->ZERO, w[79]); 
-  VVVV3P0_1(w[4], w[6], w[7], pars->GC_12, pars->ZERO, pars->ZERO, w[80]); 
-  VVVV4P0_1(w[4], w[6], w[7], pars->GC_12, pars->ZERO, pars->ZERO, w[81]); 
-  FFV1_1(w[2], w[6], pars->GC_11, pars->ZERO, pars->ZERO, w[82]); 
-  FFV1_1(w[82], w[4], pars->GC_11, pars->ZERO, pars->ZERO, w[83]); 
-  FFV1_1(w[82], w[5], pars->GC_11, pars->ZERO, pars->ZERO, w[84]); 
-  FFV1_1(w[82], w[7], pars->GC_11, pars->ZERO, pars->ZERO, w[85]); 
-  FFV1_1(w[82], w[8], pars->GC_2, pars->ZERO, pars->ZERO, w[86]); 
-  FFV1_2(w[60], w[5], pars->GC_11, pars->ZERO, pars->ZERO, w[87]); 
-  FFV2_5_1(w[82], w[17], pars->GC_51, pars->GC_58, pars->ZERO, pars->ZERO,
-      w[88]);
-  FFV1_2(w[22], w[4], pars->GC_11, pars->ZERO, pars->ZERO, w[89]); 
-  VVV1P0_1(w[4], w[5], pars->GC_10, pars->ZERO, pars->ZERO, w[90]); 
-  FFV1_2(w[3], w[90], pars->GC_11, pars->ZERO, pars->ZERO, w[91]); 
-  VVV1P0_1(w[90], w[7], pars->GC_10, pars->ZERO, pars->ZERO, w[92]); 
-  FFV1_1(w[82], w[90], pars->GC_11, pars->ZERO, pars->ZERO, w[93]); 
-  VVV1P0_1(w[68], w[5], pars->GC_10, pars->ZERO, pars->ZERO, w[94]); 
-  FFV1_1(w[82], w[68], pars->GC_11, pars->ZERO, pars->ZERO, w[95]); 
-  VVV1P0_1(w[4], w[35], pars->GC_10, pars->ZERO, pars->ZERO, w[96]); 
-  FFV1_1(w[82], w[35], pars->GC_11, pars->ZERO, pars->ZERO, w[97]); 
-  VVVV1P0_1(w[4], w[5], w[7], pars->GC_12, pars->ZERO, pars->ZERO, w[98]); 
-  VVVV3P0_1(w[4], w[5], w[7], pars->GC_12, pars->ZERO, pars->ZERO, w[99]); 
-  VVVV4P0_1(w[4], w[5], w[7], pars->GC_12, pars->ZERO, pars->ZERO, w[100]); 
-  FFV1_1(w[2], w[7], pars->GC_11, pars->ZERO, pars->ZERO, w[101]); 
-  FFV1_1(w[101], w[4], pars->GC_11, pars->ZERO, pars->ZERO, w[102]); 
-  FFV1_1(w[101], w[5], pars->GC_11, pars->ZERO, pars->ZERO, w[103]); 
-  FFV1_1(w[101], w[6], pars->GC_11, pars->ZERO, pars->ZERO, w[104]); 
-  FFV1_1(w[101], w[8], pars->GC_2, pars->ZERO, pars->ZERO, w[105]); 
-  FFV2_5_1(w[101], w[17], pars->GC_51, pars->GC_58, pars->ZERO, pars->ZERO,
-      w[106]);
-  VVV1P0_1(w[90], w[6], pars->GC_10, pars->ZERO, pars->ZERO, w[107]); 
-  FFV1_1(w[101], w[90], pars->GC_11, pars->ZERO, pars->ZERO, w[108]); 
-  VVV1P0_1(w[70], w[5], pars->GC_10, pars->ZERO, pars->ZERO, w[109]); 
-  FFV1_1(w[101], w[70], pars->GC_11, pars->ZERO, pars->ZERO, w[110]); 
-  VVV1P0_1(w[4], w[41], pars->GC_10, pars->ZERO, pars->ZERO, w[111]); 
-  FFV1_1(w[101], w[41], pars->GC_11, pars->ZERO, pars->ZERO, w[112]); 
-  VVVV1P0_1(w[4], w[5], w[6], pars->GC_12, pars->ZERO, pars->ZERO, w[113]); 
-  VVVV3P0_1(w[4], w[5], w[6], pars->GC_12, pars->ZERO, pars->ZERO, w[114]); 
-  VVVV4P0_1(w[4], w[5], w[6], pars->GC_12, pars->ZERO, pars->ZERO, w[115]); 
-  FFV1_1(w[2], w[8], pars->GC_2, pars->ZERO, pars->ZERO, w[116]); 
-  FFV1_1(w[116], w[6], pars->GC_11, pars->ZERO, pars->ZERO, w[117]); 
-  FFV1_1(w[116], w[7], pars->GC_11, pars->ZERO, pars->ZERO, w[118]); 
-  FFV1_1(w[116], w[5], pars->GC_11, pars->ZERO, pars->ZERO, w[119]); 
-  FFV2_5_1(w[2], w[17], pars->GC_51, pars->GC_58, pars->ZERO, pars->ZERO,
-      w[120]);
-  FFV1_1(w[120], w[6], pars->GC_11, pars->ZERO, pars->ZERO, w[121]); 
-  FFV1_1(w[120], w[7], pars->GC_11, pars->ZERO, pars->ZERO, w[122]); 
-  FFV1_1(w[120], w[5], pars->GC_11, pars->ZERO, pars->ZERO, w[123]); 
-  FFV1_2(w[60], w[41], pars->GC_11, pars->ZERO, pars->ZERO, w[124]); 
-  FFV1_1(w[2], w[41], pars->GC_11, pars->ZERO, pars->ZERO, w[125]); 
-  FFV1_2(w[60], w[35], pars->GC_11, pars->ZERO, pars->ZERO, w[126]); 
-  FFV1_1(w[2], w[35], pars->GC_11, pars->ZERO, pars->ZERO, w[127]); 
-  FFV1_2(w[60], w[29], pars->GC_11, pars->ZERO, pars->ZERO, w[128]); 
-  FFV1_1(w[2], w[29], pars->GC_11, pars->ZERO, pars->ZERO, w[129]); 
-  FFV1_1(w[116], w[4], pars->GC_11, pars->ZERO, pars->ZERO, w[130]); 
-  FFV1_1(w[120], w[4], pars->GC_11, pars->ZERO, pars->ZERO, w[131]); 
-  FFV1_2(w[22], w[70], pars->GC_11, pars->ZERO, pars->ZERO, w[132]); 
-  FFV1_1(w[2], w[70], pars->GC_11, pars->ZERO, pars->ZERO, w[133]); 
-  FFV1_2(w[22], w[68], pars->GC_11, pars->ZERO, pars->ZERO, w[134]); 
-  FFV1_1(w[2], w[68], pars->GC_11, pars->ZERO, pars->ZERO, w[135]); 
-  FFV1_2(w[22], w[29], pars->GC_11, pars->ZERO, pars->ZERO, w[136]); 
-  FFV1_2(w[30], w[90], pars->GC_11, pars->ZERO, pars->ZERO, w[137]); 
-  FFV1_1(w[2], w[90], pars->GC_11, pars->ZERO, pars->ZERO, w[138]); 
-  FFV1_2(w[30], w[68], pars->GC_11, pars->ZERO, pars->ZERO, w[139]); 
-  FFV1_2(w[30], w[35], pars->GC_11, pars->ZERO, pars->ZERO, w[140]); 
-  FFV1_2(w[36], w[90], pars->GC_11, pars->ZERO, pars->ZERO, w[141]); 
-  FFV1_2(w[36], w[70], pars->GC_11, pars->ZERO, pars->ZERO, w[142]); 
-  FFV1_2(w[36], w[41], pars->GC_11, pars->ZERO, pars->ZERO, w[143]); 
-  FFV1P0_3(w[3], w[116], pars->GC_11, pars->ZERO, pars->ZERO, w[144]); 
-  VVVV1P0_1(w[90], w[6], w[7], pars->GC_12, pars->ZERO, pars->ZERO, w[145]); 
-  VVVV3P0_1(w[90], w[6], w[7], pars->GC_12, pars->ZERO, pars->ZERO, w[146]); 
-  VVVV4P0_1(w[90], w[6], w[7], pars->GC_12, pars->ZERO, pars->ZERO, w[147]); 
-  FFV1P0_3(w[10], w[2], pars->GC_11, pars->ZERO, pars->ZERO, w[148]); 
-  FFV1P0_3(w[3], w[120], pars->GC_11, pars->ZERO, pars->ZERO, w[149]); 
-  FFV1P0_3(w[18], w[2], pars->GC_11, pars->ZERO, pars->ZERO, w[150]); 
-  VVV1P0_1(w[90], w[29], pars->GC_10, pars->ZERO, pars->ZERO, w[151]); 
-  VVVV1P0_1(w[70], w[5], w[7], pars->GC_12, pars->ZERO, pars->ZERO, w[152]); 
-  VVVV3P0_1(w[70], w[5], w[7], pars->GC_12, pars->ZERO, pars->ZERO, w[153]); 
-  VVVV4P0_1(w[70], w[5], w[7], pars->GC_12, pars->ZERO, pars->ZERO, w[154]); 
-  VVV1P0_1(w[70], w[35], pars->GC_10, pars->ZERO, pars->ZERO, w[155]); 
-  VVVV1P0_1(w[68], w[5], w[6], pars->GC_12, pars->ZERO, pars->ZERO, w[156]); 
-  VVVV3P0_1(w[68], w[5], w[6], pars->GC_12, pars->ZERO, pars->ZERO, w[157]); 
-  VVVV4P0_1(w[68], w[5], w[6], pars->GC_12, pars->ZERO, pars->ZERO, w[158]); 
-  VVV1P0_1(w[68], w[41], pars->GC_10, pars->ZERO, pars->ZERO, w[159]); 
-  VVVV1P0_1(w[4], w[41], w[7], pars->GC_12, pars->ZERO, pars->ZERO, w[160]); 
-  VVVV3P0_1(w[4], w[41], w[7], pars->GC_12, pars->ZERO, pars->ZERO, w[161]); 
-  VVVV4P0_1(w[4], w[41], w[7], pars->GC_12, pars->ZERO, pars->ZERO, w[162]); 
-  VVVV1P0_1(w[4], w[35], w[6], pars->GC_12, pars->ZERO, pars->ZERO, w[163]); 
-  VVVV3P0_1(w[4], w[35], w[6], pars->GC_12, pars->ZERO, pars->ZERO, w[164]); 
-  VVVV4P0_1(w[4], w[35], w[6], pars->GC_12, pars->ZERO, pars->ZERO, w[165]); 
-  VVVV1P0_1(w[4], w[5], w[29], pars->GC_12, pars->ZERO, pars->ZERO, w[166]); 
-  VVVV3P0_1(w[4], w[5], w[29], pars->GC_12, pars->ZERO, pars->ZERO, w[167]); 
-  VVVV4P0_1(w[4], w[5], w[29], pars->GC_12, pars->ZERO, pars->ZERO, w[168]); 
-  FFV1_2(w[3], w[113], pars->GC_11, pars->ZERO, pars->ZERO, w[169]); 
-  FFV1_2(w[3], w[114], pars->GC_11, pars->ZERO, pars->ZERO, w[170]); 
-  FFV1_2(w[3], w[115], pars->GC_11, pars->ZERO, pars->ZERO, w[171]); 
-  VVV1P0_1(w[113], w[7], pars->GC_10, pars->ZERO, pars->ZERO, w[172]); 
-  VVV1P0_1(w[114], w[7], pars->GC_10, pars->ZERO, pars->ZERO, w[173]); 
-  VVV1P0_1(w[115], w[7], pars->GC_10, pars->ZERO, pars->ZERO, w[174]); 
-  FFV1_1(w[2], w[113], pars->GC_11, pars->ZERO, pars->ZERO, w[175]); 
-  FFV1_1(w[2], w[114], pars->GC_11, pars->ZERO, pars->ZERO, w[176]); 
-  FFV1_1(w[2], w[115], pars->GC_11, pars->ZERO, pars->ZERO, w[177]); 
-  FFV1_2(w[3], w[98], pars->GC_11, pars->ZERO, pars->ZERO, w[178]); 
-  FFV1_2(w[3], w[99], pars->GC_11, pars->ZERO, pars->ZERO, w[179]); 
-  FFV1_2(w[3], w[100], pars->GC_11, pars->ZERO, pars->ZERO, w[180]); 
-  VVV1P0_1(w[98], w[6], pars->GC_10, pars->ZERO, pars->ZERO, w[181]); 
-  VVV1P0_1(w[99], w[6], pars->GC_10, pars->ZERO, pars->ZERO, w[182]); 
-  VVV1P0_1(w[100], w[6], pars->GC_10, pars->ZERO, pars->ZERO, w[183]); 
-  FFV1_1(w[2], w[98], pars->GC_11, pars->ZERO, pars->ZERO, w[184]); 
-  FFV1_1(w[2], w[99], pars->GC_11, pars->ZERO, pars->ZERO, w[185]); 
-  FFV1_1(w[2], w[100], pars->GC_11, pars->ZERO, pars->ZERO, w[186]); 
-  FFV1_2(w[3], w[79], pars->GC_11, pars->ZERO, pars->ZERO, w[187]); 
-  FFV1_2(w[3], w[80], pars->GC_11, pars->ZERO, pars->ZERO, w[188]); 
-  FFV1_2(w[3], w[81], pars->GC_11, pars->ZERO, pars->ZERO, w[189]); 
-  VVV1P0_1(w[79], w[5], pars->GC_10, pars->ZERO, pars->ZERO, w[190]); 
-  VVV1P0_1(w[80], w[5], pars->GC_10, pars->ZERO, pars->ZERO, w[191]); 
-  VVV1P0_1(w[81], w[5], pars->GC_10, pars->ZERO, pars->ZERO, w[192]); 
-  FFV1_1(w[2], w[79], pars->GC_11, pars->ZERO, pars->ZERO, w[193]); 
-  FFV1_1(w[2], w[80], pars->GC_11, pars->ZERO, pars->ZERO, w[194]); 
-  FFV1_1(w[2], w[81], pars->GC_11, pars->ZERO, pars->ZERO, w[195]); 
-  FFV1_2(w[3], w[51], pars->GC_11, pars->ZERO, pars->ZERO, w[196]); 
-  FFV1_2(w[3], w[52], pars->GC_11, pars->ZERO, pars->ZERO, w[197]); 
-  FFV1_2(w[3], w[53], pars->GC_11, pars->ZERO, pars->ZERO, w[198]); 
-  VVV1P0_1(w[4], w[51], pars->GC_10, pars->ZERO, pars->ZERO, w[199]); 
-  VVV1P0_1(w[4], w[52], pars->GC_10, pars->ZERO, pars->ZERO, w[200]); 
-  VVV1P0_1(w[4], w[53], pars->GC_10, pars->ZERO, pars->ZERO, w[201]); 
-  FFV1_1(w[2], w[51], pars->GC_11, pars->ZERO, pars->ZERO, w[202]); 
-  FFV1_1(w[2], w[52], pars->GC_11, pars->ZERO, pars->ZERO, w[203]); 
-  FFV1_1(w[2], w[53], pars->GC_11, pars->ZERO, pars->ZERO, w[204]); 
-
-  // Calculate all amplitudes
-  // Amplitude(s) for diagram number 0
-  FFV1_0(w[12], w[11], w[7], pars->GC_11, amp[0]); 
-  FFV1_0(w[13], w[11], w[6], pars->GC_11, amp[1]); 
-  FFV1_0(w[15], w[14], w[7], pars->GC_11, amp[2]); 
-  FFV1_0(w[13], w[14], w[5], pars->GC_11, amp[3]); 
-  FFV1_0(w[15], w[16], w[6], pars->GC_11, amp[4]); 
-  FFV1_0(w[12], w[16], w[5], pars->GC_11, amp[5]); 
-  FFV1_0(w[19], w[11], w[7], pars->GC_11, amp[6]); 
-  FFV1_0(w[20], w[11], w[6], pars->GC_11, amp[7]); 
-  FFV1_0(w[21], w[14], w[7], pars->GC_11, amp[8]); 
-  FFV1_0(w[20], w[14], w[5], pars->GC_11, amp[9]); 
-  FFV1_0(w[21], w[16], w[6], pars->GC_11, amp[10]); 
-  FFV1_0(w[19], w[16], w[5], pars->GC_11, amp[11]); 
-  FFV1_0(w[24], w[23], w[7], pars->GC_11, amp[12]); 
-  FFV1_0(w[25], w[23], w[6], pars->GC_11, amp[13]); 
-  FFV1_0(w[26], w[14], w[7], pars->GC_11, amp[14]); 
-  FFV1_0(w[26], w[16], w[6], pars->GC_11, amp[15]); 
-  FFV1_0(w[25], w[14], w[8], pars->GC_2, amp[16]); 
-  FFV1_0(w[24], w[16], w[8], pars->GC_2, amp[17]); 
-  FFV1_0(w[24], w[27], w[7], pars->GC_11, amp[18]); 
-  FFV1_0(w[25], w[27], w[6], pars->GC_11, amp[19]); 
-  FFV1_0(w[28], w[14], w[7], pars->GC_11, amp[20]); 
-  FFV1_0(w[28], w[16], w[6], pars->GC_11, amp[21]); 
-  FFV2_5_0(w[25], w[14], w[17], pars->GC_51, pars->GC_58, amp[22]); 
-  FFV2_5_0(w[24], w[16], w[17], pars->GC_51, pars->GC_58, amp[23]); 
-  FFV1_0(w[22], w[23], w[29], pars->GC_11, amp[24]); 
-  FFV1_0(w[26], w[9], w[29], pars->GC_11, amp[25]); 
-  FFV1_0(w[22], w[27], w[29], pars->GC_11, amp[26]); 
-  FFV1_0(w[28], w[9], w[29], pars->GC_11, amp[27]); 
-  FFV1_0(w[31], w[23], w[7], pars->GC_11, amp[28]); 
-  FFV1_0(w[32], w[23], w[5], pars->GC_11, amp[29]); 
-  FFV1_0(w[33], w[11], w[7], pars->GC_11, amp[30]); 
-  FFV1_0(w[33], w[16], w[5], pars->GC_11, amp[31]); 
-  FFV1_0(w[32], w[11], w[8], pars->GC_2, amp[32]); 
-  FFV1_0(w[31], w[16], w[8], pars->GC_2, amp[33]); 
-  FFV1_0(w[31], w[27], w[7], pars->GC_11, amp[34]); 
-  FFV1_0(w[32], w[27], w[5], pars->GC_11, amp[35]); 
-  FFV1_0(w[34], w[11], w[7], pars->GC_11, amp[36]); 
-  FFV1_0(w[34], w[16], w[5], pars->GC_11, amp[37]); 
-  FFV2_5_0(w[32], w[11], w[17], pars->GC_51, pars->GC_58, amp[38]); 
-  FFV2_5_0(w[31], w[16], w[17], pars->GC_51, pars->GC_58, amp[39]); 
-  FFV1_0(w[30], w[23], w[35], pars->GC_11, amp[40]); 
-  FFV1_0(w[33], w[9], w[35], pars->GC_11, amp[41]); 
-  FFV1_0(w[30], w[27], w[35], pars->GC_11, amp[42]); 
-  FFV1_0(w[34], w[9], w[35], pars->GC_11, amp[43]); 
-  FFV1_0(w[37], w[23], w[6], pars->GC_11, amp[44]); 
-  FFV1_0(w[38], w[23], w[5], pars->GC_11, amp[45]); 
-  FFV1_0(w[39], w[11], w[6], pars->GC_11, amp[46]); 
-  FFV1_0(w[39], w[14], w[5], pars->GC_11, amp[47]); 
-  FFV1_0(w[38], w[11], w[8], pars->GC_2, amp[48]); 
-  FFV1_0(w[37], w[14], w[8], pars->GC_2, amp[49]); 
-  FFV1_0(w[37], w[27], w[6], pars->GC_11, amp[50]); 
-  FFV1_0(w[38], w[27], w[5], pars->GC_11, amp[51]); 
-  FFV1_0(w[40], w[11], w[6], pars->GC_11, amp[52]); 
-  FFV1_0(w[40], w[14], w[5], pars->GC_11, amp[53]); 
-  FFV2_5_0(w[38], w[11], w[17], pars->GC_51, pars->GC_58, amp[54]); 
-  FFV2_5_0(w[37], w[14], w[17], pars->GC_51, pars->GC_58, amp[55]); 
-  FFV1_0(w[36], w[23], w[41], pars->GC_11, amp[56]); 
-  FFV1_0(w[39], w[9], w[41], pars->GC_11, amp[57]); 
-  FFV1_0(w[36], w[27], w[41], pars->GC_11, amp[58]); 
-  FFV1_0(w[40], w[9], w[41], pars->GC_11, amp[59]); 
-  FFV1_0(w[42], w[23], w[7], pars->GC_11, amp[60]); 
-  FFV1_0(w[3], w[23], w[43], pars->GC_11, amp[61]); 
-  FFV1_0(w[10], w[44], w[7], pars->GC_11, amp[62]); 
-  FFV1_0(w[10], w[16], w[41], pars->GC_11, amp[63]); 
-  FFV1_0(w[10], w[9], w[43], pars->GC_11, amp[64]); 
-  FFV1_0(w[42], w[16], w[8], pars->GC_2, amp[65]); 
-  FFV1_0(w[42], w[27], w[7], pars->GC_11, amp[66]); 
-  FFV1_0(w[3], w[27], w[43], pars->GC_11, amp[67]); 
-  FFV1_0(w[18], w[44], w[7], pars->GC_11, amp[68]); 
-  FFV1_0(w[18], w[16], w[41], pars->GC_11, amp[69]); 
-  FFV1_0(w[18], w[9], w[43], pars->GC_11, amp[70]); 
-  FFV2_5_0(w[42], w[16], w[17], pars->GC_51, pars->GC_58, amp[71]); 
-  FFV1_0(w[45], w[23], w[6], pars->GC_11, amp[72]); 
-  FFV1_0(w[3], w[23], w[46], pars->GC_11, amp[73]); 
-  FFV1_0(w[10], w[47], w[6], pars->GC_11, amp[74]); 
-  FFV1_0(w[10], w[14], w[35], pars->GC_11, amp[75]); 
-  FFV1_0(w[10], w[9], w[46], pars->GC_11, amp[76]); 
-  FFV1_0(w[45], w[14], w[8], pars->GC_2, amp[77]); 
-  FFV1_0(w[45], w[27], w[6], pars->GC_11, amp[78]); 
-  FFV1_0(w[3], w[27], w[46], pars->GC_11, amp[79]); 
-  FFV1_0(w[18], w[47], w[6], pars->GC_11, amp[80]); 
-  FFV1_0(w[18], w[14], w[35], pars->GC_11, amp[81]); 
-  FFV1_0(w[18], w[9], w[46], pars->GC_11, amp[82]); 
-  FFV2_5_0(w[45], w[14], w[17], pars->GC_51, pars->GC_58, amp[83]); 
-  FFV1_0(w[48], w[23], w[5], pars->GC_11, amp[84]); 
-  FFV1_0(w[3], w[23], w[49], pars->GC_11, amp[85]); 
-  FFV1_0(w[10], w[11], w[29], pars->GC_11, amp[86]); 
-  FFV1_0(w[10], w[50], w[5], pars->GC_11, amp[87]); 
-  FFV1_0(w[10], w[9], w[49], pars->GC_11, amp[88]); 
-  FFV1_0(w[48], w[11], w[8], pars->GC_2, amp[89]); 
-  FFV1_0(w[48], w[27], w[5], pars->GC_11, amp[90]); 
-  FFV1_0(w[3], w[27], w[49], pars->GC_11, amp[91]); 
-  FFV1_0(w[18], w[11], w[29], pars->GC_11, amp[92]); 
-  FFV1_0(w[18], w[50], w[5], pars->GC_11, amp[93]); 
-  FFV1_0(w[18], w[9], w[49], pars->GC_11, amp[94]); 
-  FFV2_5_0(w[48], w[11], w[17], pars->GC_51, pars->GC_58, amp[95]); 
-  FFV1_0(w[3], w[23], w[51], pars->GC_11, amp[96]); 
-  FFV1_0(w[3], w[23], w[52], pars->GC_11, amp[97]); 
-  FFV1_0(w[3], w[23], w[53], pars->GC_11, amp[98]); 
-  FFV1_0(w[10], w[9], w[51], pars->GC_11, amp[99]); 
-  FFV1_0(w[10], w[9], w[52], pars->GC_11, amp[100]); 
-  FFV1_0(w[10], w[9], w[53], pars->GC_11, amp[101]); 
-  FFV1_0(w[3], w[27], w[51], pars->GC_11, amp[102]); 
-  FFV1_0(w[3], w[27], w[52], pars->GC_11, amp[103]); 
-  FFV1_0(w[3], w[27], w[53], pars->GC_11, amp[104]); 
-  FFV1_0(w[18], w[9], w[51], pars->GC_11, amp[105]); 
-  FFV1_0(w[18], w[9], w[52], pars->GC_11, amp[106]); 
-  FFV1_0(w[18], w[9], w[53], pars->GC_11, amp[107]); 
-  FFV1_0(w[12], w[55], w[7], pars->GC_11, amp[108]); 
-  FFV1_0(w[13], w[55], w[6], pars->GC_11, amp[109]); 
-  FFV1_0(w[57], w[56], w[7], pars->GC_11, amp[110]); 
-  FFV1_0(w[13], w[56], w[4], pars->GC_11, amp[111]); 
-  FFV1_0(w[57], w[58], w[6], pars->GC_11, amp[112]); 
-  FFV1_0(w[12], w[58], w[4], pars->GC_11, amp[113]); 
-  FFV1_0(w[19], w[55], w[7], pars->GC_11, amp[114]); 
-  FFV1_0(w[20], w[55], w[6], pars->GC_11, amp[115]); 
-  FFV1_0(w[59], w[56], w[7], pars->GC_11, amp[116]); 
-  FFV1_0(w[20], w[56], w[4], pars->GC_11, amp[117]); 
-  FFV1_0(w[59], w[58], w[6], pars->GC_11, amp[118]); 
-  FFV1_0(w[19], w[58], w[4], pars->GC_11, amp[119]); 
-  FFV1_0(w[62], w[61], w[7], pars->GC_11, amp[120]); 
-  FFV1_0(w[63], w[61], w[6], pars->GC_11, amp[121]); 
-  FFV1_0(w[64], w[56], w[7], pars->GC_11, amp[122]); 
-  FFV1_0(w[64], w[58], w[6], pars->GC_11, amp[123]); 
-  FFV1_0(w[63], w[56], w[8], pars->GC_2, amp[124]); 
-  FFV1_0(w[62], w[58], w[8], pars->GC_2, amp[125]); 
-  FFV1_0(w[62], w[65], w[7], pars->GC_11, amp[126]); 
-  FFV1_0(w[63], w[65], w[6], pars->GC_11, amp[127]); 
-  FFV1_0(w[66], w[56], w[7], pars->GC_11, amp[128]); 
-  FFV1_0(w[66], w[58], w[6], pars->GC_11, amp[129]); 
-  FFV2_5_0(w[63], w[56], w[17], pars->GC_51, pars->GC_58, amp[130]); 
-  FFV2_5_0(w[62], w[58], w[17], pars->GC_51, pars->GC_58, amp[131]); 
-  FFV1_0(w[60], w[61], w[29], pars->GC_11, amp[132]); 
-  FFV1_0(w[64], w[54], w[29], pars->GC_11, amp[133]); 
-  FFV1_0(w[60], w[65], w[29], pars->GC_11, amp[134]); 
-  FFV1_0(w[66], w[54], w[29], pars->GC_11, amp[135]); 
-  FFV1_0(w[67], w[61], w[7], pars->GC_11, amp[136]); 
-  FFV1_0(w[32], w[61], w[4], pars->GC_11, amp[137]); 
-  FFV1_0(w[33], w[55], w[7], pars->GC_11, amp[138]); 
-  FFV1_0(w[33], w[58], w[4], pars->GC_11, amp[139]); 
-  FFV1_0(w[32], w[55], w[8], pars->GC_2, amp[140]); 
-  FFV1_0(w[67], w[58], w[8], pars->GC_2, amp[141]); 
-  FFV1_0(w[67], w[65], w[7], pars->GC_11, amp[142]); 
-  FFV1_0(w[32], w[65], w[4], pars->GC_11, amp[143]); 
-  FFV1_0(w[34], w[55], w[7], pars->GC_11, amp[144]); 
-  FFV1_0(w[34], w[58], w[4], pars->GC_11, amp[145]); 
-  FFV2_5_0(w[32], w[55], w[17], pars->GC_51, pars->GC_58, amp[146]); 
-  FFV2_5_0(w[67], w[58], w[17], pars->GC_51, pars->GC_58, amp[147]); 
-  FFV1_0(w[30], w[61], w[68], pars->GC_11, amp[148]); 
-  FFV1_0(w[33], w[54], w[68], pars->GC_11, amp[149]); 
-  FFV1_0(w[30], w[65], w[68], pars->GC_11, amp[150]); 
-  FFV1_0(w[34], w[54], w[68], pars->GC_11, amp[151]); 
-  FFV1_0(w[69], w[61], w[6], pars->GC_11, amp[152]); 
-  FFV1_0(w[38], w[61], w[4], pars->GC_11, amp[153]); 
-  FFV1_0(w[39], w[55], w[6], pars->GC_11, amp[154]); 
-  FFV1_0(w[39], w[56], w[4], pars->GC_11, amp[155]); 
-  FFV1_0(w[38], w[55], w[8], pars->GC_2, amp[156]); 
-  FFV1_0(w[69], w[56], w[8], pars->GC_2, amp[157]); 
-  FFV1_0(w[69], w[65], w[6], pars->GC_11, amp[158]); 
-  FFV1_0(w[38], w[65], w[4], pars->GC_11, amp[159]); 
-  FFV1_0(w[40], w[55], w[6], pars->GC_11, amp[160]); 
-  FFV1_0(w[40], w[56], w[4], pars->GC_11, amp[161]); 
-  FFV2_5_0(w[38], w[55], w[17], pars->GC_51, pars->GC_58, amp[162]); 
-  FFV2_5_0(w[69], w[56], w[17], pars->GC_51, pars->GC_58, amp[163]); 
-  FFV1_0(w[36], w[61], w[70], pars->GC_11, amp[164]); 
-  FFV1_0(w[39], w[54], w[70], pars->GC_11, amp[165]); 
-  FFV1_0(w[36], w[65], w[70], pars->GC_11, amp[166]); 
-  FFV1_0(w[40], w[54], w[70], pars->GC_11, amp[167]); 
-  FFV1_0(w[71], w[61], w[7], pars->GC_11, amp[168]); 
-  FFV1_0(w[3], w[61], w[72], pars->GC_11, amp[169]); 
-  FFV1_0(w[10], w[73], w[7], pars->GC_11, amp[170]); 
-  FFV1_0(w[10], w[58], w[70], pars->GC_11, amp[171]); 
-  FFV1_0(w[10], w[54], w[72], pars->GC_11, amp[172]); 
-  FFV1_0(w[71], w[58], w[8], pars->GC_2, amp[173]); 
-  FFV1_0(w[71], w[65], w[7], pars->GC_11, amp[174]); 
-  FFV1_0(w[3], w[65], w[72], pars->GC_11, amp[175]); 
-  FFV1_0(w[18], w[73], w[7], pars->GC_11, amp[176]); 
-  FFV1_0(w[18], w[58], w[70], pars->GC_11, amp[177]); 
-  FFV1_0(w[18], w[54], w[72], pars->GC_11, amp[178]); 
-  FFV2_5_0(w[71], w[58], w[17], pars->GC_51, pars->GC_58, amp[179]); 
-  FFV1_0(w[74], w[61], w[6], pars->GC_11, amp[180]); 
-  FFV1_0(w[3], w[61], w[75], pars->GC_11, amp[181]); 
-  FFV1_0(w[10], w[76], w[6], pars->GC_11, amp[182]); 
-  FFV1_0(w[10], w[56], w[68], pars->GC_11, amp[183]); 
-  FFV1_0(w[10], w[54], w[75], pars->GC_11, amp[184]); 
-  FFV1_0(w[74], w[56], w[8], pars->GC_2, amp[185]); 
-  FFV1_0(w[74], w[65], w[6], pars->GC_11, amp[186]); 
-  FFV1_0(w[3], w[65], w[75], pars->GC_11, amp[187]); 
-  FFV1_0(w[18], w[76], w[6], pars->GC_11, amp[188]); 
-  FFV1_0(w[18], w[56], w[68], pars->GC_11, amp[189]); 
-  FFV1_0(w[18], w[54], w[75], pars->GC_11, amp[190]); 
-  FFV2_5_0(w[74], w[56], w[17], pars->GC_51, pars->GC_58, amp[191]); 
-  FFV1_0(w[48], w[61], w[4], pars->GC_11, amp[192]); 
-  FFV1_0(w[3], w[61], w[77], pars->GC_11, amp[193]); 
-  FFV1_0(w[10], w[55], w[29], pars->GC_11, amp[194]); 
-  FFV1_0(w[10], w[78], w[4], pars->GC_11, amp[195]); 
-  FFV1_0(w[10], w[54], w[77], pars->GC_11, amp[196]); 
-  FFV1_0(w[48], w[55], w[8], pars->GC_2, amp[197]); 
-  FFV1_0(w[48], w[65], w[4], pars->GC_11, amp[198]); 
-  FFV1_0(w[3], w[65], w[77], pars->GC_11, amp[199]); 
-  FFV1_0(w[18], w[55], w[29], pars->GC_11, amp[200]); 
-  FFV1_0(w[18], w[78], w[4], pars->GC_11, amp[201]); 
-  FFV1_0(w[18], w[54], w[77], pars->GC_11, amp[202]); 
-  FFV2_5_0(w[48], w[55], w[17], pars->GC_51, pars->GC_58, amp[203]); 
-  FFV1_0(w[3], w[61], w[79], pars->GC_11, amp[204]); 
-  FFV1_0(w[3], w[61], w[80], pars->GC_11, amp[205]); 
-  FFV1_0(w[3], w[61], w[81], pars->GC_11, amp[206]); 
-  FFV1_0(w[10], w[54], w[79], pars->GC_11, amp[207]); 
-  FFV1_0(w[10], w[54], w[80], pars->GC_11, amp[208]); 
-  FFV1_0(w[10], w[54], w[81], pars->GC_11, amp[209]); 
-  FFV1_0(w[3], w[65], w[79], pars->GC_11, amp[210]); 
-  FFV1_0(w[3], w[65], w[80], pars->GC_11, amp[211]); 
-  FFV1_0(w[3], w[65], w[81], pars->GC_11, amp[212]); 
-  FFV1_0(w[18], w[54], w[79], pars->GC_11, amp[213]); 
-  FFV1_0(w[18], w[54], w[80], pars->GC_11, amp[214]); 
-  FFV1_0(w[18], w[54], w[81], pars->GC_11, amp[215]); 
-  FFV1_0(w[15], w[83], w[7], pars->GC_11, amp[216]); 
-  FFV1_0(w[13], w[83], w[5], pars->GC_11, amp[217]); 
-  FFV1_0(w[57], w[84], w[7], pars->GC_11, amp[218]); 
-  FFV1_0(w[13], w[84], w[4], pars->GC_11, amp[219]); 
-  FFV1_0(w[57], w[85], w[5], pars->GC_11, amp[220]); 
-  FFV1_0(w[15], w[85], w[4], pars->GC_11, amp[221]); 
-  FFV1_0(w[21], w[83], w[7], pars->GC_11, amp[222]); 
-  FFV1_0(w[20], w[83], w[5], pars->GC_11, amp[223]); 
-  FFV1_0(w[59], w[84], w[7], pars->GC_11, amp[224]); 
-  FFV1_0(w[20], w[84], w[4], pars->GC_11, amp[225]); 
-  FFV1_0(w[59], w[85], w[5], pars->GC_11, amp[226]); 
-  FFV1_0(w[21], w[85], w[4], pars->GC_11, amp[227]); 
-  FFV1_0(w[87], w[86], w[7], pars->GC_11, amp[228]); 
-  FFV1_0(w[63], w[86], w[5], pars->GC_11, amp[229]); 
-  FFV1_0(w[64], w[84], w[7], pars->GC_11, amp[230]); 
-  FFV1_0(w[64], w[85], w[5], pars->GC_11, amp[231]); 
-  FFV1_0(w[63], w[84], w[8], pars->GC_2, amp[232]); 
-  FFV1_0(w[87], w[85], w[8], pars->GC_2, amp[233]); 
-  FFV1_0(w[87], w[88], w[7], pars->GC_11, amp[234]); 
-  FFV1_0(w[63], w[88], w[5], pars->GC_11, amp[235]); 
-  FFV1_0(w[66], w[84], w[7], pars->GC_11, amp[236]); 
-  FFV1_0(w[66], w[85], w[5], pars->GC_11, amp[237]); 
-  FFV2_5_0(w[63], w[84], w[17], pars->GC_51, pars->GC_58, amp[238]); 
-  FFV2_5_0(w[87], w[85], w[17], pars->GC_51, pars->GC_58, amp[239]); 
-  FFV1_0(w[60], w[86], w[35], pars->GC_11, amp[240]); 
-  FFV1_0(w[64], w[82], w[35], pars->GC_11, amp[241]); 
-  FFV1_0(w[60], w[88], w[35], pars->GC_11, amp[242]); 
-  FFV1_0(w[66], w[82], w[35], pars->GC_11, amp[243]); 
-  FFV1_0(w[89], w[86], w[7], pars->GC_11, amp[244]); 
-  FFV1_0(w[25], w[86], w[4], pars->GC_11, amp[245]); 
-  FFV1_0(w[26], w[83], w[7], pars->GC_11, amp[246]); 
-  FFV1_0(w[26], w[85], w[4], pars->GC_11, amp[247]); 
-  FFV1_0(w[25], w[83], w[8], pars->GC_2, amp[248]); 
-  FFV1_0(w[89], w[85], w[8], pars->GC_2, amp[249]); 
-  FFV1_0(w[89], w[88], w[7], pars->GC_11, amp[250]); 
-  FFV1_0(w[25], w[88], w[4], pars->GC_11, amp[251]); 
-  FFV1_0(w[28], w[83], w[7], pars->GC_11, amp[252]); 
-  FFV1_0(w[28], w[85], w[4], pars->GC_11, amp[253]); 
-  FFV2_5_0(w[25], w[83], w[17], pars->GC_51, pars->GC_58, amp[254]); 
-  FFV2_5_0(w[89], w[85], w[17], pars->GC_51, pars->GC_58, amp[255]); 
-  FFV1_0(w[22], w[86], w[68], pars->GC_11, amp[256]); 
-  FFV1_0(w[26], w[82], w[68], pars->GC_11, amp[257]); 
-  FFV1_0(w[22], w[88], w[68], pars->GC_11, amp[258]); 
-  FFV1_0(w[28], w[82], w[68], pars->GC_11, amp[259]); 
-  FFV1_0(w[69], w[86], w[5], pars->GC_11, amp[260]); 
-  FFV1_0(w[37], w[86], w[4], pars->GC_11, amp[261]); 
-  FFV1_0(w[39], w[83], w[5], pars->GC_11, amp[262]); 
-  FFV1_0(w[39], w[84], w[4], pars->GC_11, amp[263]); 
-  FFV1_0(w[37], w[83], w[8], pars->GC_2, amp[264]); 
-  FFV1_0(w[69], w[84], w[8], pars->GC_2, amp[265]); 
-  FFV1_0(w[69], w[88], w[5], pars->GC_11, amp[266]); 
-  FFV1_0(w[37], w[88], w[4], pars->GC_11, amp[267]); 
-  FFV1_0(w[40], w[83], w[5], pars->GC_11, amp[268]); 
-  FFV1_0(w[40], w[84], w[4], pars->GC_11, amp[269]); 
-  FFV2_5_0(w[37], w[83], w[17], pars->GC_51, pars->GC_58, amp[270]); 
-  FFV2_5_0(w[69], w[84], w[17], pars->GC_51, pars->GC_58, amp[271]); 
-  FFV1_0(w[36], w[86], w[90], pars->GC_11, amp[272]); 
-  FFV1_0(w[39], w[82], w[90], pars->GC_11, amp[273]); 
-  FFV1_0(w[36], w[88], w[90], pars->GC_11, amp[274]); 
-  FFV1_0(w[40], w[82], w[90], pars->GC_11, amp[275]); 
-  FFV1_0(w[91], w[86], w[7], pars->GC_11, amp[276]); 
-  FFV1_0(w[3], w[86], w[92], pars->GC_11, amp[277]); 
-  FFV1_0(w[10], w[93], w[7], pars->GC_11, amp[278]); 
-  FFV1_0(w[10], w[85], w[90], pars->GC_11, amp[279]); 
-  FFV1_0(w[10], w[82], w[92], pars->GC_11, amp[280]); 
-  FFV1_0(w[91], w[85], w[8], pars->GC_2, amp[281]); 
-  FFV1_0(w[91], w[88], w[7], pars->GC_11, amp[282]); 
-  FFV1_0(w[3], w[88], w[92], pars->GC_11, amp[283]); 
-  FFV1_0(w[18], w[93], w[7], pars->GC_11, amp[284]); 
-  FFV1_0(w[18], w[85], w[90], pars->GC_11, amp[285]); 
-  FFV1_0(w[18], w[82], w[92], pars->GC_11, amp[286]); 
-  FFV2_5_0(w[91], w[85], w[17], pars->GC_51, pars->GC_58, amp[287]); 
-  FFV1_0(w[74], w[86], w[5], pars->GC_11, amp[288]); 
-  FFV1_0(w[3], w[86], w[94], pars->GC_11, amp[289]); 
-  FFV1_0(w[10], w[95], w[5], pars->GC_11, amp[290]); 
-  FFV1_0(w[10], w[84], w[68], pars->GC_11, amp[291]); 
-  FFV1_0(w[10], w[82], w[94], pars->GC_11, amp[292]); 
-  FFV1_0(w[74], w[84], w[8], pars->GC_2, amp[293]); 
-  FFV1_0(w[74], w[88], w[5], pars->GC_11, amp[294]); 
-  FFV1_0(w[3], w[88], w[94], pars->GC_11, amp[295]); 
-  FFV1_0(w[18], w[95], w[5], pars->GC_11, amp[296]); 
-  FFV1_0(w[18], w[84], w[68], pars->GC_11, amp[297]); 
-  FFV1_0(w[18], w[82], w[94], pars->GC_11, amp[298]); 
-  FFV2_5_0(w[74], w[84], w[17], pars->GC_51, pars->GC_58, amp[299]); 
-  FFV1_0(w[45], w[86], w[4], pars->GC_11, amp[300]); 
-  FFV1_0(w[3], w[86], w[96], pars->GC_11, amp[301]); 
-  FFV1_0(w[10], w[83], w[35], pars->GC_11, amp[302]); 
-  FFV1_0(w[10], w[97], w[4], pars->GC_11, amp[303]); 
-  FFV1_0(w[10], w[82], w[96], pars->GC_11, amp[304]); 
-  FFV1_0(w[45], w[83], w[8], pars->GC_2, amp[305]); 
-  FFV1_0(w[45], w[88], w[4], pars->GC_11, amp[306]); 
-  FFV1_0(w[3], w[88], w[96], pars->GC_11, amp[307]); 
-  FFV1_0(w[18], w[83], w[35], pars->GC_11, amp[308]); 
-  FFV1_0(w[18], w[97], w[4], pars->GC_11, amp[309]); 
-  FFV1_0(w[18], w[82], w[96], pars->GC_11, amp[310]); 
-  FFV2_5_0(w[45], w[83], w[17], pars->GC_51, pars->GC_58, amp[311]); 
-  FFV1_0(w[3], w[86], w[98], pars->GC_11, amp[312]); 
-  FFV1_0(w[3], w[86], w[99], pars->GC_11, amp[313]); 
-  FFV1_0(w[3], w[86], w[100], pars->GC_11, amp[314]); 
-  FFV1_0(w[10], w[82], w[98], pars->GC_11, amp[315]); 
-  FFV1_0(w[10], w[82], w[99], pars->GC_11, amp[316]); 
-  FFV1_0(w[10], w[82], w[100], pars->GC_11, amp[317]); 
-  FFV1_0(w[3], w[88], w[98], pars->GC_11, amp[318]); 
-  FFV1_0(w[3], w[88], w[99], pars->GC_11, amp[319]); 
-  FFV1_0(w[3], w[88], w[100], pars->GC_11, amp[320]); 
-  FFV1_0(w[18], w[82], w[98], pars->GC_11, amp[321]); 
-  FFV1_0(w[18], w[82], w[99], pars->GC_11, amp[322]); 
-  FFV1_0(w[18], w[82], w[100], pars->GC_11, amp[323]); 
-  FFV1_0(w[15], w[102], w[6], pars->GC_11, amp[324]); 
-  FFV1_0(w[12], w[102], w[5], pars->GC_11, amp[325]); 
-  FFV1_0(w[57], w[103], w[6], pars->GC_11, amp[326]); 
-  FFV1_0(w[12], w[103], w[4], pars->GC_11, amp[327]); 
-  FFV1_0(w[57], w[104], w[5], pars->GC_11, amp[328]); 
-  FFV1_0(w[15], w[104], w[4], pars->GC_11, amp[329]); 
-  FFV1_0(w[21], w[102], w[6], pars->GC_11, amp[330]); 
-  FFV1_0(w[19], w[102], w[5], pars->GC_11, amp[331]); 
-  FFV1_0(w[59], w[103], w[6], pars->GC_11, amp[332]); 
-  FFV1_0(w[19], w[103], w[4], pars->GC_11, amp[333]); 
-  FFV1_0(w[59], w[104], w[5], pars->GC_11, amp[334]); 
-  FFV1_0(w[21], w[104], w[4], pars->GC_11, amp[335]); 
-  FFV1_0(w[87], w[105], w[6], pars->GC_11, amp[336]); 
-  FFV1_0(w[62], w[105], w[5], pars->GC_11, amp[337]); 
-  FFV1_0(w[64], w[103], w[6], pars->GC_11, amp[338]); 
-  FFV1_0(w[64], w[104], w[5], pars->GC_11, amp[339]); 
-  FFV1_0(w[62], w[103], w[8], pars->GC_2, amp[340]); 
-  FFV1_0(w[87], w[104], w[8], pars->GC_2, amp[341]); 
-  FFV1_0(w[87], w[106], w[6], pars->GC_11, amp[342]); 
-  FFV1_0(w[62], w[106], w[5], pars->GC_11, amp[343]); 
-  FFV1_0(w[66], w[103], w[6], pars->GC_11, amp[344]); 
-  FFV1_0(w[66], w[104], w[5], pars->GC_11, amp[345]); 
-  FFV2_5_0(w[62], w[103], w[17], pars->GC_51, pars->GC_58, amp[346]); 
-  FFV2_5_0(w[87], w[104], w[17], pars->GC_51, pars->GC_58, amp[347]); 
-  FFV1_0(w[60], w[105], w[41], pars->GC_11, amp[348]); 
-  FFV1_0(w[64], w[101], w[41], pars->GC_11, amp[349]); 
-  FFV1_0(w[60], w[106], w[41], pars->GC_11, amp[350]); 
-  FFV1_0(w[66], w[101], w[41], pars->GC_11, amp[351]); 
-  FFV1_0(w[89], w[105], w[6], pars->GC_11, amp[352]); 
-  FFV1_0(w[24], w[105], w[4], pars->GC_11, amp[353]); 
-  FFV1_0(w[26], w[102], w[6], pars->GC_11, amp[354]); 
-  FFV1_0(w[26], w[104], w[4], pars->GC_11, amp[355]); 
-  FFV1_0(w[24], w[102], w[8], pars->GC_2, amp[356]); 
-  FFV1_0(w[89], w[104], w[8], pars->GC_2, amp[357]); 
-  FFV1_0(w[89], w[106], w[6], pars->GC_11, amp[358]); 
-  FFV1_0(w[24], w[106], w[4], pars->GC_11, amp[359]); 
-  FFV1_0(w[28], w[102], w[6], pars->GC_11, amp[360]); 
-  FFV1_0(w[28], w[104], w[4], pars->GC_11, amp[361]); 
-  FFV2_5_0(w[24], w[102], w[17], pars->GC_51, pars->GC_58, amp[362]); 
-  FFV2_5_0(w[89], w[104], w[17], pars->GC_51, pars->GC_58, amp[363]); 
-  FFV1_0(w[22], w[105], w[70], pars->GC_11, amp[364]); 
-  FFV1_0(w[26], w[101], w[70], pars->GC_11, amp[365]); 
-  FFV1_0(w[22], w[106], w[70], pars->GC_11, amp[366]); 
-  FFV1_0(w[28], w[101], w[70], pars->GC_11, amp[367]); 
-  FFV1_0(w[67], w[105], w[5], pars->GC_11, amp[368]); 
-  FFV1_0(w[31], w[105], w[4], pars->GC_11, amp[369]); 
-  FFV1_0(w[33], w[102], w[5], pars->GC_11, amp[370]); 
-  FFV1_0(w[33], w[103], w[4], pars->GC_11, amp[371]); 
-  FFV1_0(w[31], w[102], w[8], pars->GC_2, amp[372]); 
-  FFV1_0(w[67], w[103], w[8], pars->GC_2, amp[373]); 
-  FFV1_0(w[67], w[106], w[5], pars->GC_11, amp[374]); 
-  FFV1_0(w[31], w[106], w[4], pars->GC_11, amp[375]); 
-  FFV1_0(w[34], w[102], w[5], pars->GC_11, amp[376]); 
-  FFV1_0(w[34], w[103], w[4], pars->GC_11, amp[377]); 
-  FFV2_5_0(w[31], w[102], w[17], pars->GC_51, pars->GC_58, amp[378]); 
-  FFV2_5_0(w[67], w[103], w[17], pars->GC_51, pars->GC_58, amp[379]); 
-  FFV1_0(w[30], w[105], w[90], pars->GC_11, amp[380]); 
-  FFV1_0(w[33], w[101], w[90], pars->GC_11, amp[381]); 
-  FFV1_0(w[30], w[106], w[90], pars->GC_11, amp[382]); 
-  FFV1_0(w[34], w[101], w[90], pars->GC_11, amp[383]); 
-  FFV1_0(w[91], w[105], w[6], pars->GC_11, amp[384]); 
-  FFV1_0(w[3], w[105], w[107], pars->GC_11, amp[385]); 
-  FFV1_0(w[10], w[108], w[6], pars->GC_11, amp[386]); 
-  FFV1_0(w[10], w[104], w[90], pars->GC_11, amp[387]); 
-  FFV1_0(w[10], w[101], w[107], pars->GC_11, amp[388]); 
-  FFV1_0(w[91], w[104], w[8], pars->GC_2, amp[389]); 
-  FFV1_0(w[91], w[106], w[6], pars->GC_11, amp[390]); 
-  FFV1_0(w[3], w[106], w[107], pars->GC_11, amp[391]); 
-  FFV1_0(w[18], w[108], w[6], pars->GC_11, amp[392]); 
-  FFV1_0(w[18], w[104], w[90], pars->GC_11, amp[393]); 
-  FFV1_0(w[18], w[101], w[107], pars->GC_11, amp[394]); 
-  FFV2_5_0(w[91], w[104], w[17], pars->GC_51, pars->GC_58, amp[395]); 
-  FFV1_0(w[71], w[105], w[5], pars->GC_11, amp[396]); 
-  FFV1_0(w[3], w[105], w[109], pars->GC_11, amp[397]); 
-  FFV1_0(w[10], w[110], w[5], pars->GC_11, amp[398]); 
-  FFV1_0(w[10], w[103], w[70], pars->GC_11, amp[399]); 
-  FFV1_0(w[10], w[101], w[109], pars->GC_11, amp[400]); 
-  FFV1_0(w[71], w[103], w[8], pars->GC_2, amp[401]); 
-  FFV1_0(w[71], w[106], w[5], pars->GC_11, amp[402]); 
-  FFV1_0(w[3], w[106], w[109], pars->GC_11, amp[403]); 
-  FFV1_0(w[18], w[110], w[5], pars->GC_11, amp[404]); 
-  FFV1_0(w[18], w[103], w[70], pars->GC_11, amp[405]); 
-  FFV1_0(w[18], w[101], w[109], pars->GC_11, amp[406]); 
-  FFV2_5_0(w[71], w[103], w[17], pars->GC_51, pars->GC_58, amp[407]); 
-  FFV1_0(w[42], w[105], w[4], pars->GC_11, amp[408]); 
-  FFV1_0(w[3], w[105], w[111], pars->GC_11, amp[409]); 
-  FFV1_0(w[10], w[102], w[41], pars->GC_11, amp[410]); 
-  FFV1_0(w[10], w[112], w[4], pars->GC_11, amp[411]); 
-  FFV1_0(w[10], w[101], w[111], pars->GC_11, amp[412]); 
-  FFV1_0(w[42], w[102], w[8], pars->GC_2, amp[413]); 
-  FFV1_0(w[42], w[106], w[4], pars->GC_11, amp[414]); 
-  FFV1_0(w[3], w[106], w[111], pars->GC_11, amp[415]); 
-  FFV1_0(w[18], w[102], w[41], pars->GC_11, amp[416]); 
-  FFV1_0(w[18], w[112], w[4], pars->GC_11, amp[417]); 
-  FFV1_0(w[18], w[101], w[111], pars->GC_11, amp[418]); 
-  FFV2_5_0(w[42], w[102], w[17], pars->GC_51, pars->GC_58, amp[419]); 
-  FFV1_0(w[3], w[105], w[113], pars->GC_11, amp[420]); 
-  FFV1_0(w[3], w[105], w[114], pars->GC_11, amp[421]); 
-  FFV1_0(w[3], w[105], w[115], pars->GC_11, amp[422]); 
-  FFV1_0(w[10], w[101], w[113], pars->GC_11, amp[423]); 
-  FFV1_0(w[10], w[101], w[114], pars->GC_11, amp[424]); 
-  FFV1_0(w[10], w[101], w[115], pars->GC_11, amp[425]); 
-  FFV1_0(w[3], w[106], w[113], pars->GC_11, amp[426]); 
-  FFV1_0(w[3], w[106], w[114], pars->GC_11, amp[427]); 
-  FFV1_0(w[3], w[106], w[115], pars->GC_11, amp[428]); 
-  FFV1_0(w[18], w[101], w[113], pars->GC_11, amp[429]); 
-  FFV1_0(w[18], w[101], w[114], pars->GC_11, amp[430]); 
-  FFV1_0(w[18], w[101], w[115], pars->GC_11, amp[431]); 
-  FFV1_0(w[87], w[117], w[7], pars->GC_11, amp[432]); 
-  FFV1_0(w[87], w[118], w[6], pars->GC_11, amp[433]); 
-  FFV1_0(w[62], w[119], w[7], pars->GC_11, amp[434]); 
-  FFV1_0(w[62], w[118], w[5], pars->GC_11, amp[435]); 
-  FFV1_0(w[63], w[119], w[6], pars->GC_11, amp[436]); 
-  FFV1_0(w[63], w[117], w[5], pars->GC_11, amp[437]); 
-  FFV1_0(w[87], w[121], w[7], pars->GC_11, amp[438]); 
-  FFV1_0(w[87], w[122], w[6], pars->GC_11, amp[439]); 
-  FFV1_0(w[62], w[123], w[7], pars->GC_11, amp[440]); 
-  FFV1_0(w[62], w[122], w[5], pars->GC_11, amp[441]); 
-  FFV1_0(w[63], w[123], w[6], pars->GC_11, amp[442]); 
-  FFV1_0(w[63], w[121], w[5], pars->GC_11, amp[443]); 
-  FFV1_0(w[124], w[116], w[7], pars->GC_11, amp[444]); 
-  FFV1_0(w[63], w[116], w[41], pars->GC_11, amp[445]); 
-  FFV1_0(w[60], w[116], w[43], pars->GC_11, amp[446]); 
-  FFV1_0(w[64], w[125], w[7], pars->GC_11, amp[447]); 
-  FFV1_0(w[64], w[2], w[43], pars->GC_11, amp[448]); 
-  FFV1_0(w[63], w[125], w[8], pars->GC_2, amp[449]); 
-  FFV1_0(w[124], w[120], w[7], pars->GC_11, amp[450]); 
-  FFV1_0(w[63], w[120], w[41], pars->GC_11, amp[451]); 
-  FFV1_0(w[60], w[120], w[43], pars->GC_11, amp[452]); 
-  FFV1_0(w[66], w[125], w[7], pars->GC_11, amp[453]); 
-  FFV1_0(w[66], w[2], w[43], pars->GC_11, amp[454]); 
-  FFV2_5_0(w[63], w[125], w[17], pars->GC_51, pars->GC_58, amp[455]); 
-  FFV1_0(w[126], w[116], w[6], pars->GC_11, amp[456]); 
-  FFV1_0(w[62], w[116], w[35], pars->GC_11, amp[457]); 
-  FFV1_0(w[60], w[116], w[46], pars->GC_11, amp[458]); 
-  FFV1_0(w[64], w[127], w[6], pars->GC_11, amp[459]); 
-  FFV1_0(w[64], w[2], w[46], pars->GC_11, amp[460]); 
-  FFV1_0(w[62], w[127], w[8], pars->GC_2, amp[461]); 
-  FFV1_0(w[126], w[120], w[6], pars->GC_11, amp[462]); 
-  FFV1_0(w[62], w[120], w[35], pars->GC_11, amp[463]); 
-  FFV1_0(w[60], w[120], w[46], pars->GC_11, amp[464]); 
-  FFV1_0(w[66], w[127], w[6], pars->GC_11, amp[465]); 
-  FFV1_0(w[66], w[2], w[46], pars->GC_11, amp[466]); 
-  FFV2_5_0(w[62], w[127], w[17], pars->GC_51, pars->GC_58, amp[467]); 
-  FFV1_0(w[87], w[116], w[29], pars->GC_11, amp[468]); 
-  FFV1_0(w[128], w[116], w[5], pars->GC_11, amp[469]); 
-  FFV1_0(w[60], w[116], w[49], pars->GC_11, amp[470]); 
-  FFV1_0(w[64], w[129], w[5], pars->GC_11, amp[471]); 
-  FFV1_0(w[64], w[2], w[49], pars->GC_11, amp[472]); 
-  FFV1_0(w[87], w[129], w[8], pars->GC_2, amp[473]); 
-  FFV1_0(w[87], w[120], w[29], pars->GC_11, amp[474]); 
-  FFV1_0(w[128], w[120], w[5], pars->GC_11, amp[475]); 
-  FFV1_0(w[60], w[120], w[49], pars->GC_11, amp[476]); 
-  FFV1_0(w[66], w[129], w[5], pars->GC_11, amp[477]); 
-  FFV1_0(w[66], w[2], w[49], pars->GC_11, amp[478]); 
-  FFV2_5_0(w[87], w[129], w[17], pars->GC_51, pars->GC_58, amp[479]); 
-  FFV1_0(w[60], w[116], w[51], pars->GC_11, amp[480]); 
-  FFV1_0(w[60], w[116], w[52], pars->GC_11, amp[481]); 
-  FFV1_0(w[60], w[116], w[53], pars->GC_11, amp[482]); 
-  FFV1_0(w[64], w[2], w[51], pars->GC_11, amp[483]); 
-  FFV1_0(w[64], w[2], w[52], pars->GC_11, amp[484]); 
-  FFV1_0(w[64], w[2], w[53], pars->GC_11, amp[485]); 
-  FFV1_0(w[60], w[120], w[51], pars->GC_11, amp[486]); 
-  FFV1_0(w[60], w[120], w[52], pars->GC_11, amp[487]); 
-  FFV1_0(w[60], w[120], w[53], pars->GC_11, amp[488]); 
-  FFV1_0(w[66], w[2], w[51], pars->GC_11, amp[489]); 
-  FFV1_0(w[66], w[2], w[52], pars->GC_11, amp[490]); 
-  FFV1_0(w[66], w[2], w[53], pars->GC_11, amp[491]); 
-  FFV1_0(w[89], w[117], w[7], pars->GC_11, amp[492]); 
-  FFV1_0(w[89], w[118], w[6], pars->GC_11, amp[493]); 
-  FFV1_0(w[24], w[130], w[7], pars->GC_11, amp[494]); 
-  FFV1_0(w[24], w[118], w[4], pars->GC_11, amp[495]); 
-  FFV1_0(w[25], w[130], w[6], pars->GC_11, amp[496]); 
-  FFV1_0(w[25], w[117], w[4], pars->GC_11, amp[497]); 
-  FFV1_0(w[89], w[121], w[7], pars->GC_11, amp[498]); 
-  FFV1_0(w[89], w[122], w[6], pars->GC_11, amp[499]); 
-  FFV1_0(w[24], w[131], w[7], pars->GC_11, amp[500]); 
-  FFV1_0(w[24], w[122], w[4], pars->GC_11, amp[501]); 
-  FFV1_0(w[25], w[131], w[6], pars->GC_11, amp[502]); 
-  FFV1_0(w[25], w[121], w[4], pars->GC_11, amp[503]); 
-  FFV1_0(w[132], w[116], w[7], pars->GC_11, amp[504]); 
-  FFV1_0(w[25], w[116], w[70], pars->GC_11, amp[505]); 
-  FFV1_0(w[22], w[116], w[72], pars->GC_11, amp[506]); 
-  FFV1_0(w[26], w[133], w[7], pars->GC_11, amp[507]); 
-  FFV1_0(w[26], w[2], w[72], pars->GC_11, amp[508]); 
-  FFV1_0(w[25], w[133], w[8], pars->GC_2, amp[509]); 
-  FFV1_0(w[132], w[120], w[7], pars->GC_11, amp[510]); 
-  FFV1_0(w[25], w[120], w[70], pars->GC_11, amp[511]); 
-  FFV1_0(w[22], w[120], w[72], pars->GC_11, amp[512]); 
-  FFV1_0(w[28], w[133], w[7], pars->GC_11, amp[513]); 
-  FFV1_0(w[28], w[2], w[72], pars->GC_11, amp[514]); 
-  FFV2_5_0(w[25], w[133], w[17], pars->GC_51, pars->GC_58, amp[515]); 
-  FFV1_0(w[134], w[116], w[6], pars->GC_11, amp[516]); 
-  FFV1_0(w[24], w[116], w[68], pars->GC_11, amp[517]); 
-  FFV1_0(w[22], w[116], w[75], pars->GC_11, amp[518]); 
-  FFV1_0(w[26], w[135], w[6], pars->GC_11, amp[519]); 
-  FFV1_0(w[26], w[2], w[75], pars->GC_11, amp[520]); 
-  FFV1_0(w[24], w[135], w[8], pars->GC_2, amp[521]); 
-  FFV1_0(w[134], w[120], w[6], pars->GC_11, amp[522]); 
-  FFV1_0(w[24], w[120], w[68], pars->GC_11, amp[523]); 
-  FFV1_0(w[22], w[120], w[75], pars->GC_11, amp[524]); 
-  FFV1_0(w[28], w[135], w[6], pars->GC_11, amp[525]); 
-  FFV1_0(w[28], w[2], w[75], pars->GC_11, amp[526]); 
-  FFV2_5_0(w[24], w[135], w[17], pars->GC_51, pars->GC_58, amp[527]); 
-  FFV1_0(w[89], w[116], w[29], pars->GC_11, amp[528]); 
-  FFV1_0(w[136], w[116], w[4], pars->GC_11, amp[529]); 
-  FFV1_0(w[22], w[116], w[77], pars->GC_11, amp[530]); 
-  FFV1_0(w[26], w[129], w[4], pars->GC_11, amp[531]); 
-  FFV1_0(w[26], w[2], w[77], pars->GC_11, amp[532]); 
-  FFV1_0(w[89], w[129], w[8], pars->GC_2, amp[533]); 
-  FFV1_0(w[89], w[120], w[29], pars->GC_11, amp[534]); 
-  FFV1_0(w[136], w[120], w[4], pars->GC_11, amp[535]); 
-  FFV1_0(w[22], w[120], w[77], pars->GC_11, amp[536]); 
-  FFV1_0(w[28], w[129], w[4], pars->GC_11, amp[537]); 
-  FFV1_0(w[28], w[2], w[77], pars->GC_11, amp[538]); 
-  FFV2_5_0(w[89], w[129], w[17], pars->GC_51, pars->GC_58, amp[539]); 
-  FFV1_0(w[22], w[116], w[79], pars->GC_11, amp[540]); 
-  FFV1_0(w[22], w[116], w[80], pars->GC_11, amp[541]); 
-  FFV1_0(w[22], w[116], w[81], pars->GC_11, amp[542]); 
-  FFV1_0(w[26], w[2], w[79], pars->GC_11, amp[543]); 
-  FFV1_0(w[26], w[2], w[80], pars->GC_11, amp[544]); 
-  FFV1_0(w[26], w[2], w[81], pars->GC_11, amp[545]); 
-  FFV1_0(w[22], w[120], w[79], pars->GC_11, amp[546]); 
-  FFV1_0(w[22], w[120], w[80], pars->GC_11, amp[547]); 
-  FFV1_0(w[22], w[120], w[81], pars->GC_11, amp[548]); 
-  FFV1_0(w[28], w[2], w[79], pars->GC_11, amp[549]); 
-  FFV1_0(w[28], w[2], w[80], pars->GC_11, amp[550]); 
-  FFV1_0(w[28], w[2], w[81], pars->GC_11, amp[551]); 
-  FFV1_0(w[67], w[119], w[7], pars->GC_11, amp[552]); 
-  FFV1_0(w[67], w[118], w[5], pars->GC_11, amp[553]); 
-  FFV1_0(w[31], w[130], w[7], pars->GC_11, amp[554]); 
-  FFV1_0(w[31], w[118], w[4], pars->GC_11, amp[555]); 
-  FFV1_0(w[32], w[130], w[5], pars->GC_11, amp[556]); 
-  FFV1_0(w[32], w[119], w[4], pars->GC_11, amp[557]); 
-  FFV1_0(w[67], w[123], w[7], pars->GC_11, amp[558]); 
-  FFV1_0(w[67], w[122], w[5], pars->GC_11, amp[559]); 
-  FFV1_0(w[31], w[131], w[7], pars->GC_11, amp[560]); 
-  FFV1_0(w[31], w[122], w[4], pars->GC_11, amp[561]); 
-  FFV1_0(w[32], w[131], w[5], pars->GC_11, amp[562]); 
-  FFV1_0(w[32], w[123], w[4], pars->GC_11, amp[563]); 
-  FFV1_0(w[137], w[116], w[7], pars->GC_11, amp[564]); 
-  FFV1_0(w[32], w[116], w[90], pars->GC_11, amp[565]); 
-  FFV1_0(w[30], w[116], w[92], pars->GC_11, amp[566]); 
-  FFV1_0(w[33], w[138], w[7], pars->GC_11, amp[567]); 
-  FFV1_0(w[33], w[2], w[92], pars->GC_11, amp[568]); 
-  FFV1_0(w[32], w[138], w[8], pars->GC_2, amp[569]); 
-  FFV1_0(w[137], w[120], w[7], pars->GC_11, amp[570]); 
-  FFV1_0(w[32], w[120], w[90], pars->GC_11, amp[571]); 
-  FFV1_0(w[30], w[120], w[92], pars->GC_11, amp[572]); 
-  FFV1_0(w[34], w[138], w[7], pars->GC_11, amp[573]); 
-  FFV1_0(w[34], w[2], w[92], pars->GC_11, amp[574]); 
-  FFV2_5_0(w[32], w[138], w[17], pars->GC_51, pars->GC_58, amp[575]); 
-  FFV1_0(w[139], w[116], w[5], pars->GC_11, amp[576]); 
-  FFV1_0(w[31], w[116], w[68], pars->GC_11, amp[577]); 
-  FFV1_0(w[30], w[116], w[94], pars->GC_11, amp[578]); 
-  FFV1_0(w[33], w[135], w[5], pars->GC_11, amp[579]); 
-  FFV1_0(w[33], w[2], w[94], pars->GC_11, amp[580]); 
-  FFV1_0(w[31], w[135], w[8], pars->GC_2, amp[581]); 
-  FFV1_0(w[139], w[120], w[5], pars->GC_11, amp[582]); 
-  FFV1_0(w[31], w[120], w[68], pars->GC_11, amp[583]); 
-  FFV1_0(w[30], w[120], w[94], pars->GC_11, amp[584]); 
-  FFV1_0(w[34], w[135], w[5], pars->GC_11, amp[585]); 
-  FFV1_0(w[34], w[2], w[94], pars->GC_11, amp[586]); 
-  FFV2_5_0(w[31], w[135], w[17], pars->GC_51, pars->GC_58, amp[587]); 
-  FFV1_0(w[67], w[116], w[35], pars->GC_11, amp[588]); 
-  FFV1_0(w[140], w[116], w[4], pars->GC_11, amp[589]); 
-  FFV1_0(w[30], w[116], w[96], pars->GC_11, amp[590]); 
-  FFV1_0(w[33], w[127], w[4], pars->GC_11, amp[591]); 
-  FFV1_0(w[33], w[2], w[96], pars->GC_11, amp[592]); 
-  FFV1_0(w[67], w[127], w[8], pars->GC_2, amp[593]); 
-  FFV1_0(w[67], w[120], w[35], pars->GC_11, amp[594]); 
-  FFV1_0(w[140], w[120], w[4], pars->GC_11, amp[595]); 
-  FFV1_0(w[30], w[120], w[96], pars->GC_11, amp[596]); 
-  FFV1_0(w[34], w[127], w[4], pars->GC_11, amp[597]); 
-  FFV1_0(w[34], w[2], w[96], pars->GC_11, amp[598]); 
-  FFV2_5_0(w[67], w[127], w[17], pars->GC_51, pars->GC_58, amp[599]); 
-  FFV1_0(w[30], w[116], w[98], pars->GC_11, amp[600]); 
-  FFV1_0(w[30], w[116], w[99], pars->GC_11, amp[601]); 
-  FFV1_0(w[30], w[116], w[100], pars->GC_11, amp[602]); 
-  FFV1_0(w[33], w[2], w[98], pars->GC_11, amp[603]); 
-  FFV1_0(w[33], w[2], w[99], pars->GC_11, amp[604]); 
-  FFV1_0(w[33], w[2], w[100], pars->GC_11, amp[605]); 
-  FFV1_0(w[30], w[120], w[98], pars->GC_11, amp[606]); 
-  FFV1_0(w[30], w[120], w[99], pars->GC_11, amp[607]); 
-  FFV1_0(w[30], w[120], w[100], pars->GC_11, amp[608]); 
-  FFV1_0(w[34], w[2], w[98], pars->GC_11, amp[609]); 
-  FFV1_0(w[34], w[2], w[99], pars->GC_11, amp[610]); 
-  FFV1_0(w[34], w[2], w[100], pars->GC_11, amp[611]); 
-  FFV1_0(w[69], w[119], w[6], pars->GC_11, amp[612]); 
-  FFV1_0(w[69], w[117], w[5], pars->GC_11, amp[613]); 
-  FFV1_0(w[37], w[130], w[6], pars->GC_11, amp[614]); 
-  FFV1_0(w[37], w[117], w[4], pars->GC_11, amp[615]); 
-  FFV1_0(w[38], w[130], w[5], pars->GC_11, amp[616]); 
-  FFV1_0(w[38], w[119], w[4], pars->GC_11, amp[617]); 
-  FFV1_0(w[69], w[123], w[6], pars->GC_11, amp[618]); 
-  FFV1_0(w[69], w[121], w[5], pars->GC_11, amp[619]); 
-  FFV1_0(w[37], w[131], w[6], pars->GC_11, amp[620]); 
-  FFV1_0(w[37], w[121], w[4], pars->GC_11, amp[621]); 
-  FFV1_0(w[38], w[131], w[5], pars->GC_11, amp[622]); 
-  FFV1_0(w[38], w[123], w[4], pars->GC_11, amp[623]); 
-  FFV1_0(w[141], w[116], w[6], pars->GC_11, amp[624]); 
-  FFV1_0(w[38], w[116], w[90], pars->GC_11, amp[625]); 
-  FFV1_0(w[36], w[116], w[107], pars->GC_11, amp[626]); 
-  FFV1_0(w[39], w[138], w[6], pars->GC_11, amp[627]); 
-  FFV1_0(w[39], w[2], w[107], pars->GC_11, amp[628]); 
-  FFV1_0(w[38], w[138], w[8], pars->GC_2, amp[629]); 
-  FFV1_0(w[141], w[120], w[6], pars->GC_11, amp[630]); 
-  FFV1_0(w[38], w[120], w[90], pars->GC_11, amp[631]); 
-  FFV1_0(w[36], w[120], w[107], pars->GC_11, amp[632]); 
-  FFV1_0(w[40], w[138], w[6], pars->GC_11, amp[633]); 
-  FFV1_0(w[40], w[2], w[107], pars->GC_11, amp[634]); 
-  FFV2_5_0(w[38], w[138], w[17], pars->GC_51, pars->GC_58, amp[635]); 
-  FFV1_0(w[142], w[116], w[5], pars->GC_11, amp[636]); 
-  FFV1_0(w[37], w[116], w[70], pars->GC_11, amp[637]); 
-  FFV1_0(w[36], w[116], w[109], pars->GC_11, amp[638]); 
-  FFV1_0(w[39], w[133], w[5], pars->GC_11, amp[639]); 
-  FFV1_0(w[39], w[2], w[109], pars->GC_11, amp[640]); 
-  FFV1_0(w[37], w[133], w[8], pars->GC_2, amp[641]); 
-  FFV1_0(w[142], w[120], w[5], pars->GC_11, amp[642]); 
-  FFV1_0(w[37], w[120], w[70], pars->GC_11, amp[643]); 
-  FFV1_0(w[36], w[120], w[109], pars->GC_11, amp[644]); 
-  FFV1_0(w[40], w[133], w[5], pars->GC_11, amp[645]); 
-  FFV1_0(w[40], w[2], w[109], pars->GC_11, amp[646]); 
-  FFV2_5_0(w[37], w[133], w[17], pars->GC_51, pars->GC_58, amp[647]); 
-  FFV1_0(w[69], w[116], w[41], pars->GC_11, amp[648]); 
-  FFV1_0(w[143], w[116], w[4], pars->GC_11, amp[649]); 
-  FFV1_0(w[36], w[116], w[111], pars->GC_11, amp[650]); 
-  FFV1_0(w[39], w[125], w[4], pars->GC_11, amp[651]); 
-  FFV1_0(w[39], w[2], w[111], pars->GC_11, amp[652]); 
-  FFV1_0(w[69], w[125], w[8], pars->GC_2, amp[653]); 
-  FFV1_0(w[69], w[120], w[41], pars->GC_11, amp[654]); 
-  FFV1_0(w[143], w[120], w[4], pars->GC_11, amp[655]); 
-  FFV1_0(w[36], w[120], w[111], pars->GC_11, amp[656]); 
-  FFV1_0(w[40], w[125], w[4], pars->GC_11, amp[657]); 
-  FFV1_0(w[40], w[2], w[111], pars->GC_11, amp[658]); 
-  FFV2_5_0(w[69], w[125], w[17], pars->GC_51, pars->GC_58, amp[659]); 
-  FFV1_0(w[36], w[116], w[113], pars->GC_11, amp[660]); 
-  FFV1_0(w[36], w[116], w[114], pars->GC_11, amp[661]); 
-  FFV1_0(w[36], w[116], w[115], pars->GC_11, amp[662]); 
-  FFV1_0(w[39], w[2], w[113], pars->GC_11, amp[663]); 
-  FFV1_0(w[39], w[2], w[114], pars->GC_11, amp[664]); 
-  FFV1_0(w[39], w[2], w[115], pars->GC_11, amp[665]); 
-  FFV1_0(w[36], w[120], w[113], pars->GC_11, amp[666]); 
-  FFV1_0(w[36], w[120], w[114], pars->GC_11, amp[667]); 
-  FFV1_0(w[36], w[120], w[115], pars->GC_11, amp[668]); 
-  FFV1_0(w[40], w[2], w[113], pars->GC_11, amp[669]); 
-  FFV1_0(w[40], w[2], w[114], pars->GC_11, amp[670]); 
-  FFV1_0(w[40], w[2], w[115], pars->GC_11, amp[671]); 
-  FFV1_0(w[91], w[117], w[7], pars->GC_11, amp[672]); 
-  FFV1_0(w[91], w[118], w[6], pars->GC_11, amp[673]); 
-  VVV1_0(w[107], w[7], w[144], pars->GC_10, amp[674]); 
-  FFV1_0(w[3], w[118], w[107], pars->GC_11, amp[675]); 
-  VVV1_0(w[92], w[6], w[144], pars->GC_10, amp[676]); 
-  FFV1_0(w[3], w[117], w[92], pars->GC_11, amp[677]); 
-  FFV1_0(w[3], w[116], w[145], pars->GC_11, amp[678]); 
-  FFV1_0(w[3], w[116], w[146], pars->GC_11, amp[679]); 
-  FFV1_0(w[3], w[116], w[147], pars->GC_11, amp[680]); 
-  FFV1_0(w[12], w[138], w[7], pars->GC_11, amp[681]); 
-  FFV1_0(w[13], w[138], w[6], pars->GC_11, amp[682]); 
-  VVV1_0(w[107], w[7], w[148], pars->GC_10, amp[683]); 
-  FFV1_0(w[13], w[2], w[107], pars->GC_11, amp[684]); 
-  VVV1_0(w[92], w[6], w[148], pars->GC_10, amp[685]); 
-  FFV1_0(w[12], w[2], w[92], pars->GC_11, amp[686]); 
-  FFV1_0(w[10], w[2], w[145], pars->GC_11, amp[687]); 
-  FFV1_0(w[10], w[2], w[146], pars->GC_11, amp[688]); 
-  FFV1_0(w[10], w[2], w[147], pars->GC_11, amp[689]); 
-  FFV1_0(w[91], w[121], w[7], pars->GC_11, amp[690]); 
-  FFV1_0(w[91], w[122], w[6], pars->GC_11, amp[691]); 
-  VVV1_0(w[107], w[7], w[149], pars->GC_10, amp[692]); 
-  FFV1_0(w[3], w[122], w[107], pars->GC_11, amp[693]); 
-  VVV1_0(w[92], w[6], w[149], pars->GC_10, amp[694]); 
-  FFV1_0(w[3], w[121], w[92], pars->GC_11, amp[695]); 
-  FFV1_0(w[3], w[120], w[145], pars->GC_11, amp[696]); 
-  FFV1_0(w[3], w[120], w[146], pars->GC_11, amp[697]); 
-  FFV1_0(w[3], w[120], w[147], pars->GC_11, amp[698]); 
-  FFV1_0(w[19], w[138], w[7], pars->GC_11, amp[699]); 
-  FFV1_0(w[20], w[138], w[6], pars->GC_11, amp[700]); 
-  VVV1_0(w[107], w[7], w[150], pars->GC_10, amp[701]); 
-  FFV1_0(w[20], w[2], w[107], pars->GC_11, amp[702]); 
-  VVV1_0(w[92], w[6], w[150], pars->GC_10, amp[703]); 
-  FFV1_0(w[19], w[2], w[92], pars->GC_11, amp[704]); 
-  FFV1_0(w[18], w[2], w[145], pars->GC_11, amp[705]); 
-  FFV1_0(w[18], w[2], w[146], pars->GC_11, amp[706]); 
-  FFV1_0(w[18], w[2], w[147], pars->GC_11, amp[707]); 
-  FFV1_0(w[91], w[116], w[29], pars->GC_11, amp[708]); 
-  FFV1_0(w[48], w[116], w[90], pars->GC_11, amp[709]); 
-  FFV1_0(w[3], w[116], w[151], pars->GC_11, amp[710]); 
-  FFV1_0(w[10], w[138], w[29], pars->GC_11, amp[711]); 
-  FFV1_0(w[10], w[129], w[90], pars->GC_11, amp[712]); 
-  FFV1_0(w[10], w[2], w[151], pars->GC_11, amp[713]); 
-  FFV1_0(w[48], w[138], w[8], pars->GC_2, amp[714]); 
-  FFV1_0(w[91], w[129], w[8], pars->GC_2, amp[715]); 
-  FFV1_0(w[91], w[120], w[29], pars->GC_11, amp[716]); 
-  FFV1_0(w[48], w[120], w[90], pars->GC_11, amp[717]); 
-  FFV1_0(w[3], w[120], w[151], pars->GC_11, amp[718]); 
-  FFV1_0(w[18], w[138], w[29], pars->GC_11, amp[719]); 
-  FFV1_0(w[18], w[129], w[90], pars->GC_11, amp[720]); 
-  FFV1_0(w[18], w[2], w[151], pars->GC_11, amp[721]); 
-  FFV2_5_0(w[48], w[138], w[17], pars->GC_51, pars->GC_58, amp[722]); 
-  FFV2_5_0(w[91], w[129], w[17], pars->GC_51, pars->GC_58, amp[723]); 
-  FFV1_0(w[71], w[119], w[7], pars->GC_11, amp[724]); 
-  FFV1_0(w[71], w[118], w[5], pars->GC_11, amp[725]); 
-  VVV1_0(w[109], w[7], w[144], pars->GC_10, amp[726]); 
-  FFV1_0(w[3], w[118], w[109], pars->GC_11, amp[727]); 
-  VVV1_0(w[72], w[5], w[144], pars->GC_10, amp[728]); 
-  FFV1_0(w[3], w[119], w[72], pars->GC_11, amp[729]); 
-  FFV1_0(w[3], w[116], w[152], pars->GC_11, amp[730]); 
-  FFV1_0(w[3], w[116], w[153], pars->GC_11, amp[731]); 
-  FFV1_0(w[3], w[116], w[154], pars->GC_11, amp[732]); 
-  FFV1_0(w[15], w[133], w[7], pars->GC_11, amp[733]); 
-  FFV1_0(w[13], w[133], w[5], pars->GC_11, amp[734]); 
-  VVV1_0(w[109], w[7], w[148], pars->GC_10, amp[735]); 
-  FFV1_0(w[13], w[2], w[109], pars->GC_11, amp[736]); 
-  VVV1_0(w[72], w[5], w[148], pars->GC_10, amp[737]); 
-  FFV1_0(w[15], w[2], w[72], pars->GC_11, amp[738]); 
-  FFV1_0(w[10], w[2], w[152], pars->GC_11, amp[739]); 
-  FFV1_0(w[10], w[2], w[153], pars->GC_11, amp[740]); 
-  FFV1_0(w[10], w[2], w[154], pars->GC_11, amp[741]); 
-  FFV1_0(w[71], w[123], w[7], pars->GC_11, amp[742]); 
-  FFV1_0(w[71], w[122], w[5], pars->GC_11, amp[743]); 
-  VVV1_0(w[109], w[7], w[149], pars->GC_10, amp[744]); 
-  FFV1_0(w[3], w[122], w[109], pars->GC_11, amp[745]); 
-  VVV1_0(w[72], w[5], w[149], pars->GC_10, amp[746]); 
-  FFV1_0(w[3], w[123], w[72], pars->GC_11, amp[747]); 
-  FFV1_0(w[3], w[120], w[152], pars->GC_11, amp[748]); 
-  FFV1_0(w[3], w[120], w[153], pars->GC_11, amp[749]); 
-  FFV1_0(w[3], w[120], w[154], pars->GC_11, amp[750]); 
-  FFV1_0(w[21], w[133], w[7], pars->GC_11, amp[751]); 
-  FFV1_0(w[20], w[133], w[5], pars->GC_11, amp[752]); 
-  VVV1_0(w[109], w[7], w[150], pars->GC_10, amp[753]); 
-  FFV1_0(w[20], w[2], w[109], pars->GC_11, amp[754]); 
-  VVV1_0(w[72], w[5], w[150], pars->GC_10, amp[755]); 
-  FFV1_0(w[21], w[2], w[72], pars->GC_11, amp[756]); 
-  FFV1_0(w[18], w[2], w[152], pars->GC_11, amp[757]); 
-  FFV1_0(w[18], w[2], w[153], pars->GC_11, amp[758]); 
-  FFV1_0(w[18], w[2], w[154], pars->GC_11, amp[759]); 
-  FFV1_0(w[71], w[116], w[35], pars->GC_11, amp[760]); 
-  FFV1_0(w[45], w[116], w[70], pars->GC_11, amp[761]); 
-  FFV1_0(w[3], w[116], w[155], pars->GC_11, amp[762]); 
-  FFV1_0(w[10], w[133], w[35], pars->GC_11, amp[763]); 
-  FFV1_0(w[10], w[127], w[70], pars->GC_11, amp[764]); 
-  FFV1_0(w[10], w[2], w[155], pars->GC_11, amp[765]); 
-  FFV1_0(w[45], w[133], w[8], pars->GC_2, amp[766]); 
-  FFV1_0(w[71], w[127], w[8], pars->GC_2, amp[767]); 
-  FFV1_0(w[71], w[120], w[35], pars->GC_11, amp[768]); 
-  FFV1_0(w[45], w[120], w[70], pars->GC_11, amp[769]); 
-  FFV1_0(w[3], w[120], w[155], pars->GC_11, amp[770]); 
-  FFV1_0(w[18], w[133], w[35], pars->GC_11, amp[771]); 
-  FFV1_0(w[18], w[127], w[70], pars->GC_11, amp[772]); 
-  FFV1_0(w[18], w[2], w[155], pars->GC_11, amp[773]); 
-  FFV2_5_0(w[45], w[133], w[17], pars->GC_51, pars->GC_58, amp[774]); 
-  FFV2_5_0(w[71], w[127], w[17], pars->GC_51, pars->GC_58, amp[775]); 
-  FFV1_0(w[74], w[119], w[6], pars->GC_11, amp[776]); 
-  FFV1_0(w[74], w[117], w[5], pars->GC_11, amp[777]); 
-  VVV1_0(w[94], w[6], w[144], pars->GC_10, amp[778]); 
-  FFV1_0(w[3], w[117], w[94], pars->GC_11, amp[779]); 
-  VVV1_0(w[75], w[5], w[144], pars->GC_10, amp[780]); 
-  FFV1_0(w[3], w[119], w[75], pars->GC_11, amp[781]); 
-  FFV1_0(w[3], w[116], w[156], pars->GC_11, amp[782]); 
-  FFV1_0(w[3], w[116], w[157], pars->GC_11, amp[783]); 
-  FFV1_0(w[3], w[116], w[158], pars->GC_11, amp[784]); 
-  FFV1_0(w[15], w[135], w[6], pars->GC_11, amp[785]); 
-  FFV1_0(w[12], w[135], w[5], pars->GC_11, amp[786]); 
-  VVV1_0(w[94], w[6], w[148], pars->GC_10, amp[787]); 
-  FFV1_0(w[12], w[2], w[94], pars->GC_11, amp[788]); 
-  VVV1_0(w[75], w[5], w[148], pars->GC_10, amp[789]); 
-  FFV1_0(w[15], w[2], w[75], pars->GC_11, amp[790]); 
-  FFV1_0(w[10], w[2], w[156], pars->GC_11, amp[791]); 
-  FFV1_0(w[10], w[2], w[157], pars->GC_11, amp[792]); 
-  FFV1_0(w[10], w[2], w[158], pars->GC_11, amp[793]); 
-  FFV1_0(w[74], w[123], w[6], pars->GC_11, amp[794]); 
-  FFV1_0(w[74], w[121], w[5], pars->GC_11, amp[795]); 
-  VVV1_0(w[94], w[6], w[149], pars->GC_10, amp[796]); 
-  FFV1_0(w[3], w[121], w[94], pars->GC_11, amp[797]); 
-  VVV1_0(w[75], w[5], w[149], pars->GC_10, amp[798]); 
-  FFV1_0(w[3], w[123], w[75], pars->GC_11, amp[799]); 
-  FFV1_0(w[3], w[120], w[156], pars->GC_11, amp[800]); 
-  FFV1_0(w[3], w[120], w[157], pars->GC_11, amp[801]); 
-  FFV1_0(w[3], w[120], w[158], pars->GC_11, amp[802]); 
-  FFV1_0(w[21], w[135], w[6], pars->GC_11, amp[803]); 
-  FFV1_0(w[19], w[135], w[5], pars->GC_11, amp[804]); 
-  VVV1_0(w[94], w[6], w[150], pars->GC_10, amp[805]); 
-  FFV1_0(w[19], w[2], w[94], pars->GC_11, amp[806]); 
-  VVV1_0(w[75], w[5], w[150], pars->GC_10, amp[807]); 
-  FFV1_0(w[21], w[2], w[75], pars->GC_11, amp[808]); 
-  FFV1_0(w[18], w[2], w[156], pars->GC_11, amp[809]); 
-  FFV1_0(w[18], w[2], w[157], pars->GC_11, amp[810]); 
-  FFV1_0(w[18], w[2], w[158], pars->GC_11, amp[811]); 
-  FFV1_0(w[74], w[116], w[41], pars->GC_11, amp[812]); 
-  FFV1_0(w[42], w[116], w[68], pars->GC_11, amp[813]); 
-  FFV1_0(w[3], w[116], w[159], pars->GC_11, amp[814]); 
-  FFV1_0(w[10], w[135], w[41], pars->GC_11, amp[815]); 
-  FFV1_0(w[10], w[125], w[68], pars->GC_11, amp[816]); 
-  FFV1_0(w[10], w[2], w[159], pars->GC_11, amp[817]); 
-  FFV1_0(w[42], w[135], w[8], pars->GC_2, amp[818]); 
-  FFV1_0(w[74], w[125], w[8], pars->GC_2, amp[819]); 
-  FFV1_0(w[74], w[120], w[41], pars->GC_11, amp[820]); 
-  FFV1_0(w[42], w[120], w[68], pars->GC_11, amp[821]); 
-  FFV1_0(w[3], w[120], w[159], pars->GC_11, amp[822]); 
-  FFV1_0(w[18], w[135], w[41], pars->GC_11, amp[823]); 
-  FFV1_0(w[18], w[125], w[68], pars->GC_11, amp[824]); 
-  FFV1_0(w[18], w[2], w[159], pars->GC_11, amp[825]); 
-  FFV2_5_0(w[42], w[135], w[17], pars->GC_51, pars->GC_58, amp[826]); 
-  FFV2_5_0(w[74], w[125], w[17], pars->GC_51, pars->GC_58, amp[827]); 
-  FFV1_0(w[42], w[130], w[7], pars->GC_11, amp[828]); 
-  FFV1_0(w[42], w[118], w[4], pars->GC_11, amp[829]); 
-  VVV1_0(w[111], w[7], w[144], pars->GC_10, amp[830]); 
-  FFV1_0(w[3], w[118], w[111], pars->GC_11, amp[831]); 
-  VVV1_0(w[4], w[43], w[144], pars->GC_10, amp[832]); 
-  FFV1_0(w[3], w[130], w[43], pars->GC_11, amp[833]); 
-  FFV1_0(w[3], w[116], w[160], pars->GC_11, amp[834]); 
-  FFV1_0(w[3], w[116], w[161], pars->GC_11, amp[835]); 
-  FFV1_0(w[3], w[116], w[162], pars->GC_11, amp[836]); 
-  FFV1_0(w[57], w[125], w[7], pars->GC_11, amp[837]); 
-  FFV1_0(w[13], w[125], w[4], pars->GC_11, amp[838]); 
-  VVV1_0(w[111], w[7], w[148], pars->GC_10, amp[839]); 
-  FFV1_0(w[13], w[2], w[111], pars->GC_11, amp[840]); 
-  VVV1_0(w[4], w[43], w[148], pars->GC_10, amp[841]); 
-  FFV1_0(w[57], w[2], w[43], pars->GC_11, amp[842]); 
-  FFV1_0(w[10], w[2], w[160], pars->GC_11, amp[843]); 
-  FFV1_0(w[10], w[2], w[161], pars->GC_11, amp[844]); 
-  FFV1_0(w[10], w[2], w[162], pars->GC_11, amp[845]); 
-  FFV1_0(w[42], w[131], w[7], pars->GC_11, amp[846]); 
-  FFV1_0(w[42], w[122], w[4], pars->GC_11, amp[847]); 
-  VVV1_0(w[111], w[7], w[149], pars->GC_10, amp[848]); 
-  FFV1_0(w[3], w[122], w[111], pars->GC_11, amp[849]); 
-  VVV1_0(w[4], w[43], w[149], pars->GC_10, amp[850]); 
-  FFV1_0(w[3], w[131], w[43], pars->GC_11, amp[851]); 
-  FFV1_0(w[3], w[120], w[160], pars->GC_11, amp[852]); 
-  FFV1_0(w[3], w[120], w[161], pars->GC_11, amp[853]); 
-  FFV1_0(w[3], w[120], w[162], pars->GC_11, amp[854]); 
-  FFV1_0(w[59], w[125], w[7], pars->GC_11, amp[855]); 
-  FFV1_0(w[20], w[125], w[4], pars->GC_11, amp[856]); 
-  VVV1_0(w[111], w[7], w[150], pars->GC_10, amp[857]); 
-  FFV1_0(w[20], w[2], w[111], pars->GC_11, amp[858]); 
-  VVV1_0(w[4], w[43], w[150], pars->GC_10, amp[859]); 
-  FFV1_0(w[59], w[2], w[43], pars->GC_11, amp[860]); 
-  FFV1_0(w[18], w[2], w[160], pars->GC_11, amp[861]); 
-  FFV1_0(w[18], w[2], w[161], pars->GC_11, amp[862]); 
-  FFV1_0(w[18], w[2], w[162], pars->GC_11, amp[863]); 
-  FFV1_0(w[45], w[130], w[6], pars->GC_11, amp[864]); 
-  FFV1_0(w[45], w[117], w[4], pars->GC_11, amp[865]); 
-  VVV1_0(w[96], w[6], w[144], pars->GC_10, amp[866]); 
-  FFV1_0(w[3], w[117], w[96], pars->GC_11, amp[867]); 
-  VVV1_0(w[4], w[46], w[144], pars->GC_10, amp[868]); 
-  FFV1_0(w[3], w[130], w[46], pars->GC_11, amp[869]); 
-  FFV1_0(w[3], w[116], w[163], pars->GC_11, amp[870]); 
-  FFV1_0(w[3], w[116], w[164], pars->GC_11, amp[871]); 
-  FFV1_0(w[3], w[116], w[165], pars->GC_11, amp[872]); 
-  FFV1_0(w[57], w[127], w[6], pars->GC_11, amp[873]); 
-  FFV1_0(w[12], w[127], w[4], pars->GC_11, amp[874]); 
-  VVV1_0(w[96], w[6], w[148], pars->GC_10, amp[875]); 
-  FFV1_0(w[12], w[2], w[96], pars->GC_11, amp[876]); 
-  VVV1_0(w[4], w[46], w[148], pars->GC_10, amp[877]); 
-  FFV1_0(w[57], w[2], w[46], pars->GC_11, amp[878]); 
-  FFV1_0(w[10], w[2], w[163], pars->GC_11, amp[879]); 
-  FFV1_0(w[10], w[2], w[164], pars->GC_11, amp[880]); 
-  FFV1_0(w[10], w[2], w[165], pars->GC_11, amp[881]); 
-  FFV1_0(w[45], w[131], w[6], pars->GC_11, amp[882]); 
-  FFV1_0(w[45], w[121], w[4], pars->GC_11, amp[883]); 
-  VVV1_0(w[96], w[6], w[149], pars->GC_10, amp[884]); 
-  FFV1_0(w[3], w[121], w[96], pars->GC_11, amp[885]); 
-  VVV1_0(w[4], w[46], w[149], pars->GC_10, amp[886]); 
-  FFV1_0(w[3], w[131], w[46], pars->GC_11, amp[887]); 
-  FFV1_0(w[3], w[120], w[163], pars->GC_11, amp[888]); 
-  FFV1_0(w[3], w[120], w[164], pars->GC_11, amp[889]); 
-  FFV1_0(w[3], w[120], w[165], pars->GC_11, amp[890]); 
-  FFV1_0(w[59], w[127], w[6], pars->GC_11, amp[891]); 
-  FFV1_0(w[19], w[127], w[4], pars->GC_11, amp[892]); 
-  VVV1_0(w[96], w[6], w[150], pars->GC_10, amp[893]); 
-  FFV1_0(w[19], w[2], w[96], pars->GC_11, amp[894]); 
-  VVV1_0(w[4], w[46], w[150], pars->GC_10, amp[895]); 
-  FFV1_0(w[59], w[2], w[46], pars->GC_11, amp[896]); 
-  FFV1_0(w[18], w[2], w[163], pars->GC_11, amp[897]); 
-  FFV1_0(w[18], w[2], w[164], pars->GC_11, amp[898]); 
-  FFV1_0(w[18], w[2], w[165], pars->GC_11, amp[899]); 
-  FFV1_0(w[48], w[130], w[5], pars->GC_11, amp[900]); 
-  FFV1_0(w[48], w[119], w[4], pars->GC_11, amp[901]); 
-  VVV1_0(w[77], w[5], w[144], pars->GC_10, amp[902]); 
-  FFV1_0(w[3], w[119], w[77], pars->GC_11, amp[903]); 
-  VVV1_0(w[4], w[49], w[144], pars->GC_10, amp[904]); 
-  FFV1_0(w[3], w[130], w[49], pars->GC_11, amp[905]); 
-  FFV1_0(w[3], w[116], w[166], pars->GC_11, amp[906]); 
-  FFV1_0(w[3], w[116], w[167], pars->GC_11, amp[907]); 
-  FFV1_0(w[3], w[116], w[168], pars->GC_11, amp[908]); 
-  FFV1_0(w[57], w[129], w[5], pars->GC_11, amp[909]); 
-  FFV1_0(w[15], w[129], w[4], pars->GC_11, amp[910]); 
-  VVV1_0(w[77], w[5], w[148], pars->GC_10, amp[911]); 
-  FFV1_0(w[15], w[2], w[77], pars->GC_11, amp[912]); 
-  VVV1_0(w[4], w[49], w[148], pars->GC_10, amp[913]); 
-  FFV1_0(w[57], w[2], w[49], pars->GC_11, amp[914]); 
-  FFV1_0(w[10], w[2], w[166], pars->GC_11, amp[915]); 
-  FFV1_0(w[10], w[2], w[167], pars->GC_11, amp[916]); 
-  FFV1_0(w[10], w[2], w[168], pars->GC_11, amp[917]); 
-  FFV1_0(w[48], w[131], w[5], pars->GC_11, amp[918]); 
-  FFV1_0(w[48], w[123], w[4], pars->GC_11, amp[919]); 
-  VVV1_0(w[77], w[5], w[149], pars->GC_10, amp[920]); 
-  FFV1_0(w[3], w[123], w[77], pars->GC_11, amp[921]); 
-  VVV1_0(w[4], w[49], w[149], pars->GC_10, amp[922]); 
-  FFV1_0(w[3], w[131], w[49], pars->GC_11, amp[923]); 
-  FFV1_0(w[3], w[120], w[166], pars->GC_11, amp[924]); 
-  FFV1_0(w[3], w[120], w[167], pars->GC_11, amp[925]); 
-  FFV1_0(w[3], w[120], w[168], pars->GC_11, amp[926]); 
-  FFV1_0(w[59], w[129], w[5], pars->GC_11, amp[927]); 
-  FFV1_0(w[21], w[129], w[4], pars->GC_11, amp[928]); 
-  VVV1_0(w[77], w[5], w[150], pars->GC_10, amp[929]); 
-  FFV1_0(w[21], w[2], w[77], pars->GC_11, amp[930]); 
-  VVV1_0(w[4], w[49], w[150], pars->GC_10, amp[931]); 
-  FFV1_0(w[59], w[2], w[49], pars->GC_11, amp[932]); 
-  FFV1_0(w[18], w[2], w[166], pars->GC_11, amp[933]); 
-  FFV1_0(w[18], w[2], w[167], pars->GC_11, amp[934]); 
-  FFV1_0(w[18], w[2], w[168], pars->GC_11, amp[935]); 
-  FFV1_0(w[169], w[116], w[7], pars->GC_11, amp[936]); 
-  FFV1_0(w[170], w[116], w[7], pars->GC_11, amp[937]); 
-  FFV1_0(w[171], w[116], w[7], pars->GC_11, amp[938]); 
-  FFV1_0(w[3], w[116], w[172], pars->GC_11, amp[939]); 
-  FFV1_0(w[3], w[116], w[173], pars->GC_11, amp[940]); 
-  FFV1_0(w[3], w[116], w[174], pars->GC_11, amp[941]); 
-  FFV1_0(w[10], w[175], w[7], pars->GC_11, amp[942]); 
-  FFV1_0(w[10], w[176], w[7], pars->GC_11, amp[943]); 
-  FFV1_0(w[10], w[177], w[7], pars->GC_11, amp[944]); 
-  FFV1_0(w[10], w[2], w[172], pars->GC_11, amp[945]); 
-  FFV1_0(w[10], w[2], w[173], pars->GC_11, amp[946]); 
-  FFV1_0(w[10], w[2], w[174], pars->GC_11, amp[947]); 
-  FFV1_0(w[169], w[120], w[7], pars->GC_11, amp[948]); 
-  FFV1_0(w[170], w[120], w[7], pars->GC_11, amp[949]); 
-  FFV1_0(w[171], w[120], w[7], pars->GC_11, amp[950]); 
-  FFV1_0(w[3], w[120], w[172], pars->GC_11, amp[951]); 
-  FFV1_0(w[3], w[120], w[173], pars->GC_11, amp[952]); 
-  FFV1_0(w[3], w[120], w[174], pars->GC_11, amp[953]); 
-  FFV1_0(w[18], w[175], w[7], pars->GC_11, amp[954]); 
-  FFV1_0(w[18], w[176], w[7], pars->GC_11, amp[955]); 
-  FFV1_0(w[18], w[177], w[7], pars->GC_11, amp[956]); 
-  FFV1_0(w[18], w[2], w[172], pars->GC_11, amp[957]); 
-  FFV1_0(w[18], w[2], w[173], pars->GC_11, amp[958]); 
-  FFV1_0(w[18], w[2], w[174], pars->GC_11, amp[959]); 
-  FFV1_0(w[178], w[116], w[6], pars->GC_11, amp[960]); 
-  FFV1_0(w[179], w[116], w[6], pars->GC_11, amp[961]); 
-  FFV1_0(w[180], w[116], w[6], pars->GC_11, amp[962]); 
-  FFV1_0(w[3], w[116], w[181], pars->GC_11, amp[963]); 
-  FFV1_0(w[3], w[116], w[182], pars->GC_11, amp[964]); 
-  FFV1_0(w[3], w[116], w[183], pars->GC_11, amp[965]); 
-  FFV1_0(w[10], w[184], w[6], pars->GC_11, amp[966]); 
-  FFV1_0(w[10], w[185], w[6], pars->GC_11, amp[967]); 
-  FFV1_0(w[10], w[186], w[6], pars->GC_11, amp[968]); 
-  FFV1_0(w[10], w[2], w[181], pars->GC_11, amp[969]); 
-  FFV1_0(w[10], w[2], w[182], pars->GC_11, amp[970]); 
-  FFV1_0(w[10], w[2], w[183], pars->GC_11, amp[971]); 
-  FFV1_0(w[178], w[120], w[6], pars->GC_11, amp[972]); 
-  FFV1_0(w[179], w[120], w[6], pars->GC_11, amp[973]); 
-  FFV1_0(w[180], w[120], w[6], pars->GC_11, amp[974]); 
-  FFV1_0(w[3], w[120], w[181], pars->GC_11, amp[975]); 
-  FFV1_0(w[3], w[120], w[182], pars->GC_11, amp[976]); 
-  FFV1_0(w[3], w[120], w[183], pars->GC_11, amp[977]); 
-  FFV1_0(w[18], w[184], w[6], pars->GC_11, amp[978]); 
-  FFV1_0(w[18], w[185], w[6], pars->GC_11, amp[979]); 
-  FFV1_0(w[18], w[186], w[6], pars->GC_11, amp[980]); 
-  FFV1_0(w[18], w[2], w[181], pars->GC_11, amp[981]); 
-  FFV1_0(w[18], w[2], w[182], pars->GC_11, amp[982]); 
-  FFV1_0(w[18], w[2], w[183], pars->GC_11, amp[983]); 
-  FFV1_0(w[187], w[116], w[5], pars->GC_11, amp[984]); 
-  FFV1_0(w[188], w[116], w[5], pars->GC_11, amp[985]); 
-  FFV1_0(w[189], w[116], w[5], pars->GC_11, amp[986]); 
-  FFV1_0(w[3], w[116], w[190], pars->GC_11, amp[987]); 
-  FFV1_0(w[3], w[116], w[191], pars->GC_11, amp[988]); 
-  FFV1_0(w[3], w[116], w[192], pars->GC_11, amp[989]); 
-  FFV1_0(w[10], w[193], w[5], pars->GC_11, amp[990]); 
-  FFV1_0(w[10], w[194], w[5], pars->GC_11, amp[991]); 
-  FFV1_0(w[10], w[195], w[5], pars->GC_11, amp[992]); 
-  FFV1_0(w[10], w[2], w[190], pars->GC_11, amp[993]); 
-  FFV1_0(w[10], w[2], w[191], pars->GC_11, amp[994]); 
-  FFV1_0(w[10], w[2], w[192], pars->GC_11, amp[995]); 
-  FFV1_0(w[187], w[120], w[5], pars->GC_11, amp[996]); 
-  FFV1_0(w[188], w[120], w[5], pars->GC_11, amp[997]); 
-  FFV1_0(w[189], w[120], w[5], pars->GC_11, amp[998]); 
-  FFV1_0(w[3], w[120], w[190], pars->GC_11, amp[999]); 
-  FFV1_0(w[3], w[120], w[191], pars->GC_11, amp[1000]); 
-  FFV1_0(w[3], w[120], w[192], pars->GC_11, amp[1001]); 
-  FFV1_0(w[18], w[193], w[5], pars->GC_11, amp[1002]); 
-  FFV1_0(w[18], w[194], w[5], pars->GC_11, amp[1003]); 
-  FFV1_0(w[18], w[195], w[5], pars->GC_11, amp[1004]); 
-  FFV1_0(w[18], w[2], w[190], pars->GC_11, amp[1005]); 
-  FFV1_0(w[18], w[2], w[191], pars->GC_11, amp[1006]); 
-  FFV1_0(w[18], w[2], w[192], pars->GC_11, amp[1007]); 
-  FFV1_0(w[196], w[116], w[4], pars->GC_11, amp[1008]); 
-  FFV1_0(w[197], w[116], w[4], pars->GC_11, amp[1009]); 
-  FFV1_0(w[198], w[116], w[4], pars->GC_11, amp[1010]); 
-  FFV1_0(w[3], w[116], w[199], pars->GC_11, amp[1011]); 
-  FFV1_0(w[3], w[116], w[200], pars->GC_11, amp[1012]); 
-  FFV1_0(w[3], w[116], w[201], pars->GC_11, amp[1013]); 
-  FFV1_0(w[10], w[202], w[4], pars->GC_11, amp[1014]); 
-  FFV1_0(w[10], w[203], w[4], pars->GC_11, amp[1015]); 
-  FFV1_0(w[10], w[204], w[4], pars->GC_11, amp[1016]); 
-  FFV1_0(w[10], w[2], w[199], pars->GC_11, amp[1017]); 
-  FFV1_0(w[10], w[2], w[200], pars->GC_11, amp[1018]); 
-  FFV1_0(w[10], w[2], w[201], pars->GC_11, amp[1019]); 
-  FFV1_0(w[196], w[120], w[4], pars->GC_11, amp[1020]); 
-  FFV1_0(w[197], w[120], w[4], pars->GC_11, amp[1021]); 
-  FFV1_0(w[198], w[120], w[4], pars->GC_11, amp[1022]); 
-  FFV1_0(w[3], w[120], w[199], pars->GC_11, amp[1023]); 
-  FFV1_0(w[3], w[120], w[200], pars->GC_11, amp[1024]); 
-  FFV1_0(w[3], w[120], w[201], pars->GC_11, amp[1025]); 
-  FFV1_0(w[18], w[202], w[4], pars->GC_11, amp[1026]); 
-  FFV1_0(w[18], w[203], w[4], pars->GC_11, amp[1027]); 
-  FFV1_0(w[18], w[204], w[4], pars->GC_11, amp[1028]); 
-  FFV1_0(w[18], w[2], w[199], pars->GC_11, amp[1029]); 
-  FFV1_0(w[18], w[2], w[200], pars->GC_11, amp[1030]); 
-  FFV1_0(w[18], w[2], w[201], pars->GC_11, amp[1031]); 
-
-}
-double eeuugggg::matrix_1_epem_uuxgggg()
-{
-//  int i, j;
-  // Local variables
-//  const int ngraphs = 1032; 
-  const int ncolor = 24;
-  std::complex<double> jamp[ncolor]; 
-  // The color matrix;
-  //static const double denom[ncolor] = {54, 54, 54, 54, 54, 54, 54, 54, 54, 54,
-  //    54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54};
-  /*static const double cf[ncolor][ncolor] = {{512, -64, -64, 8, 8, 80, -64, 8,
-      8, -1, -1, -10, 8, -1, 80, -10, 71, 62, -1, -10, -10, 62, 62, -28}, {-64,
-      512, 8, 80, -64, 8, 8, -64, -1, -10, 8, -1, -1, -10, -10, 62, 62, -28, 8,
-      -1, 80, -10, 71, 62}, {-64, 8, 512, -64, 80, 8, 8, -1, 80, -10, 71, 62,
-      -64, 8, 8, -1, -1, -10, -10, -1, 62, -28, -10, 62}, {8, 80, -64, 512, 8,
-      -64, -1, -10, -10, 62, 62, -28, 8, -64, -1, -10, 8, -1, -1, 8, 71, 62,
-      80, -10}, {8, -64, 80, 8, 512, -64, -1, 8, 71, 62, 80, -10, -10, -1, 62,
-      -28, -10, 62, -64, 8, 8, -1, -1, -10}, {80, 8, 8, -64, -64, 512, -10, -1,
-      62, -28, -10, 62, -1, 8, 71, 62, 80, -10, 8, -64, -1, -10, 8, -1}, {-64,
-      8, 8, -1, -1, -10, 512, -64, -64, 8, 8, 80, 80, -10, 8, -1, 62, 71, -10,
-      62, -1, -10, -28, 62}, {8, -64, -1, -10, 8, -1, -64, 512, 8, 80, -64, 8,
-      -10, 62, -1, -10, -28, 62, 80, -10, 8, -1, 62, 71}, {8, -1, 80, -10, 71,
-      62, -64, 8, 512, -64, 80, 8, 8, -1, -64, 8, -10, -1, 62, -28, -10, -1,
-      62, -10}, {-1, -10, -10, 62, 62, -28, 8, 80, -64, 512, 8, -64, -1, -10,
-      8, -64, -1, 8, 71, 62, -1, 8, -10, 80}, {-1, 8, 71, 62, 80, -10, 8, -64,
-      80, 8, 512, -64, 62, -28, -10, -1, 62, -10, 8, -1, -64, 8, -10, -1},
-      {-10, -1, 62, -28, -10, 62, 80, 8, 8, -64, -64, 512, 71, 62, -1, 8, -10,
-      80, -1, -10, 8, -64, -1, 8}, {8, -1, -64, 8, -10, -1, 80, -10, 8, -1, 62,
-      71, 512, -64, -64, 8, 8, 80, 62, -10, -28, 62, -1, -10}, {-1, -10, 8,
-      -64, -1, 8, -10, 62, -1, -10, -28, 62, -64, 512, 8, 80, -64, 8, -10, 80,
-      62, 71, 8, -1}, {80, -10, 8, -1, 62, 71, 8, -1, -64, 8, -10, -1, -64, 8,
-      512, -64, 80, 8, -28, 62, 62, -10, -10, -1}, {-10, 62, -1, -10, -28, 62,
-      -1, -10, 8, -64, -1, 8, 8, 80, -64, 512, 8, -64, 62, 71, -10, 80, -1, 8},
-      {71, 62, -1, 8, -10, 80, 62, -28, -10, -1, 62, -10, 8, -64, 80, 8, 512,
-      -64, -1, 8, -10, -1, -64, 8}, {62, -28, -10, -1, 62, -10, 71, 62, -1, 8,
-      -10, 80, 80, 8, 8, -64, -64, 512, -10, -1, -1, 8, 8, -64}, {-1, 8, -10,
-      -1, -64, 8, -10, 80, 62, 71, 8, -1, 62, -10, -28, 62, -1, -10, 512, -64,
-      -64, 8, 8, 80}, {-10, -1, -1, 8, 8, -64, 62, -10, -28, 62, -1, -10, -10,
-      80, 62, 71, 8, -1, -64, 512, 8, 80, -64, 8}, {-10, 80, 62, 71, 8, -1, -1,
-      8, -10, -1, -64, 8, -28, 62, 62, -10, -10, -1, -64, 8, 512, -64, 80, 8},
-      {62, -10, -28, 62, -1, -10, -10, -1, -1, 8, 8, -64, 62, 71, -10, 80, -1,
-      8, 8, 80, -64, 512, 8, -64}, {62, 71, -10, 80, -1, 8, -28, 62, 62, -10,
-      -10, -1, -1, 8, -10, -1, -64, 8, 8, -64, 80, 8, 512, -64}, {-28, 62, 62,
-      -10, -10, -1, 62, 71, -10, 80, -1, 8, -10, -1, -1, 8, 8, -64, 80, 8, 8,
-      -64, -64, 512}};
-   */
-
-  // Calculate color flows
-  jamp[0] = +amp[1] + amp[7] + amp[45] + amp[46] + amp[48] + amp[51] + amp[52]
-      + amp[54] - std::complex<double> (0, 1) * amp[56] - std::complex<double>
-      (0, 1) * amp[57] - std::complex<double> (0, 1) * amp[58] -
-      std::complex<double> (0, 1) * amp[59] - amp[61] - std::complex<double>
-      (0, 1) * amp[62] - amp[64] - amp[67] - std::complex<double> (0, 1) *
-      amp[68] - amp[70] - std::complex<double> (0, 1) * amp[84] - amp[85] -
-      std::complex<double> (0, 1) * amp[86] - amp[88] - std::complex<double>
-      (0, 1) * amp[89] - std::complex<double> (0, 1) * amp[90] - amp[91] -
-      std::complex<double> (0, 1) * amp[92] - amp[94] - std::complex<double>
-      (0, 1) * amp[95] + amp[98] - amp[96] + amp[101] - amp[99] + amp[104] -
-      amp[102] + amp[107] - amp[105] + amp[616] + amp[622] -
-      std::complex<double> (0, 1) * amp[625] - amp[626] - std::complex<double>
-      (0, 1) * amp[627] - amp[628] - std::complex<double> (0, 1) * amp[629] -
-      std::complex<double> (0, 1) * amp[631] - amp[632] - std::complex<double>
-      (0, 1) * amp[633] - amp[634] - std::complex<double> (0, 1) * amp[635] -
-      std::complex<double> (0, 1) * amp[649] - amp[650] - amp[652] -
-      std::complex<double> (0, 1) * amp[655] - amp[656] - amp[658] + amp[662] -
-      amp[660] + amp[665] - amp[663] + amp[668] - amp[666] + amp[671] -
-      amp[669] + std::complex<double> (0, 1) * amp[674] - std::complex<double>
-      (0, 1) * amp[680] + std::complex<double> (0, 1) * amp[678] -
-      std::complex<double> (0, 1) * amp[682] + std::complex<double> (0, 1) *
-      amp[683] - amp[684] - std::complex<double> (0, 1) * amp[689] +
-      std::complex<double> (0, 1) * amp[687] + std::complex<double> (0, 1) *
-      amp[692] - std::complex<double> (0, 1) * amp[698] + std::complex<double>
-      (0, 1) * amp[696] - std::complex<double> (0, 1) * amp[700] +
-      std::complex<double> (0, 1) * amp[701] - amp[702] - std::complex<double>
-      (0, 1) * amp[707] + std::complex<double> (0, 1) * amp[705] - amp[709] +
-      std::complex<double> (0, 1) * amp[710] - amp[711] + std::complex<double>
-      (0, 1) * amp[713] - amp[714] - amp[717] + std::complex<double> (0, 1) *
-      amp[718] - amp[719] + std::complex<double> (0, 1) * amp[721] - amp[722] +
-      std::complex<double> (0, 1) * amp[830] + std::complex<double> (0, 1) *
-      amp[832] - amp[833] - std::complex<double> (0, 1) * amp[836] +
-      std::complex<double> (0, 1) * amp[834] + std::complex<double> (0, 1) *
-      amp[839] - amp[840] + std::complex<double> (0, 1) * amp[841] -
-      std::complex<double> (0, 1) * amp[845] + std::complex<double> (0, 1) *
-      amp[843] + std::complex<double> (0, 1) * amp[848] + std::complex<double>
-      (0, 1) * amp[850] - amp[851] - std::complex<double> (0, 1) * amp[854] +
-      std::complex<double> (0, 1) * amp[852] + std::complex<double> (0, 1) *
-      amp[857] - amp[858] + std::complex<double> (0, 1) * amp[859] -
-      std::complex<double> (0, 1) * amp[863] + std::complex<double> (0, 1) *
-      amp[861] - std::complex<double> (0, 1) * amp[900] + std::complex<double>
-      (0, 1) * amp[904] - amp[905] - std::complex<double> (0, 1) * amp[908] +
-      std::complex<double> (0, 1) * amp[906] + std::complex<double> (0, 1) *
-      amp[913] - std::complex<double> (0, 1) * amp[917] + std::complex<double>
-      (0, 1) * amp[915] - std::complex<double> (0, 1) * amp[918] +
-      std::complex<double> (0, 1) * amp[922] - amp[923] - std::complex<double>
-      (0, 1) * amp[926] + std::complex<double> (0, 1) * amp[924] +
-      std::complex<double> (0, 1) * amp[931] - std::complex<double> (0, 1) *
-      amp[935] + std::complex<double> (0, 1) * amp[933] - std::complex<double>
-      (0, 1) * amp[941] + std::complex<double> (0, 1) * amp[939] + amp[944] -
-      amp[942] - std::complex<double> (0, 1) * amp[947] + std::complex<double>
-      (0, 1) * amp[945] - std::complex<double> (0, 1) * amp[953] +
-      std::complex<double> (0, 1) * amp[951] + amp[956] - amp[954] -
-      std::complex<double> (0, 1) * amp[959] + std::complex<double> (0, 1) *
-      amp[957] + amp[1010] - amp[1008] - std::complex<double> (0, 1) *
-      amp[1013] + std::complex<double> (0, 1) * amp[1011] -
-      std::complex<double> (0, 1) * amp[1019] + std::complex<double> (0, 1) *
-      amp[1017] + amp[1022] - amp[1020] - std::complex<double> (0, 1) *
-      amp[1025] + std::complex<double> (0, 1) * amp[1023] -
-      std::complex<double> (0, 1) * amp[1031] + std::complex<double> (0, 1) *
-      amp[1029];
-  jamp[1] = +amp[0] + amp[6] + amp[29] + amp[30] + amp[32] + amp[35] + amp[36]
-      + amp[38] - std::complex<double> (0, 1) * amp[40] - std::complex<double>
-      (0, 1) * amp[41] - std::complex<double> (0, 1) * amp[42] -
-      std::complex<double> (0, 1) * amp[43] - amp[73] - std::complex<double>
-      (0, 1) * amp[74] - amp[76] - amp[79] - std::complex<double> (0, 1) *
-      amp[80] - amp[82] + std::complex<double> (0, 1) * amp[84] + amp[85] +
-      std::complex<double> (0, 1) * amp[86] + amp[88] + std::complex<double>
-      (0, 1) * amp[89] + std::complex<double> (0, 1) * amp[90] + amp[91] +
-      std::complex<double> (0, 1) * amp[92] + amp[94] + std::complex<double>
-      (0, 1) * amp[95] + amp[96] + amp[97] + amp[99] + amp[100] + amp[102] +
-      amp[103] + amp[105] + amp[106] + amp[556] + amp[562] -
-      std::complex<double> (0, 1) * amp[565] - amp[566] - std::complex<double>
-      (0, 1) * amp[567] - amp[568] - std::complex<double> (0, 1) * amp[569] -
-      std::complex<double> (0, 1) * amp[571] - amp[572] - std::complex<double>
-      (0, 1) * amp[573] - amp[574] - std::complex<double> (0, 1) * amp[575] -
-      std::complex<double> (0, 1) * amp[589] - amp[590] - amp[592] -
-      std::complex<double> (0, 1) * amp[595] - amp[596] - amp[598] + amp[602] -
-      amp[600] + amp[605] - amp[603] + amp[608] - amp[606] + amp[611] -
-      amp[609] + std::complex<double> (0, 1) * amp[676] - std::complex<double>
-      (0, 1) * amp[678] - std::complex<double> (0, 1) * amp[679] -
-      std::complex<double> (0, 1) * amp[681] + std::complex<double> (0, 1) *
-      amp[685] - amp[686] - std::complex<double> (0, 1) * amp[687] -
-      std::complex<double> (0, 1) * amp[688] + std::complex<double> (0, 1) *
-      amp[694] - std::complex<double> (0, 1) * amp[696] - std::complex<double>
-      (0, 1) * amp[697] - std::complex<double> (0, 1) * amp[699] +
-      std::complex<double> (0, 1) * amp[703] - amp[704] - std::complex<double>
-      (0, 1) * amp[705] - std::complex<double> (0, 1) * amp[706] + amp[709] -
-      std::complex<double> (0, 1) * amp[710] + amp[711] - std::complex<double>
-      (0, 1) * amp[713] + amp[714] + amp[717] - std::complex<double> (0, 1) *
-      amp[718] + amp[719] - std::complex<double> (0, 1) * amp[721] + amp[722] +
-      std::complex<double> (0, 1) * amp[866] + std::complex<double> (0, 1) *
-      amp[868] - amp[869] - std::complex<double> (0, 1) * amp[872] +
-      std::complex<double> (0, 1) * amp[870] + std::complex<double> (0, 1) *
-      amp[875] - amp[876] + std::complex<double> (0, 1) * amp[877] -
-      std::complex<double> (0, 1) * amp[881] + std::complex<double> (0, 1) *
-      amp[879] + std::complex<double> (0, 1) * amp[884] + std::complex<double>
-      (0, 1) * amp[886] - amp[887] - std::complex<double> (0, 1) * amp[890] +
-      std::complex<double> (0, 1) * amp[888] + std::complex<double> (0, 1) *
-      amp[893] - amp[894] + std::complex<double> (0, 1) * amp[895] -
-      std::complex<double> (0, 1) * amp[899] + std::complex<double> (0, 1) *
-      amp[897] + std::complex<double> (0, 1) * amp[900] - std::complex<double>
-      (0, 1) * amp[904] + amp[905] + std::complex<double> (0, 1) * amp[908] -
-      std::complex<double> (0, 1) * amp[906] - std::complex<double> (0, 1) *
-      amp[913] + std::complex<double> (0, 1) * amp[917] - std::complex<double>
-      (0, 1) * amp[915] + std::complex<double> (0, 1) * amp[918] -
-      std::complex<double> (0, 1) * amp[922] + amp[923] + std::complex<double>
-      (0, 1) * amp[926] - std::complex<double> (0, 1) * amp[924] -
-      std::complex<double> (0, 1) * amp[931] + std::complex<double> (0, 1) *
-      amp[935] - std::complex<double> (0, 1) * amp[933] - std::complex<double>
-      (0, 1) * amp[965] + std::complex<double> (0, 1) * amp[963] + amp[968] -
-      amp[966] - std::complex<double> (0, 1) * amp[971] + std::complex<double>
-      (0, 1) * amp[969] - std::complex<double> (0, 1) * amp[977] +
-      std::complex<double> (0, 1) * amp[975] + amp[980] - amp[978] -
-      std::complex<double> (0, 1) * amp[983] + std::complex<double> (0, 1) *
-      amp[981] + amp[1008] + amp[1009] - std::complex<double> (0, 1) *
-      amp[1011] - std::complex<double> (0, 1) * amp[1012] -
-      std::complex<double> (0, 1) * amp[1017] - std::complex<double> (0, 1) *
-      amp[1018] + amp[1020] + amp[1021] - std::complex<double> (0, 1) *
-      amp[1023] - std::complex<double> (0, 1) * amp[1024] -
-      std::complex<double> (0, 1) * amp[1029] - std::complex<double> (0, 1) *
-      amp[1030];
-  jamp[2] = +amp[3] + amp[9] + amp[44] + amp[47] + amp[49] + amp[50] + amp[53]
-      + amp[55] + std::complex<double> (0, 1) * amp[56] + std::complex<double>
-      (0, 1) * amp[57] + std::complex<double> (0, 1) * amp[58] +
-      std::complex<double> (0, 1) * amp[59] + amp[61] + std::complex<double>
-      (0, 1) * amp[62] + amp[64] + amp[67] + std::complex<double> (0, 1) *
-      amp[68] + amp[70] - std::complex<double> (0, 1) * amp[72] + amp[73] -
-      std::complex<double> (0, 1) * amp[75] + amp[76] - std::complex<double>
-      (0, 1) * amp[77] - std::complex<double> (0, 1) * amp[78] + amp[79] -
-      std::complex<double> (0, 1) * amp[81] + amp[82] - std::complex<double>
-      (0, 1) * amp[83] - amp[98] - amp[97] - amp[101] - amp[100] - amp[104] -
-      amp[103] - amp[107] - amp[106] + amp[614] + amp[620] -
-      std::complex<double> (0, 1) * amp[637] - amp[638] - std::complex<double>
-      (0, 1) * amp[639] - amp[640] - std::complex<double> (0, 1) * amp[641] -
-      std::complex<double> (0, 1) * amp[643] - amp[644] - std::complex<double>
-      (0, 1) * amp[645] - amp[646] - std::complex<double> (0, 1) * amp[647] +
-      std::complex<double> (0, 1) * amp[649] + amp[650] + amp[652] +
-      std::complex<double> (0, 1) * amp[655] + amp[656] + amp[658] + amp[660] +
-      amp[661] + amp[663] + amp[664] + amp[666] + amp[667] + amp[669] +
-      amp[670] + std::complex<double> (0, 1) * amp[726] - std::complex<double>
-      (0, 1) * amp[732] + std::complex<double> (0, 1) * amp[730] -
-      std::complex<double> (0, 1) * amp[734] + std::complex<double> (0, 1) *
-      amp[735] - amp[736] - std::complex<double> (0, 1) * amp[741] +
-      std::complex<double> (0, 1) * amp[739] + std::complex<double> (0, 1) *
-      amp[744] - std::complex<double> (0, 1) * amp[750] + std::complex<double>
-      (0, 1) * amp[748] - std::complex<double> (0, 1) * amp[752] +
-      std::complex<double> (0, 1) * amp[753] - amp[754] - std::complex<double>
-      (0, 1) * amp[759] + std::complex<double> (0, 1) * amp[757] - amp[761] +
-      std::complex<double> (0, 1) * amp[762] - amp[763] + std::complex<double>
-      (0, 1) * amp[765] - amp[766] - amp[769] + std::complex<double> (0, 1) *
-      amp[770] - amp[771] + std::complex<double> (0, 1) * amp[773] - amp[774] -
-      std::complex<double> (0, 1) * amp[830] - std::complex<double> (0, 1) *
-      amp[832] + amp[833] + std::complex<double> (0, 1) * amp[836] -
-      std::complex<double> (0, 1) * amp[834] - std::complex<double> (0, 1) *
-      amp[839] + amp[840] - std::complex<double> (0, 1) * amp[841] +
-      std::complex<double> (0, 1) * amp[845] - std::complex<double> (0, 1) *
-      amp[843] - std::complex<double> (0, 1) * amp[848] - std::complex<double>
-      (0, 1) * amp[850] + amp[851] + std::complex<double> (0, 1) * amp[854] -
-      std::complex<double> (0, 1) * amp[852] - std::complex<double> (0, 1) *
-      amp[857] + amp[858] - std::complex<double> (0, 1) * amp[859] +
-      std::complex<double> (0, 1) * amp[863] - std::complex<double> (0, 1) *
-      amp[861] - std::complex<double> (0, 1) * amp[864] - std::complex<double>
-      (0, 1) * amp[868] + amp[869] - std::complex<double> (0, 1) * amp[870] -
-      std::complex<double> (0, 1) * amp[871] - std::complex<double> (0, 1) *
-      amp[877] - std::complex<double> (0, 1) * amp[879] - std::complex<double>
-      (0, 1) * amp[880] - std::complex<double> (0, 1) * amp[882] -
-      std::complex<double> (0, 1) * amp[886] + amp[887] - std::complex<double>
-      (0, 1) * amp[888] - std::complex<double> (0, 1) * amp[889] -
-      std::complex<double> (0, 1) * amp[895] - std::complex<double> (0, 1) *
-      amp[897] - std::complex<double> (0, 1) * amp[898] - std::complex<double>
-      (0, 1) * amp[939] - std::complex<double> (0, 1) * amp[940] + amp[942] +
-      amp[943] - std::complex<double> (0, 1) * amp[945] - std::complex<double>
-      (0, 1) * amp[946] - std::complex<double> (0, 1) * amp[951] -
-      std::complex<double> (0, 1) * amp[952] + amp[954] + amp[955] -
-      std::complex<double> (0, 1) * amp[957] - std::complex<double> (0, 1) *
-      amp[958] - amp[1010] - amp[1009] + std::complex<double> (0, 1) *
-      amp[1013] + std::complex<double> (0, 1) * amp[1012] +
-      std::complex<double> (0, 1) * amp[1019] + std::complex<double> (0, 1) *
-      amp[1018] - amp[1022] - amp[1021] + std::complex<double> (0, 1) *
-      amp[1025] + std::complex<double> (0, 1) * amp[1024] +
-      std::complex<double> (0, 1) * amp[1031] + std::complex<double> (0, 1) *
-      amp[1030];
-  jamp[3] = +amp[2] + amp[8] + amp[13] + amp[14] + amp[16] + amp[19] + amp[20]
-      + amp[22] - std::complex<double> (0, 1) * amp[24] - std::complex<double>
-      (0, 1) * amp[25] - std::complex<double> (0, 1) * amp[26] -
-      std::complex<double> (0, 1) * amp[27] + std::complex<double> (0, 1) *
-      amp[72] - amp[73] + std::complex<double> (0, 1) * amp[75] - amp[76] +
-      std::complex<double> (0, 1) * amp[77] + std::complex<double> (0, 1) *
-      amp[78] - amp[79] + std::complex<double> (0, 1) * amp[81] - amp[82] +
-      std::complex<double> (0, 1) * amp[83] + amp[85] - std::complex<double>
-      (0, 1) * amp[87] + amp[88] + amp[91] - std::complex<double> (0, 1) *
-      amp[93] + amp[94] + amp[96] + amp[97] + amp[99] + amp[100] + amp[102] +
-      amp[103] + amp[105] + amp[106] + amp[496] + amp[502] -
-      std::complex<double> (0, 1) * amp[505] - amp[506] - std::complex<double>
-      (0, 1) * amp[507] - amp[508] - std::complex<double> (0, 1) * amp[509] -
-      std::complex<double> (0, 1) * amp[511] - amp[512] - std::complex<double>
-      (0, 1) * amp[513] - amp[514] - std::complex<double> (0, 1) * amp[515] -
-      std::complex<double> (0, 1) * amp[529] - amp[530] - amp[532] -
-      std::complex<double> (0, 1) * amp[535] - amp[536] - amp[538] + amp[542] -
-      amp[540] + amp[545] - amp[543] + amp[548] - amp[546] + amp[551] -
-      amp[549] + std::complex<double> (0, 1) * amp[728] - std::complex<double>
-      (0, 1) * amp[730] - std::complex<double> (0, 1) * amp[731] -
-      std::complex<double> (0, 1) * amp[733] + std::complex<double> (0, 1) *
-      amp[737] - amp[738] - std::complex<double> (0, 1) * amp[739] -
-      std::complex<double> (0, 1) * amp[740] + std::complex<double> (0, 1) *
-      amp[746] - std::complex<double> (0, 1) * amp[748] - std::complex<double>
-      (0, 1) * amp[749] - std::complex<double> (0, 1) * amp[751] +
-      std::complex<double> (0, 1) * amp[755] - amp[756] - std::complex<double>
-      (0, 1) * amp[757] - std::complex<double> (0, 1) * amp[758] + amp[761] -
-      std::complex<double> (0, 1) * amp[762] + amp[763] - std::complex<double>
-      (0, 1) * amp[765] + amp[766] + amp[769] - std::complex<double> (0, 1) *
-      amp[770] + amp[771] - std::complex<double> (0, 1) * amp[773] + amp[774] +
-      std::complex<double> (0, 1) * amp[864] + std::complex<double> (0, 1) *
-      amp[868] - amp[869] + std::complex<double> (0, 1) * amp[870] +
-      std::complex<double> (0, 1) * amp[871] + std::complex<double> (0, 1) *
-      amp[877] + std::complex<double> (0, 1) * amp[879] + std::complex<double>
-      (0, 1) * amp[880] + std::complex<double> (0, 1) * amp[882] +
-      std::complex<double> (0, 1) * amp[886] - amp[887] + std::complex<double>
-      (0, 1) * amp[888] + std::complex<double> (0, 1) * amp[889] +
-      std::complex<double> (0, 1) * amp[895] + std::complex<double> (0, 1) *
-      amp[897] + std::complex<double> (0, 1) * amp[898] + std::complex<double>
-      (0, 1) * amp[902] - std::complex<double> (0, 1) * amp[904] + amp[905] -
-      std::complex<double> (0, 1) * amp[906] - std::complex<double> (0, 1) *
-      amp[907] + std::complex<double> (0, 1) * amp[911] - amp[912] -
-      std::complex<double> (0, 1) * amp[913] - std::complex<double> (0, 1) *
-      amp[915] - std::complex<double> (0, 1) * amp[916] + std::complex<double>
-      (0, 1) * amp[920] - std::complex<double> (0, 1) * amp[922] + amp[923] -
-      std::complex<double> (0, 1) * amp[924] - std::complex<double> (0, 1) *
-      amp[925] + std::complex<double> (0, 1) * amp[929] - amp[930] -
-      std::complex<double> (0, 1) * amp[931] - std::complex<double> (0, 1) *
-      amp[933] - std::complex<double> (0, 1) * amp[934] - std::complex<double>
-      (0, 1) * amp[989] + std::complex<double> (0, 1) * amp[987] + amp[992] -
-      amp[990] - std::complex<double> (0, 1) * amp[995] + std::complex<double>
-      (0, 1) * amp[993] - std::complex<double> (0, 1) * amp[1001] +
-      std::complex<double> (0, 1) * amp[999] + amp[1004] - amp[1002] -
-      std::complex<double> (0, 1) * amp[1007] + std::complex<double> (0, 1) *
-      amp[1005] + amp[1008] + amp[1009] - std::complex<double> (0, 1) *
-      amp[1011] - std::complex<double> (0, 1) * amp[1012] -
-      std::complex<double> (0, 1) * amp[1017] - std::complex<double> (0, 1) *
-      amp[1018] + amp[1020] + amp[1021] - std::complex<double> (0, 1) *
-      amp[1023] - std::complex<double> (0, 1) * amp[1024] -
-      std::complex<double> (0, 1) * amp[1029] - std::complex<double> (0, 1) *
-      amp[1030];
-  jamp[4] = +amp[5] + amp[11] + amp[28] + amp[31] + amp[33] + amp[34] + amp[37]
-      + amp[39] + std::complex<double> (0, 1) * amp[40] + std::complex<double>
-      (0, 1) * amp[41] + std::complex<double> (0, 1) * amp[42] +
-      std::complex<double> (0, 1) * amp[43] - std::complex<double> (0, 1) *
-      amp[60] + amp[61] - std::complex<double> (0, 1) * amp[63] + amp[64] -
-      std::complex<double> (0, 1) * amp[65] - std::complex<double> (0, 1) *
-      amp[66] + amp[67] - std::complex<double> (0, 1) * amp[69] + amp[70] -
-      std::complex<double> (0, 1) * amp[71] + amp[73] + std::complex<double>
-      (0, 1) * amp[74] + amp[76] + amp[79] + std::complex<double> (0, 1) *
-      amp[80] + amp[82] - amp[98] - amp[97] - amp[101] - amp[100] - amp[104] -
-      amp[103] - amp[107] - amp[106] + amp[554] + amp[560] -
-      std::complex<double> (0, 1) * amp[577] - amp[578] - std::complex<double>
-      (0, 1) * amp[579] - amp[580] - std::complex<double> (0, 1) * amp[581] -
-      std::complex<double> (0, 1) * amp[583] - amp[584] - std::complex<double>
-      (0, 1) * amp[585] - amp[586] - std::complex<double> (0, 1) * amp[587] +
-      std::complex<double> (0, 1) * amp[589] + amp[590] + amp[592] +
-      std::complex<double> (0, 1) * amp[595] + amp[596] + amp[598] + amp[600] +
-      amp[601] + amp[603] + amp[604] + amp[606] + amp[607] + amp[609] +
-      amp[610] + std::complex<double> (0, 1) * amp[778] - std::complex<double>
-      (0, 1) * amp[784] + std::complex<double> (0, 1) * amp[782] -
-      std::complex<double> (0, 1) * amp[786] + std::complex<double> (0, 1) *
-      amp[787] - amp[788] - std::complex<double> (0, 1) * amp[793] +
-      std::complex<double> (0, 1) * amp[791] + std::complex<double> (0, 1) *
-      amp[796] - std::complex<double> (0, 1) * amp[802] + std::complex<double>
-      (0, 1) * amp[800] - std::complex<double> (0, 1) * amp[804] +
-      std::complex<double> (0, 1) * amp[805] - amp[806] - std::complex<double>
-      (0, 1) * amp[811] + std::complex<double> (0, 1) * amp[809] - amp[813] +
-      std::complex<double> (0, 1) * amp[814] - amp[815] + std::complex<double>
-      (0, 1) * amp[817] - amp[818] - amp[821] + std::complex<double> (0, 1) *
-      amp[822] - amp[823] + std::complex<double> (0, 1) * amp[825] - amp[826] -
-      std::complex<double> (0, 1) * amp[828] - std::complex<double> (0, 1) *
-      amp[832] + amp[833] - std::complex<double> (0, 1) * amp[834] -
-      std::complex<double> (0, 1) * amp[835] - std::complex<double> (0, 1) *
-      amp[841] - std::complex<double> (0, 1) * amp[843] - std::complex<double>
-      (0, 1) * amp[844] - std::complex<double> (0, 1) * amp[846] -
-      std::complex<double> (0, 1) * amp[850] + amp[851] - std::complex<double>
-      (0, 1) * amp[852] - std::complex<double> (0, 1) * amp[853] -
-      std::complex<double> (0, 1) * amp[859] - std::complex<double> (0, 1) *
-      amp[861] - std::complex<double> (0, 1) * amp[862] - std::complex<double>
-      (0, 1) * amp[866] - std::complex<double> (0, 1) * amp[868] + amp[869] +
-      std::complex<double> (0, 1) * amp[872] - std::complex<double> (0, 1) *
-      amp[870] - std::complex<double> (0, 1) * amp[875] + amp[876] -
-      std::complex<double> (0, 1) * amp[877] + std::complex<double> (0, 1) *
-      amp[881] - std::complex<double> (0, 1) * amp[879] - std::complex<double>
-      (0, 1) * amp[884] - std::complex<double> (0, 1) * amp[886] + amp[887] +
-      std::complex<double> (0, 1) * amp[890] - std::complex<double> (0, 1) *
-      amp[888] - std::complex<double> (0, 1) * amp[893] + amp[894] -
-      std::complex<double> (0, 1) * amp[895] + std::complex<double> (0, 1) *
-      amp[899] - std::complex<double> (0, 1) * amp[897] - std::complex<double>
-      (0, 1) * amp[963] - std::complex<double> (0, 1) * amp[964] + amp[966] +
-      amp[967] - std::complex<double> (0, 1) * amp[969] - std::complex<double>
-      (0, 1) * amp[970] - std::complex<double> (0, 1) * amp[975] -
-      std::complex<double> (0, 1) * amp[976] + amp[978] + amp[979] -
-      std::complex<double> (0, 1) * amp[981] - std::complex<double> (0, 1) *
-      amp[982] - amp[1010] - amp[1009] + std::complex<double> (0, 1) *
-      amp[1013] + std::complex<double> (0, 1) * amp[1012] +
-      std::complex<double> (0, 1) * amp[1019] + std::complex<double> (0, 1) *
-      amp[1018] - amp[1022] - amp[1021] + std::complex<double> (0, 1) *
-      amp[1025] + std::complex<double> (0, 1) * amp[1024] +
-      std::complex<double> (0, 1) * amp[1031] + std::complex<double> (0, 1) *
-      amp[1030];
-  jamp[5] = +amp[4] + amp[10] + amp[12] + amp[15] + amp[17] + amp[18] + amp[21]
-      + amp[23] + std::complex<double> (0, 1) * amp[24] + std::complex<double>
-      (0, 1) * amp[25] + std::complex<double> (0, 1) * amp[26] +
-      std::complex<double> (0, 1) * amp[27] + std::complex<double> (0, 1) *
-      amp[60] - amp[61] + std::complex<double> (0, 1) * amp[63] - amp[64] +
-      std::complex<double> (0, 1) * amp[65] + std::complex<double> (0, 1) *
-      amp[66] - amp[67] + std::complex<double> (0, 1) * amp[69] - amp[70] +
-      std::complex<double> (0, 1) * amp[71] - amp[85] + std::complex<double>
-      (0, 1) * amp[87] - amp[88] - amp[91] + std::complex<double> (0, 1) *
-      amp[93] - amp[94] + amp[98] - amp[96] + amp[101] - amp[99] + amp[104] -
-      amp[102] + amp[107] - amp[105] + amp[494] + amp[500] -
-      std::complex<double> (0, 1) * amp[517] - amp[518] - std::complex<double>
-      (0, 1) * amp[519] - amp[520] - std::complex<double> (0, 1) * amp[521] -
-      std::complex<double> (0, 1) * amp[523] - amp[524] - std::complex<double>
-      (0, 1) * amp[525] - amp[526] - std::complex<double> (0, 1) * amp[527] +
-      std::complex<double> (0, 1) * amp[529] + amp[530] + amp[532] +
-      std::complex<double> (0, 1) * amp[535] + amp[536] + amp[538] + amp[540] +
-      amp[541] + amp[543] + amp[544] + amp[546] + amp[547] + amp[549] +
-      amp[550] + std::complex<double> (0, 1) * amp[780] - std::complex<double>
-      (0, 1) * amp[782] - std::complex<double> (0, 1) * amp[783] -
-      std::complex<double> (0, 1) * amp[785] + std::complex<double> (0, 1) *
-      amp[789] - amp[790] - std::complex<double> (0, 1) * amp[791] -
-      std::complex<double> (0, 1) * amp[792] + std::complex<double> (0, 1) *
-      amp[798] - std::complex<double> (0, 1) * amp[800] - std::complex<double>
-      (0, 1) * amp[801] - std::complex<double> (0, 1) * amp[803] +
-      std::complex<double> (0, 1) * amp[807] - amp[808] - std::complex<double>
-      (0, 1) * amp[809] - std::complex<double> (0, 1) * amp[810] + amp[813] -
-      std::complex<double> (0, 1) * amp[814] + amp[815] - std::complex<double>
-      (0, 1) * amp[817] + amp[818] + amp[821] - std::complex<double> (0, 1) *
-      amp[822] + amp[823] - std::complex<double> (0, 1) * amp[825] + amp[826] +
-      std::complex<double> (0, 1) * amp[828] + std::complex<double> (0, 1) *
-      amp[832] - amp[833] + std::complex<double> (0, 1) * amp[834] +
-      std::complex<double> (0, 1) * amp[835] + std::complex<double> (0, 1) *
-      amp[841] + std::complex<double> (0, 1) * amp[843] + std::complex<double>
-      (0, 1) * amp[844] + std::complex<double> (0, 1) * amp[846] +
-      std::complex<double> (0, 1) * amp[850] - amp[851] + std::complex<double>
-      (0, 1) * amp[852] + std::complex<double> (0, 1) * amp[853] +
-      std::complex<double> (0, 1) * amp[859] + std::complex<double> (0, 1) *
-      amp[861] + std::complex<double> (0, 1) * amp[862] - std::complex<double>
-      (0, 1) * amp[902] + std::complex<double> (0, 1) * amp[904] - amp[905] +
-      std::complex<double> (0, 1) * amp[906] + std::complex<double> (0, 1) *
-      amp[907] - std::complex<double> (0, 1) * amp[911] + amp[912] +
-      std::complex<double> (0, 1) * amp[913] + std::complex<double> (0, 1) *
-      amp[915] + std::complex<double> (0, 1) * amp[916] - std::complex<double>
-      (0, 1) * amp[920] + std::complex<double> (0, 1) * amp[922] - amp[923] +
-      std::complex<double> (0, 1) * amp[924] + std::complex<double> (0, 1) *
-      amp[925] - std::complex<double> (0, 1) * amp[929] + amp[930] +
-      std::complex<double> (0, 1) * amp[931] + std::complex<double> (0, 1) *
-      amp[933] + std::complex<double> (0, 1) * amp[934] - std::complex<double>
-      (0, 1) * amp[987] - std::complex<double> (0, 1) * amp[988] + amp[990] +
-      amp[991] - std::complex<double> (0, 1) * amp[993] - std::complex<double>
-      (0, 1) * amp[994] - std::complex<double> (0, 1) * amp[999] -
-      std::complex<double> (0, 1) * amp[1000] + amp[1002] + amp[1003] -
-      std::complex<double> (0, 1) * amp[1005] - std::complex<double> (0, 1) *
-      amp[1006] + amp[1010] - amp[1008] - std::complex<double> (0, 1) *
-      amp[1013] + std::complex<double> (0, 1) * amp[1011] -
-      std::complex<double> (0, 1) * amp[1019] + std::complex<double> (0, 1) *
-      amp[1017] + amp[1022] - amp[1020] - std::complex<double> (0, 1) *
-      amp[1025] + std::complex<double> (0, 1) * amp[1023] -
-      std::complex<double> (0, 1) * amp[1031] + std::complex<double> (0, 1) *
-      amp[1029];
-  jamp[6] = +amp[109] + amp[115] + amp[153] + amp[154] + amp[156] + amp[159] +
-      amp[160] + amp[162] - std::complex<double> (0, 1) * amp[164] -
-      std::complex<double> (0, 1) * amp[165] - std::complex<double> (0, 1) *
-      amp[166] - std::complex<double> (0, 1) * amp[167] - amp[169] -
-      std::complex<double> (0, 1) * amp[170] - amp[172] - amp[175] -
-      std::complex<double> (0, 1) * amp[176] - amp[178] - std::complex<double>
-      (0, 1) * amp[192] - amp[193] - std::complex<double> (0, 1) * amp[194] -
-      amp[196] - std::complex<double> (0, 1) * amp[197] - std::complex<double>
-      (0, 1) * amp[198] - amp[199] - std::complex<double> (0, 1) * amp[200] -
-      amp[202] - std::complex<double> (0, 1) * amp[203] + amp[206] - amp[204] +
-      amp[209] - amp[207] + amp[212] - amp[210] + amp[215] - amp[213] +
-      amp[617] + amp[623] + std::complex<double> (0, 1) * amp[625] + amp[626] +
-      std::complex<double> (0, 1) * amp[627] + amp[628] + std::complex<double>
-      (0, 1) * amp[629] + std::complex<double> (0, 1) * amp[631] + amp[632] +
-      std::complex<double> (0, 1) * amp[633] + amp[634] + std::complex<double>
-      (0, 1) * amp[635] - std::complex<double> (0, 1) * amp[636] + amp[638] +
-      amp[640] - std::complex<double> (0, 1) * amp[642] + amp[644] + amp[646] -
-      amp[662] - amp[661] - amp[665] - amp[664] - amp[668] - amp[667] -
-      amp[671] - amp[670] - std::complex<double> (0, 1) * amp[674] +
-      std::complex<double> (0, 1) * amp[680] - std::complex<double> (0, 1) *
-      amp[678] + std::complex<double> (0, 1) * amp[682] - std::complex<double>
-      (0, 1) * amp[683] + amp[684] + std::complex<double> (0, 1) * amp[689] -
-      std::complex<double> (0, 1) * amp[687] - std::complex<double> (0, 1) *
-      amp[692] + std::complex<double> (0, 1) * amp[698] - std::complex<double>
-      (0, 1) * amp[696] + std::complex<double> (0, 1) * amp[700] -
-      std::complex<double> (0, 1) * amp[701] + amp[702] + std::complex<double>
-      (0, 1) * amp[707] - std::complex<double> (0, 1) * amp[705] + amp[709] -
-      std::complex<double> (0, 1) * amp[710] + amp[711] - std::complex<double>
-      (0, 1) * amp[713] + amp[714] + amp[717] - std::complex<double> (0, 1) *
-      amp[718] + amp[719] - std::complex<double> (0, 1) * amp[721] + amp[722] -
-      std::complex<double> (0, 1) * amp[726] - std::complex<double> (0, 1) *
-      amp[728] - amp[729] + std::complex<double> (0, 1) * amp[732] +
-      std::complex<double> (0, 1) * amp[731] - std::complex<double> (0, 1) *
-      amp[735] + amp[736] - std::complex<double> (0, 1) * amp[737] +
-      std::complex<double> (0, 1) * amp[741] + std::complex<double> (0, 1) *
-      amp[740] - std::complex<double> (0, 1) * amp[744] - std::complex<double>
-      (0, 1) * amp[746] - amp[747] + std::complex<double> (0, 1) * amp[750] +
-      std::complex<double> (0, 1) * amp[749] - std::complex<double> (0, 1) *
-      amp[753] + amp[754] - std::complex<double> (0, 1) * amp[755] +
-      std::complex<double> (0, 1) * amp[759] + std::complex<double> (0, 1) *
-      amp[758] - std::complex<double> (0, 1) * amp[901] - std::complex<double>
-      (0, 1) * amp[902] - amp[903] + std::complex<double> (0, 1) * amp[908] +
-      std::complex<double> (0, 1) * amp[907] - std::complex<double> (0, 1) *
-      amp[911] + std::complex<double> (0, 1) * amp[917] + std::complex<double>
-      (0, 1) * amp[916] - std::complex<double> (0, 1) * amp[919] -
-      std::complex<double> (0, 1) * amp[920] - amp[921] + std::complex<double>
-      (0, 1) * amp[926] + std::complex<double> (0, 1) * amp[925] -
-      std::complex<double> (0, 1) * amp[929] + std::complex<double> (0, 1) *
-      amp[935] + std::complex<double> (0, 1) * amp[934] + std::complex<double>
-      (0, 1) * amp[941] + std::complex<double> (0, 1) * amp[940] - amp[944] -
-      amp[943] + std::complex<double> (0, 1) * amp[947] + std::complex<double>
-      (0, 1) * amp[946] + std::complex<double> (0, 1) * amp[953] +
-      std::complex<double> (0, 1) * amp[952] - amp[956] - amp[955] +
-      std::complex<double> (0, 1) * amp[959] + std::complex<double> (0, 1) *
-      amp[958] + amp[986] - amp[984] + std::complex<double> (0, 1) * amp[989] -
-      std::complex<double> (0, 1) * amp[987] + std::complex<double> (0, 1) *
-      amp[995] - std::complex<double> (0, 1) * amp[993] + amp[998] - amp[996] +
-      std::complex<double> (0, 1) * amp[1001] - std::complex<double> (0, 1) *
-      amp[999] + std::complex<double> (0, 1) * amp[1007] - std::complex<double>
-      (0, 1) * amp[1005];
-  jamp[7] = +amp[108] + amp[114] + amp[137] + amp[138] + amp[140] + amp[143] +
-      amp[144] + amp[146] - std::complex<double> (0, 1) * amp[148] -
-      std::complex<double> (0, 1) * amp[149] - std::complex<double> (0, 1) *
-      amp[150] - std::complex<double> (0, 1) * amp[151] - amp[181] -
-      std::complex<double> (0, 1) * amp[182] - amp[184] - amp[187] -
-      std::complex<double> (0, 1) * amp[188] - amp[190] + std::complex<double>
-      (0, 1) * amp[192] + amp[193] + std::complex<double> (0, 1) * amp[194] +
-      amp[196] + std::complex<double> (0, 1) * amp[197] + std::complex<double>
-      (0, 1) * amp[198] + amp[199] + std::complex<double> (0, 1) * amp[200] +
-      amp[202] + std::complex<double> (0, 1) * amp[203] + amp[204] + amp[205] +
-      amp[207] + amp[208] + amp[210] + amp[211] + amp[213] + amp[214] +
-      amp[557] + amp[563] + std::complex<double> (0, 1) * amp[565] + amp[566] +
-      std::complex<double> (0, 1) * amp[567] + amp[568] + std::complex<double>
-      (0, 1) * amp[569] + std::complex<double> (0, 1) * amp[571] + amp[572] +
-      std::complex<double> (0, 1) * amp[573] + amp[574] + std::complex<double>
-      (0, 1) * amp[575] - std::complex<double> (0, 1) * amp[576] + amp[578] +
-      amp[580] - std::complex<double> (0, 1) * amp[582] + amp[584] + amp[586] -
-      amp[602] - amp[601] - amp[605] - amp[604] - amp[608] - amp[607] -
-      amp[611] - amp[610] - std::complex<double> (0, 1) * amp[676] +
-      std::complex<double> (0, 1) * amp[678] + std::complex<double> (0, 1) *
-      amp[679] + std::complex<double> (0, 1) * amp[681] - std::complex<double>
-      (0, 1) * amp[685] + amp[686] + std::complex<double> (0, 1) * amp[687] +
-      std::complex<double> (0, 1) * amp[688] - std::complex<double> (0, 1) *
-      amp[694] + std::complex<double> (0, 1) * amp[696] + std::complex<double>
-      (0, 1) * amp[697] + std::complex<double> (0, 1) * amp[699] -
-      std::complex<double> (0, 1) * amp[703] + amp[704] + std::complex<double>
-      (0, 1) * amp[705] + std::complex<double> (0, 1) * amp[706] - amp[709] +
-      std::complex<double> (0, 1) * amp[710] - amp[711] + std::complex<double>
-      (0, 1) * amp[713] - amp[714] - amp[717] + std::complex<double> (0, 1) *
-      amp[718] - amp[719] + std::complex<double> (0, 1) * amp[721] - amp[722] -
-      std::complex<double> (0, 1) * amp[778] - std::complex<double> (0, 1) *
-      amp[780] - amp[781] + std::complex<double> (0, 1) * amp[784] +
-      std::complex<double> (0, 1) * amp[783] - std::complex<double> (0, 1) *
-      amp[787] + amp[788] - std::complex<double> (0, 1) * amp[789] +
-      std::complex<double> (0, 1) * amp[793] + std::complex<double> (0, 1) *
-      amp[792] - std::complex<double> (0, 1) * amp[796] - std::complex<double>
-      (0, 1) * amp[798] - amp[799] + std::complex<double> (0, 1) * amp[802] +
-      std::complex<double> (0, 1) * amp[801] - std::complex<double> (0, 1) *
-      amp[805] + amp[806] - std::complex<double> (0, 1) * amp[807] +
-      std::complex<double> (0, 1) * amp[811] + std::complex<double> (0, 1) *
-      amp[810] + std::complex<double> (0, 1) * amp[901] + std::complex<double>
-      (0, 1) * amp[902] + amp[903] - std::complex<double> (0, 1) * amp[908] -
-      std::complex<double> (0, 1) * amp[907] + std::complex<double> (0, 1) *
-      amp[911] - std::complex<double> (0, 1) * amp[917] - std::complex<double>
-      (0, 1) * amp[916] + std::complex<double> (0, 1) * amp[919] +
-      std::complex<double> (0, 1) * amp[920] + amp[921] - std::complex<double>
-      (0, 1) * amp[926] - std::complex<double> (0, 1) * amp[925] +
-      std::complex<double> (0, 1) * amp[929] - std::complex<double> (0, 1) *
-      amp[935] - std::complex<double> (0, 1) * amp[934] + std::complex<double>
-      (0, 1) * amp[965] + std::complex<double> (0, 1) * amp[964] - amp[968] -
-      amp[967] + std::complex<double> (0, 1) * amp[971] + std::complex<double>
-      (0, 1) * amp[970] + std::complex<double> (0, 1) * amp[977] +
-      std::complex<double> (0, 1) * amp[976] - amp[980] - amp[979] +
-      std::complex<double> (0, 1) * amp[983] + std::complex<double> (0, 1) *
-      amp[982] + amp[984] + amp[985] + std::complex<double> (0, 1) * amp[987] +
-      std::complex<double> (0, 1) * amp[988] + std::complex<double> (0, 1) *
-      amp[993] + std::complex<double> (0, 1) * amp[994] + amp[996] + amp[997] +
-      std::complex<double> (0, 1) * amp[999] + std::complex<double> (0, 1) *
-      amp[1000] + std::complex<double> (0, 1) * amp[1005] +
-      std::complex<double> (0, 1) * amp[1006];
-  jamp[8] = +amp[111] + amp[117] + amp[152] + amp[155] + amp[157] + amp[158] +
-      amp[161] + amp[163] + std::complex<double> (0, 1) * amp[164] +
-      std::complex<double> (0, 1) * amp[165] + std::complex<double> (0, 1) *
-      amp[166] + std::complex<double> (0, 1) * amp[167] + amp[169] +
-      std::complex<double> (0, 1) * amp[170] + amp[172] + amp[175] +
-      std::complex<double> (0, 1) * amp[176] + amp[178] - std::complex<double>
-      (0, 1) * amp[180] + amp[181] - std::complex<double> (0, 1) * amp[183] +
-      amp[184] - std::complex<double> (0, 1) * amp[185] - std::complex<double>
-      (0, 1) * amp[186] + amp[187] - std::complex<double> (0, 1) * amp[189] +
-      amp[190] - std::complex<double> (0, 1) * amp[191] - amp[206] - amp[205] -
-      amp[209] - amp[208] - amp[212] - amp[211] - amp[215] - amp[214] +
-      amp[612] + amp[618] + std::complex<double> (0, 1) * amp[636] - amp[638] -
-      amp[640] + std::complex<double> (0, 1) * amp[642] - amp[644] - amp[646] -
-      std::complex<double> (0, 1) * amp[648] + amp[650] - std::complex<double>
-      (0, 1) * amp[651] + amp[652] - std::complex<double> (0, 1) * amp[653] -
-      std::complex<double> (0, 1) * amp[654] + amp[656] - std::complex<double>
-      (0, 1) * amp[657] + amp[658] - std::complex<double> (0, 1) * amp[659] +
-      amp[660] + amp[661] + amp[663] + amp[664] + amp[666] + amp[667] +
-      amp[669] + amp[670] + std::complex<double> (0, 1) * amp[726] +
-      std::complex<double> (0, 1) * amp[728] + amp[729] - std::complex<double>
-      (0, 1) * amp[732] - std::complex<double> (0, 1) * amp[731] +
-      std::complex<double> (0, 1) * amp[735] - amp[736] + std::complex<double>
-      (0, 1) * amp[737] - std::complex<double> (0, 1) * amp[741] -
-      std::complex<double> (0, 1) * amp[740] + std::complex<double> (0, 1) *
-      amp[744] + std::complex<double> (0, 1) * amp[746] + amp[747] -
-      std::complex<double> (0, 1) * amp[750] - std::complex<double> (0, 1) *
-      amp[749] + std::complex<double> (0, 1) * amp[753] - amp[754] +
-      std::complex<double> (0, 1) * amp[755] - std::complex<double> (0, 1) *
-      amp[759] - std::complex<double> (0, 1) * amp[758] - std::complex<double>
-      (0, 1) * amp[776] + std::complex<double> (0, 1) * amp[780] + amp[781] -
-      std::complex<double> (0, 1) * amp[782] - std::complex<double> (0, 1) *
-      amp[783] + std::complex<double> (0, 1) * amp[789] - std::complex<double>
-      (0, 1) * amp[791] - std::complex<double> (0, 1) * amp[792] -
-      std::complex<double> (0, 1) * amp[794] + std::complex<double> (0, 1) *
-      amp[798] + amp[799] - std::complex<double> (0, 1) * amp[800] -
-      std::complex<double> (0, 1) * amp[801] + std::complex<double> (0, 1) *
-      amp[807] - std::complex<double> (0, 1) * amp[809] - std::complex<double>
-      (0, 1) * amp[810] - amp[812] - std::complex<double> (0, 1) * amp[814] -
-      amp[816] - std::complex<double> (0, 1) * amp[817] - amp[819] - amp[820] -
-      std::complex<double> (0, 1) * amp[822] - amp[824] - std::complex<double>
-      (0, 1) * amp[825] - amp[827] - std::complex<double> (0, 1) * amp[830] +
-      std::complex<double> (0, 1) * amp[836] + std::complex<double> (0, 1) *
-      amp[835] - std::complex<double> (0, 1) * amp[838] - std::complex<double>
-      (0, 1) * amp[839] + amp[840] + std::complex<double> (0, 1) * amp[845] +
-      std::complex<double> (0, 1) * amp[844] - std::complex<double> (0, 1) *
-      amp[848] + std::complex<double> (0, 1) * amp[854] + std::complex<double>
-      (0, 1) * amp[853] - std::complex<double> (0, 1) * amp[856] -
-      std::complex<double> (0, 1) * amp[857] + amp[858] + std::complex<double>
-      (0, 1) * amp[863] + std::complex<double> (0, 1) * amp[862] -
-      std::complex<double> (0, 1) * amp[939] - std::complex<double> (0, 1) *
-      amp[940] + amp[942] + amp[943] - std::complex<double> (0, 1) * amp[945] -
-      std::complex<double> (0, 1) * amp[946] - std::complex<double> (0, 1) *
-      amp[951] - std::complex<double> (0, 1) * amp[952] + amp[954] + amp[955] -
-      std::complex<double> (0, 1) * amp[957] - std::complex<double> (0, 1) *
-      amp[958] - amp[986] - amp[985] - std::complex<double> (0, 1) * amp[989] -
-      std::complex<double> (0, 1) * amp[988] - std::complex<double> (0, 1) *
-      amp[995] - std::complex<double> (0, 1) * amp[994] - amp[998] - amp[997] -
-      std::complex<double> (0, 1) * amp[1001] - std::complex<double> (0, 1) *
-      amp[1000] - std::complex<double> (0, 1) * amp[1007] -
-      std::complex<double> (0, 1) * amp[1006];
-  jamp[9] = +amp[110] + amp[116] + amp[121] + amp[122] + amp[124] + amp[127] +
-      amp[128] + amp[130] - std::complex<double> (0, 1) * amp[132] -
-      std::complex<double> (0, 1) * amp[133] - std::complex<double> (0, 1) *
-      amp[134] - std::complex<double> (0, 1) * amp[135] + std::complex<double>
-      (0, 1) * amp[180] - amp[181] + std::complex<double> (0, 1) * amp[183] -
-      amp[184] + std::complex<double> (0, 1) * amp[185] + std::complex<double>
-      (0, 1) * amp[186] - amp[187] + std::complex<double> (0, 1) * amp[189] -
-      amp[190] + std::complex<double> (0, 1) * amp[191] + amp[193] -
-      std::complex<double> (0, 1) * amp[195] + amp[196] + amp[199] -
-      std::complex<double> (0, 1) * amp[201] + amp[202] + amp[204] + amp[205] +
-      amp[207] + amp[208] + amp[210] + amp[211] + amp[213] + amp[214] +
-      amp[436] + amp[442] - std::complex<double> (0, 1) * amp[445] - amp[446] -
-      std::complex<double> (0, 1) * amp[447] - amp[448] - std::complex<double>
-      (0, 1) * amp[449] - std::complex<double> (0, 1) * amp[451] - amp[452] -
-      std::complex<double> (0, 1) * amp[453] - amp[454] - std::complex<double>
-      (0, 1) * amp[455] - std::complex<double> (0, 1) * amp[469] - amp[470] -
-      amp[472] - std::complex<double> (0, 1) * amp[475] - amp[476] - amp[478] +
-      amp[482] - amp[480] + amp[485] - amp[483] + amp[488] - amp[486] +
-      amp[491] - amp[489] + std::complex<double> (0, 1) * amp[776] -
-      std::complex<double> (0, 1) * amp[780] - amp[781] + std::complex<double>
-      (0, 1) * amp[782] + std::complex<double> (0, 1) * amp[783] -
-      std::complex<double> (0, 1) * amp[789] + std::complex<double> (0, 1) *
-      amp[791] + std::complex<double> (0, 1) * amp[792] + std::complex<double>
-      (0, 1) * amp[794] - std::complex<double> (0, 1) * amp[798] - amp[799] +
-      std::complex<double> (0, 1) * amp[800] + std::complex<double> (0, 1) *
-      amp[801] - std::complex<double> (0, 1) * amp[807] + std::complex<double>
-      (0, 1) * amp[809] + std::complex<double> (0, 1) * amp[810] + amp[812] +
-      std::complex<double> (0, 1) * amp[814] + amp[816] + std::complex<double>
-      (0, 1) * amp[817] + amp[819] + amp[820] + std::complex<double> (0, 1) *
-      amp[822] + amp[824] + std::complex<double> (0, 1) * amp[825] + amp[827] -
-      std::complex<double> (0, 1) * amp[832] - std::complex<double> (0, 1) *
-      amp[834] - std::complex<double> (0, 1) * amp[835] - std::complex<double>
-      (0, 1) * amp[837] - std::complex<double> (0, 1) * amp[841] - amp[842] -
-      std::complex<double> (0, 1) * amp[843] - std::complex<double> (0, 1) *
-      amp[844] - std::complex<double> (0, 1) * amp[850] - std::complex<double>
-      (0, 1) * amp[852] - std::complex<double> (0, 1) * amp[853] -
-      std::complex<double> (0, 1) * amp[855] - std::complex<double> (0, 1) *
-      amp[859] - amp[860] - std::complex<double> (0, 1) * amp[861] -
-      std::complex<double> (0, 1) * amp[862] + std::complex<double> (0, 1) *
-      amp[902] + amp[903] - std::complex<double> (0, 1) * amp[904] -
-      std::complex<double> (0, 1) * amp[906] - std::complex<double> (0, 1) *
-      amp[907] + std::complex<double> (0, 1) * amp[911] - std::complex<double>
-      (0, 1) * amp[913] - amp[914] - std::complex<double> (0, 1) * amp[915] -
-      std::complex<double> (0, 1) * amp[916] + std::complex<double> (0, 1) *
-      amp[920] + amp[921] - std::complex<double> (0, 1) * amp[922] -
-      std::complex<double> (0, 1) * amp[924] - std::complex<double> (0, 1) *
-      amp[925] + std::complex<double> (0, 1) * amp[929] - std::complex<double>
-      (0, 1) * amp[931] - amp[932] - std::complex<double> (0, 1) * amp[933] -
-      std::complex<double> (0, 1) * amp[934] + amp[984] + amp[985] +
-      std::complex<double> (0, 1) * amp[987] + std::complex<double> (0, 1) *
-      amp[988] + std::complex<double> (0, 1) * amp[993] + std::complex<double>
-      (0, 1) * amp[994] + amp[996] + amp[997] + std::complex<double> (0, 1) *
-      amp[999] + std::complex<double> (0, 1) * amp[1000] + std::complex<double>
-      (0, 1) * amp[1005] + std::complex<double> (0, 1) * amp[1006] +
-      std::complex<double> (0, 1) * amp[1013] - std::complex<double> (0, 1) *
-      amp[1011] + amp[1016] - amp[1014] + std::complex<double> (0, 1) *
-      amp[1019] - std::complex<double> (0, 1) * amp[1017] +
-      std::complex<double> (0, 1) * amp[1025] - std::complex<double> (0, 1) *
-      amp[1023] + amp[1028] - amp[1026] + std::complex<double> (0, 1) *
-      amp[1031] - std::complex<double> (0, 1) * amp[1029];
-  jamp[10] = +amp[113] + amp[119] + amp[136] + amp[139] + amp[141] + amp[142] +
-      amp[145] + amp[147] + std::complex<double> (0, 1) * amp[148] +
-      std::complex<double> (0, 1) * amp[149] + std::complex<double> (0, 1) *
-      amp[150] + std::complex<double> (0, 1) * amp[151] - std::complex<double>
-      (0, 1) * amp[168] + amp[169] - std::complex<double> (0, 1) * amp[171] +
-      amp[172] - std::complex<double> (0, 1) * amp[173] - std::complex<double>
-      (0, 1) * amp[174] + amp[175] - std::complex<double> (0, 1) * amp[177] +
-      amp[178] - std::complex<double> (0, 1) * amp[179] + amp[181] +
-      std::complex<double> (0, 1) * amp[182] + amp[184] + amp[187] +
-      std::complex<double> (0, 1) * amp[188] + amp[190] - amp[206] - amp[205] -
-      amp[209] - amp[208] - amp[212] - amp[211] - amp[215] - amp[214] +
-      amp[552] + amp[558] + std::complex<double> (0, 1) * amp[576] - amp[578] -
-      amp[580] + std::complex<double> (0, 1) * amp[582] - amp[584] - amp[586] -
-      std::complex<double> (0, 1) * amp[588] + amp[590] - std::complex<double>
-      (0, 1) * amp[591] + amp[592] - std::complex<double> (0, 1) * amp[593] -
-      std::complex<double> (0, 1) * amp[594] + amp[596] - std::complex<double>
-      (0, 1) * amp[597] + amp[598] - std::complex<double> (0, 1) * amp[599] +
-      amp[600] + amp[601] + amp[603] + amp[604] + amp[606] + amp[607] +
-      amp[609] + amp[610] - std::complex<double> (0, 1) * amp[724] +
-      std::complex<double> (0, 1) * amp[728] + amp[729] - std::complex<double>
-      (0, 1) * amp[730] - std::complex<double> (0, 1) * amp[731] +
-      std::complex<double> (0, 1) * amp[737] - std::complex<double> (0, 1) *
-      amp[739] - std::complex<double> (0, 1) * amp[740] - std::complex<double>
-      (0, 1) * amp[742] + std::complex<double> (0, 1) * amp[746] + amp[747] -
-      std::complex<double> (0, 1) * amp[748] - std::complex<double> (0, 1) *
-      amp[749] + std::complex<double> (0, 1) * amp[755] - std::complex<double>
-      (0, 1) * amp[757] - std::complex<double> (0, 1) * amp[758] - amp[760] -
-      std::complex<double> (0, 1) * amp[762] - amp[764] - std::complex<double>
-      (0, 1) * amp[765] - amp[767] - amp[768] - std::complex<double> (0, 1) *
-      amp[770] - amp[772] - std::complex<double> (0, 1) * amp[773] - amp[775] +
-      std::complex<double> (0, 1) * amp[778] + std::complex<double> (0, 1) *
-      amp[780] + amp[781] - std::complex<double> (0, 1) * amp[784] -
-      std::complex<double> (0, 1) * amp[783] + std::complex<double> (0, 1) *
-      amp[787] - amp[788] + std::complex<double> (0, 1) * amp[789] -
-      std::complex<double> (0, 1) * amp[793] - std::complex<double> (0, 1) *
-      amp[792] + std::complex<double> (0, 1) * amp[796] + std::complex<double>
-      (0, 1) * amp[798] + amp[799] - std::complex<double> (0, 1) * amp[802] -
-      std::complex<double> (0, 1) * amp[801] + std::complex<double> (0, 1) *
-      amp[805] - amp[806] + std::complex<double> (0, 1) * amp[807] -
-      std::complex<double> (0, 1) * amp[811] - std::complex<double> (0, 1) *
-      amp[810] - std::complex<double> (0, 1) * amp[866] + std::complex<double>
-      (0, 1) * amp[872] + std::complex<double> (0, 1) * amp[871] -
-      std::complex<double> (0, 1) * amp[874] - std::complex<double> (0, 1) *
-      amp[875] + amp[876] + std::complex<double> (0, 1) * amp[881] +
-      std::complex<double> (0, 1) * amp[880] - std::complex<double> (0, 1) *
-      amp[884] + std::complex<double> (0, 1) * amp[890] + std::complex<double>
-      (0, 1) * amp[889] - std::complex<double> (0, 1) * amp[892] -
-      std::complex<double> (0, 1) * amp[893] + amp[894] + std::complex<double>
-      (0, 1) * amp[899] + std::complex<double> (0, 1) * amp[898] -
-      std::complex<double> (0, 1) * amp[963] - std::complex<double> (0, 1) *
-      amp[964] + amp[966] + amp[967] - std::complex<double> (0, 1) * amp[969] -
-      std::complex<double> (0, 1) * amp[970] - std::complex<double> (0, 1) *
-      amp[975] - std::complex<double> (0, 1) * amp[976] + amp[978] + amp[979] -
-      std::complex<double> (0, 1) * amp[981] - std::complex<double> (0, 1) *
-      amp[982] - amp[986] - amp[985] - std::complex<double> (0, 1) * amp[989] -
-      std::complex<double> (0, 1) * amp[988] - std::complex<double> (0, 1) *
-      amp[995] - std::complex<double> (0, 1) * amp[994] - amp[998] - amp[997] -
-      std::complex<double> (0, 1) * amp[1001] - std::complex<double> (0, 1) *
-      amp[1000] - std::complex<double> (0, 1) * amp[1007] -
-      std::complex<double> (0, 1) * amp[1006];
-  jamp[11] = +amp[112] + amp[118] + amp[120] + amp[123] + amp[125] + amp[126] +
-      amp[129] + amp[131] + std::complex<double> (0, 1) * amp[132] +
-      std::complex<double> (0, 1) * amp[133] + std::complex<double> (0, 1) *
-      amp[134] + std::complex<double> (0, 1) * amp[135] + std::complex<double>
-      (0, 1) * amp[168] - amp[169] + std::complex<double> (0, 1) * amp[171] -
-      amp[172] + std::complex<double> (0, 1) * amp[173] + std::complex<double>
-      (0, 1) * amp[174] - amp[175] + std::complex<double> (0, 1) * amp[177] -
-      amp[178] + std::complex<double> (0, 1) * amp[179] - amp[193] +
-      std::complex<double> (0, 1) * amp[195] - amp[196] - amp[199] +
-      std::complex<double> (0, 1) * amp[201] - amp[202] + amp[206] - amp[204] +
-      amp[209] - amp[207] + amp[212] - amp[210] + amp[215] - amp[213] +
-      amp[434] + amp[440] - std::complex<double> (0, 1) * amp[457] - amp[458] -
-      std::complex<double> (0, 1) * amp[459] - amp[460] - std::complex<double>
-      (0, 1) * amp[461] - std::complex<double> (0, 1) * amp[463] - amp[464] -
-      std::complex<double> (0, 1) * amp[465] - amp[466] - std::complex<double>
-      (0, 1) * amp[467] + std::complex<double> (0, 1) * amp[469] + amp[470] +
-      amp[472] + std::complex<double> (0, 1) * amp[475] + amp[476] + amp[478] +
-      amp[480] + amp[481] + amp[483] + amp[484] + amp[486] + amp[487] +
-      amp[489] + amp[490] + std::complex<double> (0, 1) * amp[724] -
-      std::complex<double> (0, 1) * amp[728] - amp[729] + std::complex<double>
-      (0, 1) * amp[730] + std::complex<double> (0, 1) * amp[731] -
-      std::complex<double> (0, 1) * amp[737] + std::complex<double> (0, 1) *
-      amp[739] + std::complex<double> (0, 1) * amp[740] + std::complex<double>
-      (0, 1) * amp[742] - std::complex<double> (0, 1) * amp[746] - amp[747] +
-      std::complex<double> (0, 1) * amp[748] + std::complex<double> (0, 1) *
-      amp[749] - std::complex<double> (0, 1) * amp[755] + std::complex<double>
-      (0, 1) * amp[757] + std::complex<double> (0, 1) * amp[758] + amp[760] +
-      std::complex<double> (0, 1) * amp[762] + amp[764] + std::complex<double>
-      (0, 1) * amp[765] + amp[767] + amp[768] + std::complex<double> (0, 1) *
-      amp[770] + amp[772] + std::complex<double> (0, 1) * amp[773] + amp[775] -
-      std::complex<double> (0, 1) * amp[868] - std::complex<double> (0, 1) *
-      amp[870] - std::complex<double> (0, 1) * amp[871] - std::complex<double>
-      (0, 1) * amp[873] - std::complex<double> (0, 1) * amp[877] - amp[878] -
-      std::complex<double> (0, 1) * amp[879] - std::complex<double> (0, 1) *
-      amp[880] - std::complex<double> (0, 1) * amp[886] - std::complex<double>
-      (0, 1) * amp[888] - std::complex<double> (0, 1) * amp[889] -
-      std::complex<double> (0, 1) * amp[891] - std::complex<double> (0, 1) *
-      amp[895] - amp[896] - std::complex<double> (0, 1) * amp[897] -
-      std::complex<double> (0, 1) * amp[898] - std::complex<double> (0, 1) *
-      amp[902] - amp[903] + std::complex<double> (0, 1) * amp[904] +
-      std::complex<double> (0, 1) * amp[906] + std::complex<double> (0, 1) *
-      amp[907] - std::complex<double> (0, 1) * amp[911] + std::complex<double>
-      (0, 1) * amp[913] + amp[914] + std::complex<double> (0, 1) * amp[915] +
-      std::complex<double> (0, 1) * amp[916] - std::complex<double> (0, 1) *
-      amp[920] - amp[921] + std::complex<double> (0, 1) * amp[922] +
-      std::complex<double> (0, 1) * amp[924] + std::complex<double> (0, 1) *
-      amp[925] - std::complex<double> (0, 1) * amp[929] + std::complex<double>
-      (0, 1) * amp[931] + amp[932] + std::complex<double> (0, 1) * amp[933] +
-      std::complex<double> (0, 1) * amp[934] + amp[986] - amp[984] +
-      std::complex<double> (0, 1) * amp[989] - std::complex<double> (0, 1) *
-      amp[987] + std::complex<double> (0, 1) * amp[995] - std::complex<double>
-      (0, 1) * amp[993] + amp[998] - amp[996] + std::complex<double> (0, 1) *
-      amp[1001] - std::complex<double> (0, 1) * amp[999] + std::complex<double>
-      (0, 1) * amp[1007] - std::complex<double> (0, 1) * amp[1005] +
-      std::complex<double> (0, 1) * amp[1011] + std::complex<double> (0, 1) *
-      amp[1012] + amp[1014] + amp[1015] + std::complex<double> (0, 1) *
-      amp[1017] + std::complex<double> (0, 1) * amp[1018] +
-      std::complex<double> (0, 1) * amp[1023] + std::complex<double> (0, 1) *
-      amp[1024] + amp[1026] + amp[1027] + std::complex<double> (0, 1) *
-      amp[1029] + std::complex<double> (0, 1) * amp[1030];
-  jamp[12] = +amp[217] + amp[223] + amp[261] + amp[262] + amp[264] + amp[267] +
-      amp[268] + amp[270] - std::complex<double> (0, 1) * amp[272] -
-      std::complex<double> (0, 1) * amp[273] - std::complex<double> (0, 1) *
-      amp[274] - std::complex<double> (0, 1) * amp[275] - amp[277] -
-      std::complex<double> (0, 1) * amp[278] - amp[280] - amp[283] -
-      std::complex<double> (0, 1) * amp[284] - amp[286] - std::complex<double>
-      (0, 1) * amp[300] - amp[301] - std::complex<double> (0, 1) * amp[302] -
-      amp[304] - std::complex<double> (0, 1) * amp[305] - std::complex<double>
-      (0, 1) * amp[306] - amp[307] - std::complex<double> (0, 1) * amp[308] -
-      amp[310] - std::complex<double> (0, 1) * amp[311] + amp[314] - amp[312] +
-      amp[317] - amp[315] + amp[320] - amp[318] + amp[323] - amp[321] +
-      amp[615] + amp[621] - std::complex<double> (0, 1) * amp[624] + amp[626] +
-      amp[628] - std::complex<double> (0, 1) * amp[630] + amp[632] + amp[634] +
-      std::complex<double> (0, 1) * amp[637] + amp[638] + std::complex<double>
-      (0, 1) * amp[639] + amp[640] + std::complex<double> (0, 1) * amp[641] +
-      std::complex<double> (0, 1) * amp[643] + amp[644] + std::complex<double>
-      (0, 1) * amp[645] + amp[646] + std::complex<double> (0, 1) * amp[647] -
-      amp[662] - amp[661] - amp[665] - amp[664] - amp[668] - amp[667] -
-      amp[671] - amp[670] - std::complex<double> (0, 1) * amp[674] -
-      std::complex<double> (0, 1) * amp[676] - amp[677] + std::complex<double>
-      (0, 1) * amp[680] + std::complex<double> (0, 1) * amp[679] -
-      std::complex<double> (0, 1) * amp[683] + amp[684] - std::complex<double>
-      (0, 1) * amp[685] + std::complex<double> (0, 1) * amp[689] +
-      std::complex<double> (0, 1) * amp[688] - std::complex<double> (0, 1) *
-      amp[692] - std::complex<double> (0, 1) * amp[694] - amp[695] +
-      std::complex<double> (0, 1) * amp[698] + std::complex<double> (0, 1) *
-      amp[697] - std::complex<double> (0, 1) * amp[701] + amp[702] -
-      std::complex<double> (0, 1) * amp[703] + std::complex<double> (0, 1) *
-      amp[707] + std::complex<double> (0, 1) * amp[706] - std::complex<double>
-      (0, 1) * amp[726] + std::complex<double> (0, 1) * amp[732] -
-      std::complex<double> (0, 1) * amp[730] + std::complex<double> (0, 1) *
-      amp[734] - std::complex<double> (0, 1) * amp[735] + amp[736] +
-      std::complex<double> (0, 1) * amp[741] - std::complex<double> (0, 1) *
-      amp[739] - std::complex<double> (0, 1) * amp[744] + std::complex<double>
-      (0, 1) * amp[750] - std::complex<double> (0, 1) * amp[748] +
-      std::complex<double> (0, 1) * amp[752] - std::complex<double> (0, 1) *
-      amp[753] + amp[754] + std::complex<double> (0, 1) * amp[759] -
-      std::complex<double> (0, 1) * amp[757] + amp[761] - std::complex<double>
-      (0, 1) * amp[762] + amp[763] - std::complex<double> (0, 1) * amp[765] +
-      amp[766] + amp[769] - std::complex<double> (0, 1) * amp[770] + amp[771] -
-      std::complex<double> (0, 1) * amp[773] + amp[774] - std::complex<double>
-      (0, 1) * amp[865] - std::complex<double> (0, 1) * amp[866] - amp[867] +
-      std::complex<double> (0, 1) * amp[872] + std::complex<double> (0, 1) *
-      amp[871] - std::complex<double> (0, 1) * amp[875] + std::complex<double>
-      (0, 1) * amp[881] + std::complex<double> (0, 1) * amp[880] -
-      std::complex<double> (0, 1) * amp[883] - std::complex<double> (0, 1) *
-      amp[884] - amp[885] + std::complex<double> (0, 1) * amp[890] +
-      std::complex<double> (0, 1) * amp[889] - std::complex<double> (0, 1) *
-      amp[893] + std::complex<double> (0, 1) * amp[899] + std::complex<double>
-      (0, 1) * amp[898] + std::complex<double> (0, 1) * amp[941] +
-      std::complex<double> (0, 1) * amp[940] - amp[944] - amp[943] +
-      std::complex<double> (0, 1) * amp[947] + std::complex<double> (0, 1) *
-      amp[946] + std::complex<double> (0, 1) * amp[953] + std::complex<double>
-      (0, 1) * amp[952] - amp[956] - amp[955] + std::complex<double> (0, 1) *
-      amp[959] + std::complex<double> (0, 1) * amp[958] + amp[962] - amp[960] +
-      std::complex<double> (0, 1) * amp[965] - std::complex<double> (0, 1) *
-      amp[963] + std::complex<double> (0, 1) * amp[971] - std::complex<double>
-      (0, 1) * amp[969] + amp[974] - amp[972] + std::complex<double> (0, 1) *
-      amp[977] - std::complex<double> (0, 1) * amp[975] + std::complex<double>
-      (0, 1) * amp[983] - std::complex<double> (0, 1) * amp[981];
-  jamp[13] = +amp[216] + amp[222] + amp[245] + amp[246] + amp[248] + amp[251] +
-      amp[252] + amp[254] - std::complex<double> (0, 1) * amp[256] -
-      std::complex<double> (0, 1) * amp[257] - std::complex<double> (0, 1) *
-      amp[258] - std::complex<double> (0, 1) * amp[259] - amp[289] -
-      std::complex<double> (0, 1) * amp[290] - amp[292] - amp[295] -
-      std::complex<double> (0, 1) * amp[296] - amp[298] + std::complex<double>
-      (0, 1) * amp[300] + amp[301] + std::complex<double> (0, 1) * amp[302] +
-      amp[304] + std::complex<double> (0, 1) * amp[305] + std::complex<double>
-      (0, 1) * amp[306] + amp[307] + std::complex<double> (0, 1) * amp[308] +
-      amp[310] + std::complex<double> (0, 1) * amp[311] + amp[312] + amp[313] +
-      amp[315] + amp[316] + amp[318] + amp[319] + amp[321] + amp[322] +
-      amp[497] + amp[503] + std::complex<double> (0, 1) * amp[505] + amp[506] +
-      std::complex<double> (0, 1) * amp[507] + amp[508] + std::complex<double>
-      (0, 1) * amp[509] + std::complex<double> (0, 1) * amp[511] + amp[512] +
-      std::complex<double> (0, 1) * amp[513] + amp[514] + std::complex<double>
-      (0, 1) * amp[515] - std::complex<double> (0, 1) * amp[516] + amp[518] +
-      amp[520] - std::complex<double> (0, 1) * amp[522] + amp[524] + amp[526] -
-      amp[542] - amp[541] - amp[545] - amp[544] - amp[548] - amp[547] -
-      amp[551] - amp[550] - std::complex<double> (0, 1) * amp[728] +
-      std::complex<double> (0, 1) * amp[730] + std::complex<double> (0, 1) *
-      amp[731] + std::complex<double> (0, 1) * amp[733] - std::complex<double>
-      (0, 1) * amp[737] + amp[738] + std::complex<double> (0, 1) * amp[739] +
-      std::complex<double> (0, 1) * amp[740] - std::complex<double> (0, 1) *
-      amp[746] + std::complex<double> (0, 1) * amp[748] + std::complex<double>
-      (0, 1) * amp[749] + std::complex<double> (0, 1) * amp[751] -
-      std::complex<double> (0, 1) * amp[755] + amp[756] + std::complex<double>
-      (0, 1) * amp[757] + std::complex<double> (0, 1) * amp[758] - amp[761] +
-      std::complex<double> (0, 1) * amp[762] - amp[763] + std::complex<double>
-      (0, 1) * amp[765] - amp[766] - amp[769] + std::complex<double> (0, 1) *
-      amp[770] - amp[771] + std::complex<double> (0, 1) * amp[773] - amp[774] -
-      std::complex<double> (0, 1) * amp[778] - amp[779] - std::complex<double>
-      (0, 1) * amp[780] + std::complex<double> (0, 1) * amp[784] +
-      std::complex<double> (0, 1) * amp[783] - std::complex<double> (0, 1) *
-      amp[787] - std::complex<double> (0, 1) * amp[789] + amp[790] +
-      std::complex<double> (0, 1) * amp[793] + std::complex<double> (0, 1) *
-      amp[792] - std::complex<double> (0, 1) * amp[796] - amp[797] -
-      std::complex<double> (0, 1) * amp[798] + std::complex<double> (0, 1) *
-      amp[802] + std::complex<double> (0, 1) * amp[801] - std::complex<double>
-      (0, 1) * amp[805] - std::complex<double> (0, 1) * amp[807] + amp[808] +
-      std::complex<double> (0, 1) * amp[811] + std::complex<double> (0, 1) *
-      amp[810] + std::complex<double> (0, 1) * amp[865] + std::complex<double>
-      (0, 1) * amp[866] + amp[867] - std::complex<double> (0, 1) * amp[872] -
-      std::complex<double> (0, 1) * amp[871] + std::complex<double> (0, 1) *
-      amp[875] - std::complex<double> (0, 1) * amp[881] - std::complex<double>
-      (0, 1) * amp[880] + std::complex<double> (0, 1) * amp[883] +
-      std::complex<double> (0, 1) * amp[884] + amp[885] - std::complex<double>
-      (0, 1) * amp[890] - std::complex<double> (0, 1) * amp[889] +
-      std::complex<double> (0, 1) * amp[893] - std::complex<double> (0, 1) *
-      amp[899] - std::complex<double> (0, 1) * amp[898] + amp[960] + amp[961] +
-      std::complex<double> (0, 1) * amp[963] + std::complex<double> (0, 1) *
-      amp[964] + std::complex<double> (0, 1) * amp[969] + std::complex<double>
-      (0, 1) * amp[970] + amp[972] + amp[973] + std::complex<double> (0, 1) *
-      amp[975] + std::complex<double> (0, 1) * amp[976] + std::complex<double>
-      (0, 1) * amp[981] + std::complex<double> (0, 1) * amp[982] +
-      std::complex<double> (0, 1) * amp[989] + std::complex<double> (0, 1) *
-      amp[988] - amp[992] - amp[991] + std::complex<double> (0, 1) * amp[995] +
-      std::complex<double> (0, 1) * amp[994] + std::complex<double> (0, 1) *
-      amp[1001] + std::complex<double> (0, 1) * amp[1000] - amp[1004] -
-      amp[1003] + std::complex<double> (0, 1) * amp[1007] +
-      std::complex<double> (0, 1) * amp[1006];
-  jamp[14] = +amp[219] + amp[225] + amp[260] + amp[263] + amp[265] + amp[266] +
-      amp[269] + amp[271] + std::complex<double> (0, 1) * amp[272] +
-      std::complex<double> (0, 1) * amp[273] + std::complex<double> (0, 1) *
-      amp[274] + std::complex<double> (0, 1) * amp[275] + amp[277] +
-      std::complex<double> (0, 1) * amp[278] + amp[280] + amp[283] +
-      std::complex<double> (0, 1) * amp[284] + amp[286] - std::complex<double>
-      (0, 1) * amp[288] + amp[289] - std::complex<double> (0, 1) * amp[291] +
-      amp[292] - std::complex<double> (0, 1) * amp[293] - std::complex<double>
-      (0, 1) * amp[294] + amp[295] - std::complex<double> (0, 1) * amp[297] +
-      amp[298] - std::complex<double> (0, 1) * amp[299] - amp[314] - amp[313] -
-      amp[317] - amp[316] - amp[320] - amp[319] - amp[323] - amp[322] +
-      amp[613] + amp[619] + std::complex<double> (0, 1) * amp[624] - amp[626] -
-      amp[628] + std::complex<double> (0, 1) * amp[630] - amp[632] - amp[634] +
-      std::complex<double> (0, 1) * amp[648] - amp[650] + std::complex<double>
-      (0, 1) * amp[651] - amp[652] + std::complex<double> (0, 1) * amp[653] +
-      std::complex<double> (0, 1) * amp[654] - amp[656] + std::complex<double>
-      (0, 1) * amp[657] - amp[658] + std::complex<double> (0, 1) * amp[659] +
-      amp[662] - amp[660] + amp[665] - amp[663] + amp[668] - amp[666] +
-      amp[671] - amp[669] + std::complex<double> (0, 1) * amp[674] +
-      std::complex<double> (0, 1) * amp[676] + amp[677] - std::complex<double>
-      (0, 1) * amp[680] - std::complex<double> (0, 1) * amp[679] +
-      std::complex<double> (0, 1) * amp[683] - amp[684] + std::complex<double>
-      (0, 1) * amp[685] - std::complex<double> (0, 1) * amp[689] -
-      std::complex<double> (0, 1) * amp[688] + std::complex<double> (0, 1) *
-      amp[692] + std::complex<double> (0, 1) * amp[694] + amp[695] -
-      std::complex<double> (0, 1) * amp[698] - std::complex<double> (0, 1) *
-      amp[697] + std::complex<double> (0, 1) * amp[701] - amp[702] +
-      std::complex<double> (0, 1) * amp[703] - std::complex<double> (0, 1) *
-      amp[707] - std::complex<double> (0, 1) * amp[706] - std::complex<double>
-      (0, 1) * amp[777] + std::complex<double> (0, 1) * amp[778] + amp[779] -
-      std::complex<double> (0, 1) * amp[784] + std::complex<double> (0, 1) *
-      amp[782] + std::complex<double> (0, 1) * amp[787] - std::complex<double>
-      (0, 1) * amp[793] + std::complex<double> (0, 1) * amp[791] -
-      std::complex<double> (0, 1) * amp[795] + std::complex<double> (0, 1) *
-      amp[796] + amp[797] - std::complex<double> (0, 1) * amp[802] +
-      std::complex<double> (0, 1) * amp[800] + std::complex<double> (0, 1) *
-      amp[805] - std::complex<double> (0, 1) * amp[811] + std::complex<double>
-      (0, 1) * amp[809] + amp[812] + std::complex<double> (0, 1) * amp[814] +
-      amp[816] + std::complex<double> (0, 1) * amp[817] + amp[819] + amp[820] +
-      std::complex<double> (0, 1) * amp[822] + amp[824] + std::complex<double>
-      (0, 1) * amp[825] + amp[827] + std::complex<double> (0, 1) * amp[830] -
-      std::complex<double> (0, 1) * amp[836] - std::complex<double> (0, 1) *
-      amp[835] + std::complex<double> (0, 1) * amp[838] + std::complex<double>
-      (0, 1) * amp[839] - amp[840] - std::complex<double> (0, 1) * amp[845] -
-      std::complex<double> (0, 1) * amp[844] + std::complex<double> (0, 1) *
-      amp[848] - std::complex<double> (0, 1) * amp[854] - std::complex<double>
-      (0, 1) * amp[853] + std::complex<double> (0, 1) * amp[856] +
-      std::complex<double> (0, 1) * amp[857] - amp[858] - std::complex<double>
-      (0, 1) * amp[863] - std::complex<double> (0, 1) * amp[862] -
-      std::complex<double> (0, 1) * amp[941] + std::complex<double> (0, 1) *
-      amp[939] + amp[944] - amp[942] - std::complex<double> (0, 1) * amp[947] +
-      std::complex<double> (0, 1) * amp[945] - std::complex<double> (0, 1) *
-      amp[953] + std::complex<double> (0, 1) * amp[951] + amp[956] - amp[954] -
-      std::complex<double> (0, 1) * amp[959] + std::complex<double> (0, 1) *
-      amp[957] - amp[962] - amp[961] - std::complex<double> (0, 1) * amp[965] -
-      std::complex<double> (0, 1) * amp[964] - std::complex<double> (0, 1) *
-      amp[971] - std::complex<double> (0, 1) * amp[970] - amp[974] - amp[973] -
-      std::complex<double> (0, 1) * amp[977] - std::complex<double> (0, 1) *
-      amp[976] - std::complex<double> (0, 1) * amp[983] - std::complex<double>
-      (0, 1) * amp[982];
-  jamp[15] = +amp[218] + amp[224] + amp[229] + amp[230] + amp[232] + amp[235] +
-      amp[236] + amp[238] - std::complex<double> (0, 1) * amp[240] -
-      std::complex<double> (0, 1) * amp[241] - std::complex<double> (0, 1) *
-      amp[242] - std::complex<double> (0, 1) * amp[243] + std::complex<double>
-      (0, 1) * amp[288] - amp[289] + std::complex<double> (0, 1) * amp[291] -
-      amp[292] + std::complex<double> (0, 1) * amp[293] + std::complex<double>
-      (0, 1) * amp[294] - amp[295] + std::complex<double> (0, 1) * amp[297] -
-      amp[298] + std::complex<double> (0, 1) * amp[299] + amp[301] -
-      std::complex<double> (0, 1) * amp[303] + amp[304] + amp[307] -
-      std::complex<double> (0, 1) * amp[309] + amp[310] + amp[312] + amp[313] +
-      amp[315] + amp[316] + amp[318] + amp[319] + amp[321] + amp[322] +
-      amp[437] + amp[443] + std::complex<double> (0, 1) * amp[445] + amp[446] +
-      std::complex<double> (0, 1) * amp[447] + amp[448] + std::complex<double>
-      (0, 1) * amp[449] + std::complex<double> (0, 1) * amp[451] + amp[452] +
-      std::complex<double> (0, 1) * amp[453] + amp[454] + std::complex<double>
-      (0, 1) * amp[455] - std::complex<double> (0, 1) * amp[456] + amp[458] +
-      amp[460] - std::complex<double> (0, 1) * amp[462] + amp[464] + amp[466] -
-      amp[482] - amp[481] - amp[485] - amp[484] - amp[488] - amp[487] -
-      amp[491] - amp[490] + std::complex<double> (0, 1) * amp[777] -
-      std::complex<double> (0, 1) * amp[778] - amp[779] + std::complex<double>
-      (0, 1) * amp[784] - std::complex<double> (0, 1) * amp[782] -
-      std::complex<double> (0, 1) * amp[787] + std::complex<double> (0, 1) *
-      amp[793] - std::complex<double> (0, 1) * amp[791] + std::complex<double>
-      (0, 1) * amp[795] - std::complex<double> (0, 1) * amp[796] - amp[797] +
-      std::complex<double> (0, 1) * amp[802] - std::complex<double> (0, 1) *
-      amp[800] - std::complex<double> (0, 1) * amp[805] + std::complex<double>
-      (0, 1) * amp[811] - std::complex<double> (0, 1) * amp[809] - amp[812] -
-      std::complex<double> (0, 1) * amp[814] - amp[816] - std::complex<double>
-      (0, 1) * amp[817] - amp[819] - amp[820] - std::complex<double> (0, 1) *
-      amp[822] - amp[824] - std::complex<double> (0, 1) * amp[825] - amp[827] +
-      std::complex<double> (0, 1) * amp[832] + std::complex<double> (0, 1) *
-      amp[834] + std::complex<double> (0, 1) * amp[835] + std::complex<double>
-      (0, 1) * amp[837] + std::complex<double> (0, 1) * amp[841] + amp[842] +
-      std::complex<double> (0, 1) * amp[843] + std::complex<double> (0, 1) *
-      amp[844] + std::complex<double> (0, 1) * amp[850] + std::complex<double>
-      (0, 1) * amp[852] + std::complex<double> (0, 1) * amp[853] +
-      std::complex<double> (0, 1) * amp[855] + std::complex<double> (0, 1) *
-      amp[859] + amp[860] + std::complex<double> (0, 1) * amp[861] +
-      std::complex<double> (0, 1) * amp[862] + std::complex<double> (0, 1) *
-      amp[866] + amp[867] + std::complex<double> (0, 1) * amp[868] -
-      std::complex<double> (0, 1) * amp[872] + std::complex<double> (0, 1) *
-      amp[870] + std::complex<double> (0, 1) * amp[875] + std::complex<double>
-      (0, 1) * amp[877] + amp[878] - std::complex<double> (0, 1) * amp[881] +
-      std::complex<double> (0, 1) * amp[879] + std::complex<double> (0, 1) *
-      amp[884] + amp[885] + std::complex<double> (0, 1) * amp[886] -
-      std::complex<double> (0, 1) * amp[890] + std::complex<double> (0, 1) *
-      amp[888] + std::complex<double> (0, 1) * amp[893] + std::complex<double>
-      (0, 1) * amp[895] + amp[896] - std::complex<double> (0, 1) * amp[899] +
-      std::complex<double> (0, 1) * amp[897] + amp[960] + amp[961] +
-      std::complex<double> (0, 1) * amp[963] + std::complex<double> (0, 1) *
-      amp[964] + std::complex<double> (0, 1) * amp[969] + std::complex<double>
-      (0, 1) * amp[970] + amp[972] + amp[973] + std::complex<double> (0, 1) *
-      amp[975] + std::complex<double> (0, 1) * amp[976] + std::complex<double>
-      (0, 1) * amp[981] + std::complex<double> (0, 1) * amp[982] -
-      std::complex<double> (0, 1) * amp[1013] - std::complex<double> (0, 1) *
-      amp[1012] - amp[1016] - amp[1015] - std::complex<double> (0, 1) *
-      amp[1019] - std::complex<double> (0, 1) * amp[1018] -
-      std::complex<double> (0, 1) * amp[1025] - std::complex<double> (0, 1) *
-      amp[1024] - amp[1028] - amp[1027] - std::complex<double> (0, 1) *
-      amp[1031] - std::complex<double> (0, 1) * amp[1030];
-  jamp[16] = +amp[221] + amp[227] + amp[244] + amp[247] + amp[249] + amp[250] +
-      amp[253] + amp[255] + std::complex<double> (0, 1) * amp[256] +
-      std::complex<double> (0, 1) * amp[257] + std::complex<double> (0, 1) *
-      amp[258] + std::complex<double> (0, 1) * amp[259] - std::complex<double>
-      (0, 1) * amp[276] + amp[277] - std::complex<double> (0, 1) * amp[279] +
-      amp[280] - std::complex<double> (0, 1) * amp[281] - std::complex<double>
-      (0, 1) * amp[282] + amp[283] - std::complex<double> (0, 1) * amp[285] +
-      amp[286] - std::complex<double> (0, 1) * amp[287] + amp[289] +
-      std::complex<double> (0, 1) * amp[290] + amp[292] + amp[295] +
-      std::complex<double> (0, 1) * amp[296] + amp[298] - amp[314] - amp[313] -
-      amp[317] - amp[316] - amp[320] - amp[319] - amp[323] - amp[322] +
-      amp[492] + amp[498] + std::complex<double> (0, 1) * amp[516] - amp[518] -
-      amp[520] + std::complex<double> (0, 1) * amp[522] - amp[524] - amp[526] -
-      std::complex<double> (0, 1) * amp[528] + amp[530] - std::complex<double>
-      (0, 1) * amp[531] + amp[532] - std::complex<double> (0, 1) * amp[533] -
-      std::complex<double> (0, 1) * amp[534] + amp[536] - std::complex<double>
-      (0, 1) * amp[537] + amp[538] - std::complex<double> (0, 1) * amp[539] +
-      amp[540] + amp[541] + amp[543] + amp[544] + amp[546] + amp[547] +
-      amp[549] + amp[550] - std::complex<double> (0, 1) * amp[672] +
-      std::complex<double> (0, 1) * amp[676] + amp[677] - std::complex<double>
-      (0, 1) * amp[678] - std::complex<double> (0, 1) * amp[679] +
-      std::complex<double> (0, 1) * amp[685] - std::complex<double> (0, 1) *
-      amp[687] - std::complex<double> (0, 1) * amp[688] - std::complex<double>
-      (0, 1) * amp[690] + std::complex<double> (0, 1) * amp[694] + amp[695] -
-      std::complex<double> (0, 1) * amp[696] - std::complex<double> (0, 1) *
-      amp[697] + std::complex<double> (0, 1) * amp[703] - std::complex<double>
-      (0, 1) * amp[705] - std::complex<double> (0, 1) * amp[706] - amp[708] -
-      std::complex<double> (0, 1) * amp[710] - amp[712] - std::complex<double>
-      (0, 1) * amp[713] - amp[715] - amp[716] - std::complex<double> (0, 1) *
-      amp[718] - amp[720] - std::complex<double> (0, 1) * amp[721] - amp[723] +
-      std::complex<double> (0, 1) * amp[778] + amp[779] + std::complex<double>
-      (0, 1) * amp[780] - std::complex<double> (0, 1) * amp[784] -
-      std::complex<double> (0, 1) * amp[783] + std::complex<double> (0, 1) *
-      amp[787] + std::complex<double> (0, 1) * amp[789] - amp[790] -
-      std::complex<double> (0, 1) * amp[793] - std::complex<double> (0, 1) *
-      amp[792] + std::complex<double> (0, 1) * amp[796] + amp[797] +
-      std::complex<double> (0, 1) * amp[798] - std::complex<double> (0, 1) *
-      amp[802] - std::complex<double> (0, 1) * amp[801] + std::complex<double>
-      (0, 1) * amp[805] + std::complex<double> (0, 1) * amp[807] - amp[808] -
-      std::complex<double> (0, 1) * amp[811] - std::complex<double> (0, 1) *
-      amp[810] - std::complex<double> (0, 1) * amp[902] + std::complex<double>
-      (0, 1) * amp[908] + std::complex<double> (0, 1) * amp[907] -
-      std::complex<double> (0, 1) * amp[910] - std::complex<double> (0, 1) *
-      amp[911] + amp[912] + std::complex<double> (0, 1) * amp[917] +
-      std::complex<double> (0, 1) * amp[916] - std::complex<double> (0, 1) *
-      amp[920] + std::complex<double> (0, 1) * amp[926] + std::complex<double>
-      (0, 1) * amp[925] - std::complex<double> (0, 1) * amp[928] -
-      std::complex<double> (0, 1) * amp[929] + amp[930] + std::complex<double>
-      (0, 1) * amp[935] + std::complex<double> (0, 1) * amp[934] - amp[962] -
-      amp[961] - std::complex<double> (0, 1) * amp[965] - std::complex<double>
-      (0, 1) * amp[964] - std::complex<double> (0, 1) * amp[971] -
-      std::complex<double> (0, 1) * amp[970] - amp[974] - amp[973] -
-      std::complex<double> (0, 1) * amp[977] - std::complex<double> (0, 1) *
-      amp[976] - std::complex<double> (0, 1) * amp[983] - std::complex<double>
-      (0, 1) * amp[982] - std::complex<double> (0, 1) * amp[987] -
-      std::complex<double> (0, 1) * amp[988] + amp[990] + amp[991] -
-      std::complex<double> (0, 1) * amp[993] - std::complex<double> (0, 1) *
-      amp[994] - std::complex<double> (0, 1) * amp[999] - std::complex<double>
-      (0, 1) * amp[1000] + amp[1002] + amp[1003] - std::complex<double> (0, 1)
-      * amp[1005] - std::complex<double> (0, 1) * amp[1006];
-  jamp[17] = +amp[220] + amp[226] + amp[228] + amp[231] + amp[233] + amp[234] +
-      amp[237] + amp[239] + std::complex<double> (0, 1) * amp[240] +
-      std::complex<double> (0, 1) * amp[241] + std::complex<double> (0, 1) *
-      amp[242] + std::complex<double> (0, 1) * amp[243] + std::complex<double>
-      (0, 1) * amp[276] - amp[277] + std::complex<double> (0, 1) * amp[279] -
-      amp[280] + std::complex<double> (0, 1) * amp[281] + std::complex<double>
-      (0, 1) * amp[282] - amp[283] + std::complex<double> (0, 1) * amp[285] -
-      amp[286] + std::complex<double> (0, 1) * amp[287] - amp[301] +
-      std::complex<double> (0, 1) * amp[303] - amp[304] - amp[307] +
-      std::complex<double> (0, 1) * amp[309] - amp[310] + amp[314] - amp[312] +
-      amp[317] - amp[315] + amp[320] - amp[318] + amp[323] - amp[321] +
-      amp[432] + amp[438] + std::complex<double> (0, 1) * amp[456] - amp[458] -
-      amp[460] + std::complex<double> (0, 1) * amp[462] - amp[464] - amp[466] -
-      std::complex<double> (0, 1) * amp[468] + amp[470] - std::complex<double>
-      (0, 1) * amp[471] + amp[472] - std::complex<double> (0, 1) * amp[473] -
-      std::complex<double> (0, 1) * amp[474] + amp[476] - std::complex<double>
-      (0, 1) * amp[477] + amp[478] - std::complex<double> (0, 1) * amp[479] +
-      amp[480] + amp[481] + amp[483] + amp[484] + amp[486] + amp[487] +
-      amp[489] + amp[490] + std::complex<double> (0, 1) * amp[672] -
-      std::complex<double> (0, 1) * amp[676] - amp[677] + std::complex<double>
-      (0, 1) * amp[678] + std::complex<double> (0, 1) * amp[679] -
-      std::complex<double> (0, 1) * amp[685] + std::complex<double> (0, 1) *
-      amp[687] + std::complex<double> (0, 1) * amp[688] + std::complex<double>
-      (0, 1) * amp[690] - std::complex<double> (0, 1) * amp[694] - amp[695] +
-      std::complex<double> (0, 1) * amp[696] + std::complex<double> (0, 1) *
-      amp[697] - std::complex<double> (0, 1) * amp[703] + std::complex<double>
-      (0, 1) * amp[705] + std::complex<double> (0, 1) * amp[706] + amp[708] +
-      std::complex<double> (0, 1) * amp[710] + amp[712] + std::complex<double>
-      (0, 1) * amp[713] + amp[715] + amp[716] + std::complex<double> (0, 1) *
-      amp[718] + amp[720] + std::complex<double> (0, 1) * amp[721] + amp[723] -
-      std::complex<double> (0, 1) * amp[866] - amp[867] - std::complex<double>
-      (0, 1) * amp[868] + std::complex<double> (0, 1) * amp[872] -
-      std::complex<double> (0, 1) * amp[870] - std::complex<double> (0, 1) *
-      amp[875] - std::complex<double> (0, 1) * amp[877] - amp[878] +
-      std::complex<double> (0, 1) * amp[881] - std::complex<double> (0, 1) *
-      amp[879] - std::complex<double> (0, 1) * amp[884] - amp[885] -
-      std::complex<double> (0, 1) * amp[886] + std::complex<double> (0, 1) *
-      amp[890] - std::complex<double> (0, 1) * amp[888] - std::complex<double>
-      (0, 1) * amp[893] - std::complex<double> (0, 1) * amp[895] - amp[896] +
-      std::complex<double> (0, 1) * amp[899] - std::complex<double> (0, 1) *
-      amp[897] + std::complex<double> (0, 1) * amp[904] - std::complex<double>
-      (0, 1) * amp[908] + std::complex<double> (0, 1) * amp[906] -
-      std::complex<double> (0, 1) * amp[909] + std::complex<double> (0, 1) *
-      amp[913] + amp[914] - std::complex<double> (0, 1) * amp[917] +
-      std::complex<double> (0, 1) * amp[915] + std::complex<double> (0, 1) *
-      amp[922] - std::complex<double> (0, 1) * amp[926] + std::complex<double>
-      (0, 1) * amp[924] - std::complex<double> (0, 1) * amp[927] +
-      std::complex<double> (0, 1) * amp[931] + amp[932] - std::complex<double>
-      (0, 1) * amp[935] + std::complex<double> (0, 1) * amp[933] + amp[962] -
-      amp[960] + std::complex<double> (0, 1) * amp[965] - std::complex<double>
-      (0, 1) * amp[963] + std::complex<double> (0, 1) * amp[971] -
-      std::complex<double> (0, 1) * amp[969] + amp[974] - amp[972] +
-      std::complex<double> (0, 1) * amp[977] - std::complex<double> (0, 1) *
-      amp[975] + std::complex<double> (0, 1) * amp[983] - std::complex<double>
-      (0, 1) * amp[981] + std::complex<double> (0, 1) * amp[1011] +
-      std::complex<double> (0, 1) * amp[1012] + amp[1014] + amp[1015] +
-      std::complex<double> (0, 1) * amp[1017] + std::complex<double> (0, 1) *
-      amp[1018] + std::complex<double> (0, 1) * amp[1023] +
-      std::complex<double> (0, 1) * amp[1024] + amp[1026] + amp[1027] +
-      std::complex<double> (0, 1) * amp[1029] + std::complex<double> (0, 1) *
-      amp[1030];
-  jamp[18] = +amp[325] + amp[331] + amp[369] + amp[370] + amp[372] + amp[375] +
-      amp[376] + amp[378] - std::complex<double> (0, 1) * amp[380] -
-      std::complex<double> (0, 1) * amp[381] - std::complex<double> (0, 1) *
-      amp[382] - std::complex<double> (0, 1) * amp[383] - amp[385] -
-      std::complex<double> (0, 1) * amp[386] - amp[388] - amp[391] -
-      std::complex<double> (0, 1) * amp[392] - amp[394] - std::complex<double>
-      (0, 1) * amp[408] - amp[409] - std::complex<double> (0, 1) * amp[410] -
-      amp[412] - std::complex<double> (0, 1) * amp[413] - std::complex<double>
-      (0, 1) * amp[414] - amp[415] - std::complex<double> (0, 1) * amp[416] -
-      amp[418] - std::complex<double> (0, 1) * amp[419] + amp[422] - amp[420] +
-      amp[425] - amp[423] + amp[428] - amp[426] + amp[431] - amp[429] +
-      amp[555] + amp[561] - std::complex<double> (0, 1) * amp[564] + amp[566] +
-      amp[568] - std::complex<double> (0, 1) * amp[570] + amp[572] + amp[574] +
-      std::complex<double> (0, 1) * amp[577] + amp[578] + std::complex<double>
-      (0, 1) * amp[579] + amp[580] + std::complex<double> (0, 1) * amp[581] +
-      std::complex<double> (0, 1) * amp[583] + amp[584] + std::complex<double>
-      (0, 1) * amp[585] + amp[586] + std::complex<double> (0, 1) * amp[587] -
-      amp[602] - amp[601] - amp[605] - amp[604] - amp[608] - amp[607] -
-      amp[611] - amp[610] - std::complex<double> (0, 1) * amp[674] - amp[675] -
-      std::complex<double> (0, 1) * amp[676] + std::complex<double> (0, 1) *
-      amp[680] + std::complex<double> (0, 1) * amp[679] - std::complex<double>
-      (0, 1) * amp[683] - std::complex<double> (0, 1) * amp[685] + amp[686] +
-      std::complex<double> (0, 1) * amp[689] + std::complex<double> (0, 1) *
-      amp[688] - std::complex<double> (0, 1) * amp[692] - amp[693] -
-      std::complex<double> (0, 1) * amp[694] + std::complex<double> (0, 1) *
-      amp[698] + std::complex<double> (0, 1) * amp[697] - std::complex<double>
-      (0, 1) * amp[701] - std::complex<double> (0, 1) * amp[703] + amp[704] +
-      std::complex<double> (0, 1) * amp[707] + std::complex<double> (0, 1) *
-      amp[706] - std::complex<double> (0, 1) * amp[778] + std::complex<double>
-      (0, 1) * amp[784] - std::complex<double> (0, 1) * amp[782] +
-      std::complex<double> (0, 1) * amp[786] - std::complex<double> (0, 1) *
-      amp[787] + amp[788] + std::complex<double> (0, 1) * amp[793] -
-      std::complex<double> (0, 1) * amp[791] - std::complex<double> (0, 1) *
-      amp[796] + std::complex<double> (0, 1) * amp[802] - std::complex<double>
-      (0, 1) * amp[800] + std::complex<double> (0, 1) * amp[804] -
-      std::complex<double> (0, 1) * amp[805] + amp[806] + std::complex<double>
-      (0, 1) * amp[811] - std::complex<double> (0, 1) * amp[809] + amp[813] -
-      std::complex<double> (0, 1) * amp[814] + amp[815] - std::complex<double>
-      (0, 1) * amp[817] + amp[818] + amp[821] - std::complex<double> (0, 1) *
-      amp[822] + amp[823] - std::complex<double> (0, 1) * amp[825] + amp[826] -
-      std::complex<double> (0, 1) * amp[829] - std::complex<double> (0, 1) *
-      amp[830] - amp[831] + std::complex<double> (0, 1) * amp[836] +
-      std::complex<double> (0, 1) * amp[835] - std::complex<double> (0, 1) *
-      amp[839] + std::complex<double> (0, 1) * amp[845] + std::complex<double>
-      (0, 1) * amp[844] - std::complex<double> (0, 1) * amp[847] -
-      std::complex<double> (0, 1) * amp[848] - amp[849] + std::complex<double>
-      (0, 1) * amp[854] + std::complex<double> (0, 1) * amp[853] -
-      std::complex<double> (0, 1) * amp[857] + std::complex<double> (0, 1) *
-      amp[863] + std::complex<double> (0, 1) * amp[862] + amp[938] - amp[936] +
-      std::complex<double> (0, 1) * amp[941] - std::complex<double> (0, 1) *
-      amp[939] + std::complex<double> (0, 1) * amp[947] - std::complex<double>
-      (0, 1) * amp[945] + amp[950] - amp[948] + std::complex<double> (0, 1) *
-      amp[953] - std::complex<double> (0, 1) * amp[951] + std::complex<double>
-      (0, 1) * amp[959] - std::complex<double> (0, 1) * amp[957] +
-      std::complex<double> (0, 1) * amp[965] + std::complex<double> (0, 1) *
-      amp[964] - amp[968] - amp[967] + std::complex<double> (0, 1) * amp[971] +
-      std::complex<double> (0, 1) * amp[970] + std::complex<double> (0, 1) *
-      amp[977] + std::complex<double> (0, 1) * amp[976] - amp[980] - amp[979] +
-      std::complex<double> (0, 1) * amp[983] + std::complex<double> (0, 1) *
-      amp[982];
-  jamp[19] = +amp[324] + amp[330] + amp[353] + amp[354] + amp[356] + amp[359] +
-      amp[360] + amp[362] - std::complex<double> (0, 1) * amp[364] -
-      std::complex<double> (0, 1) * amp[365] - std::complex<double> (0, 1) *
-      amp[366] - std::complex<double> (0, 1) * amp[367] - amp[397] -
-      std::complex<double> (0, 1) * amp[398] - amp[400] - amp[403] -
-      std::complex<double> (0, 1) * amp[404] - amp[406] + std::complex<double>
-      (0, 1) * amp[408] + amp[409] + std::complex<double> (0, 1) * amp[410] +
-      amp[412] + std::complex<double> (0, 1) * amp[413] + std::complex<double>
-      (0, 1) * amp[414] + amp[415] + std::complex<double> (0, 1) * amp[416] +
-      amp[418] + std::complex<double> (0, 1) * amp[419] + amp[420] + amp[421] +
-      amp[423] + amp[424] + amp[426] + amp[427] + amp[429] + amp[430] +
-      amp[495] + amp[501] - std::complex<double> (0, 1) * amp[504] + amp[506] +
-      amp[508] - std::complex<double> (0, 1) * amp[510] + amp[512] + amp[514] +
-      std::complex<double> (0, 1) * amp[517] + amp[518] + std::complex<double>
-      (0, 1) * amp[519] + amp[520] + std::complex<double> (0, 1) * amp[521] +
-      std::complex<double> (0, 1) * amp[523] + amp[524] + std::complex<double>
-      (0, 1) * amp[525] + amp[526] + std::complex<double> (0, 1) * amp[527] -
-      amp[542] - amp[541] - amp[545] - amp[544] - amp[548] - amp[547] -
-      amp[551] - amp[550] - std::complex<double> (0, 1) * amp[726] - amp[727] -
-      std::complex<double> (0, 1) * amp[728] + std::complex<double> (0, 1) *
-      amp[732] + std::complex<double> (0, 1) * amp[731] - std::complex<double>
-      (0, 1) * amp[735] - std::complex<double> (0, 1) * amp[737] + amp[738] +
-      std::complex<double> (0, 1) * amp[741] + std::complex<double> (0, 1) *
-      amp[740] - std::complex<double> (0, 1) * amp[744] - amp[745] -
-      std::complex<double> (0, 1) * amp[746] + std::complex<double> (0, 1) *
-      amp[750] + std::complex<double> (0, 1) * amp[749] - std::complex<double>
-      (0, 1) * amp[753] - std::complex<double> (0, 1) * amp[755] + amp[756] +
-      std::complex<double> (0, 1) * amp[759] + std::complex<double> (0, 1) *
-      amp[758] - std::complex<double> (0, 1) * amp[780] + std::complex<double>
-      (0, 1) * amp[782] + std::complex<double> (0, 1) * amp[783] +
-      std::complex<double> (0, 1) * amp[785] - std::complex<double> (0, 1) *
-      amp[789] + amp[790] + std::complex<double> (0, 1) * amp[791] +
-      std::complex<double> (0, 1) * amp[792] - std::complex<double> (0, 1) *
-      amp[798] + std::complex<double> (0, 1) * amp[800] + std::complex<double>
-      (0, 1) * amp[801] + std::complex<double> (0, 1) * amp[803] -
-      std::complex<double> (0, 1) * amp[807] + amp[808] + std::complex<double>
-      (0, 1) * amp[809] + std::complex<double> (0, 1) * amp[810] - amp[813] +
-      std::complex<double> (0, 1) * amp[814] - amp[815] + std::complex<double>
-      (0, 1) * amp[817] - amp[818] - amp[821] + std::complex<double> (0, 1) *
-      amp[822] - amp[823] + std::complex<double> (0, 1) * amp[825] - amp[826] +
-      std::complex<double> (0, 1) * amp[829] + std::complex<double> (0, 1) *
-      amp[830] + amp[831] - std::complex<double> (0, 1) * amp[836] -
-      std::complex<double> (0, 1) * amp[835] + std::complex<double> (0, 1) *
-      amp[839] - std::complex<double> (0, 1) * amp[845] - std::complex<double>
-      (0, 1) * amp[844] + std::complex<double> (0, 1) * amp[847] +
-      std::complex<double> (0, 1) * amp[848] + amp[849] - std::complex<double>
-      (0, 1) * amp[854] - std::complex<double> (0, 1) * amp[853] +
-      std::complex<double> (0, 1) * amp[857] - std::complex<double> (0, 1) *
-      amp[863] - std::complex<double> (0, 1) * amp[862] + amp[936] + amp[937] +
-      std::complex<double> (0, 1) * amp[939] + std::complex<double> (0, 1) *
-      amp[940] + std::complex<double> (0, 1) * amp[945] + std::complex<double>
-      (0, 1) * amp[946] + amp[948] + amp[949] + std::complex<double> (0, 1) *
-      amp[951] + std::complex<double> (0, 1) * amp[952] + std::complex<double>
-      (0, 1) * amp[957] + std::complex<double> (0, 1) * amp[958] +
-      std::complex<double> (0, 1) * amp[989] + std::complex<double> (0, 1) *
-      amp[988] - amp[992] - amp[991] + std::complex<double> (0, 1) * amp[995] +
-      std::complex<double> (0, 1) * amp[994] + std::complex<double> (0, 1) *
-      amp[1001] + std::complex<double> (0, 1) * amp[1000] - amp[1004] -
-      amp[1003] + std::complex<double> (0, 1) * amp[1007] +
-      std::complex<double> (0, 1) * amp[1006];
-  jamp[20] = +amp[327] + amp[333] + amp[368] + amp[371] + amp[373] + amp[374] +
-      amp[377] + amp[379] + std::complex<double> (0, 1) * amp[380] +
-      std::complex<double> (0, 1) * amp[381] + std::complex<double> (0, 1) *
-      amp[382] + std::complex<double> (0, 1) * amp[383] + amp[385] +
-      std::complex<double> (0, 1) * amp[386] + amp[388] + amp[391] +
-      std::complex<double> (0, 1) * amp[392] + amp[394] - std::complex<double>
-      (0, 1) * amp[396] + amp[397] - std::complex<double> (0, 1) * amp[399] +
-      amp[400] - std::complex<double> (0, 1) * amp[401] - std::complex<double>
-      (0, 1) * amp[402] + amp[403] - std::complex<double> (0, 1) * amp[405] +
-      amp[406] - std::complex<double> (0, 1) * amp[407] - amp[422] - amp[421] -
-      amp[425] - amp[424] - amp[428] - amp[427] - amp[431] - amp[430] +
-      amp[553] + amp[559] + std::complex<double> (0, 1) * amp[564] - amp[566] -
-      amp[568] + std::complex<double> (0, 1) * amp[570] - amp[572] - amp[574] +
-      std::complex<double> (0, 1) * amp[588] - amp[590] + std::complex<double>
-      (0, 1) * amp[591] - amp[592] + std::complex<double> (0, 1) * amp[593] +
-      std::complex<double> (0, 1) * amp[594] - amp[596] + std::complex<double>
-      (0, 1) * amp[597] - amp[598] + std::complex<double> (0, 1) * amp[599] +
-      amp[602] - amp[600] + amp[605] - amp[603] + amp[608] - amp[606] +
-      amp[611] - amp[609] + std::complex<double> (0, 1) * amp[674] + amp[675] +
-      std::complex<double> (0, 1) * amp[676] - std::complex<double> (0, 1) *
-      amp[680] - std::complex<double> (0, 1) * amp[679] + std::complex<double>
-      (0, 1) * amp[683] + std::complex<double> (0, 1) * amp[685] - amp[686] -
-      std::complex<double> (0, 1) * amp[689] - std::complex<double> (0, 1) *
-      amp[688] + std::complex<double> (0, 1) * amp[692] + amp[693] +
-      std::complex<double> (0, 1) * amp[694] - std::complex<double> (0, 1) *
-      amp[698] - std::complex<double> (0, 1) * amp[697] + std::complex<double>
-      (0, 1) * amp[701] + std::complex<double> (0, 1) * amp[703] - amp[704] -
-      std::complex<double> (0, 1) * amp[707] - std::complex<double> (0, 1) *
-      amp[706] - std::complex<double> (0, 1) * amp[725] + std::complex<double>
-      (0, 1) * amp[726] + amp[727] - std::complex<double> (0, 1) * amp[732] +
-      std::complex<double> (0, 1) * amp[730] + std::complex<double> (0, 1) *
-      amp[735] - std::complex<double> (0, 1) * amp[741] + std::complex<double>
-      (0, 1) * amp[739] - std::complex<double> (0, 1) * amp[743] +
-      std::complex<double> (0, 1) * amp[744] + amp[745] - std::complex<double>
-      (0, 1) * amp[750] + std::complex<double> (0, 1) * amp[748] +
-      std::complex<double> (0, 1) * amp[753] - std::complex<double> (0, 1) *
-      amp[759] + std::complex<double> (0, 1) * amp[757] + amp[760] +
-      std::complex<double> (0, 1) * amp[762] + amp[764] + std::complex<double>
-      (0, 1) * amp[765] + amp[767] + amp[768] + std::complex<double> (0, 1) *
-      amp[770] + amp[772] + std::complex<double> (0, 1) * amp[773] + amp[775] +
-      std::complex<double> (0, 1) * amp[866] - std::complex<double> (0, 1) *
-      amp[872] - std::complex<double> (0, 1) * amp[871] + std::complex<double>
-      (0, 1) * amp[874] + std::complex<double> (0, 1) * amp[875] - amp[876] -
-      std::complex<double> (0, 1) * amp[881] - std::complex<double> (0, 1) *
-      amp[880] + std::complex<double> (0, 1) * amp[884] - std::complex<double>
-      (0, 1) * amp[890] - std::complex<double> (0, 1) * amp[889] +
-      std::complex<double> (0, 1) * amp[892] + std::complex<double> (0, 1) *
-      amp[893] - amp[894] - std::complex<double> (0, 1) * amp[899] -
-      std::complex<double> (0, 1) * amp[898] - amp[938] - amp[937] -
-      std::complex<double> (0, 1) * amp[941] - std::complex<double> (0, 1) *
-      amp[940] - std::complex<double> (0, 1) * amp[947] - std::complex<double>
-      (0, 1) * amp[946] - amp[950] - amp[949] - std::complex<double> (0, 1) *
-      amp[953] - std::complex<double> (0, 1) * amp[952] - std::complex<double>
-      (0, 1) * amp[959] - std::complex<double> (0, 1) * amp[958] -
-      std::complex<double> (0, 1) * amp[965] + std::complex<double> (0, 1) *
-      amp[963] + amp[968] - amp[966] - std::complex<double> (0, 1) * amp[971] +
-      std::complex<double> (0, 1) * amp[969] - std::complex<double> (0, 1) *
-      amp[977] + std::complex<double> (0, 1) * amp[975] + amp[980] - amp[978] -
-      std::complex<double> (0, 1) * amp[983] + std::complex<double> (0, 1) *
-      amp[981];
-  jamp[21] = +amp[326] + amp[332] + amp[337] + amp[338] + amp[340] + amp[343] +
-      amp[344] + amp[346] - std::complex<double> (0, 1) * amp[348] -
-      std::complex<double> (0, 1) * amp[349] - std::complex<double> (0, 1) *
-      amp[350] - std::complex<double> (0, 1) * amp[351] + std::complex<double>
-      (0, 1) * amp[396] - amp[397] + std::complex<double> (0, 1) * amp[399] -
-      amp[400] + std::complex<double> (0, 1) * amp[401] + std::complex<double>
-      (0, 1) * amp[402] - amp[403] + std::complex<double> (0, 1) * amp[405] -
-      amp[406] + std::complex<double> (0, 1) * amp[407] + amp[409] -
-      std::complex<double> (0, 1) * amp[411] + amp[412] + amp[415] -
-      std::complex<double> (0, 1) * amp[417] + amp[418] + amp[420] + amp[421] +
-      amp[423] + amp[424] + amp[426] + amp[427] + amp[429] + amp[430] +
-      amp[435] + amp[441] - std::complex<double> (0, 1) * amp[444] + amp[446] +
-      amp[448] - std::complex<double> (0, 1) * amp[450] + amp[452] + amp[454] +
-      std::complex<double> (0, 1) * amp[457] + amp[458] + std::complex<double>
-      (0, 1) * amp[459] + amp[460] + std::complex<double> (0, 1) * amp[461] +
-      std::complex<double> (0, 1) * amp[463] + amp[464] + std::complex<double>
-      (0, 1) * amp[465] + amp[466] + std::complex<double> (0, 1) * amp[467] -
-      amp[482] - amp[481] - amp[485] - amp[484] - amp[488] - amp[487] -
-      amp[491] - amp[490] + std::complex<double> (0, 1) * amp[725] -
-      std::complex<double> (0, 1) * amp[726] - amp[727] + std::complex<double>
-      (0, 1) * amp[732] - std::complex<double> (0, 1) * amp[730] -
-      std::complex<double> (0, 1) * amp[735] + std::complex<double> (0, 1) *
-      amp[741] - std::complex<double> (0, 1) * amp[739] + std::complex<double>
-      (0, 1) * amp[743] - std::complex<double> (0, 1) * amp[744] - amp[745] +
-      std::complex<double> (0, 1) * amp[750] - std::complex<double> (0, 1) *
-      amp[748] - std::complex<double> (0, 1) * amp[753] + std::complex<double>
-      (0, 1) * amp[759] - std::complex<double> (0, 1) * amp[757] - amp[760] -
-      std::complex<double> (0, 1) * amp[762] - amp[764] - std::complex<double>
-      (0, 1) * amp[765] - amp[767] - amp[768] - std::complex<double> (0, 1) *
-      amp[770] - amp[772] - std::complex<double> (0, 1) * amp[773] - amp[775] +
-      std::complex<double> (0, 1) * amp[830] + amp[831] + std::complex<double>
-      (0, 1) * amp[832] - std::complex<double> (0, 1) * amp[836] +
-      std::complex<double> (0, 1) * amp[834] + std::complex<double> (0, 1) *
-      amp[839] + std::complex<double> (0, 1) * amp[841] + amp[842] -
-      std::complex<double> (0, 1) * amp[845] + std::complex<double> (0, 1) *
-      amp[843] + std::complex<double> (0, 1) * amp[848] + amp[849] +
-      std::complex<double> (0, 1) * amp[850] - std::complex<double> (0, 1) *
-      amp[854] + std::complex<double> (0, 1) * amp[852] + std::complex<double>
-      (0, 1) * amp[857] + std::complex<double> (0, 1) * amp[859] + amp[860] -
-      std::complex<double> (0, 1) * amp[863] + std::complex<double> (0, 1) *
-      amp[861] + std::complex<double> (0, 1) * amp[868] + std::complex<double>
-      (0, 1) * amp[870] + std::complex<double> (0, 1) * amp[871] +
-      std::complex<double> (0, 1) * amp[873] + std::complex<double> (0, 1) *
-      amp[877] + amp[878] + std::complex<double> (0, 1) * amp[879] +
-      std::complex<double> (0, 1) * amp[880] + std::complex<double> (0, 1) *
-      amp[886] + std::complex<double> (0, 1) * amp[888] + std::complex<double>
-      (0, 1) * amp[889] + std::complex<double> (0, 1) * amp[891] +
-      std::complex<double> (0, 1) * amp[895] + amp[896] + std::complex<double>
-      (0, 1) * amp[897] + std::complex<double> (0, 1) * amp[898] + amp[936] +
-      amp[937] + std::complex<double> (0, 1) * amp[939] + std::complex<double>
-      (0, 1) * amp[940] + std::complex<double> (0, 1) * amp[945] +
-      std::complex<double> (0, 1) * amp[946] + amp[948] + amp[949] +
-      std::complex<double> (0, 1) * amp[951] + std::complex<double> (0, 1) *
-      amp[952] + std::complex<double> (0, 1) * amp[957] + std::complex<double>
-      (0, 1) * amp[958] - std::complex<double> (0, 1) * amp[1013] -
-      std::complex<double> (0, 1) * amp[1012] - amp[1016] - amp[1015] -
-      std::complex<double> (0, 1) * amp[1019] - std::complex<double> (0, 1) *
-      amp[1018] - std::complex<double> (0, 1) * amp[1025] -
-      std::complex<double> (0, 1) * amp[1024] - amp[1028] - amp[1027] -
-      std::complex<double> (0, 1) * amp[1031] - std::complex<double> (0, 1) *
-      amp[1030];
-  jamp[22] = +amp[329] + amp[335] + amp[352] + amp[355] + amp[357] + amp[358] +
-      amp[361] + amp[363] + std::complex<double> (0, 1) * amp[364] +
-      std::complex<double> (0, 1) * amp[365] + std::complex<double> (0, 1) *
-      amp[366] + std::complex<double> (0, 1) * amp[367] - std::complex<double>
-      (0, 1) * amp[384] + amp[385] - std::complex<double> (0, 1) * amp[387] +
-      amp[388] - std::complex<double> (0, 1) * amp[389] - std::complex<double>
-      (0, 1) * amp[390] + amp[391] - std::complex<double> (0, 1) * amp[393] +
-      amp[394] - std::complex<double> (0, 1) * amp[395] + amp[397] +
-      std::complex<double> (0, 1) * amp[398] + amp[400] + amp[403] +
-      std::complex<double> (0, 1) * amp[404] + amp[406] - amp[422] - amp[421] -
-      amp[425] - amp[424] - amp[428] - amp[427] - amp[431] - amp[430] +
-      amp[493] + amp[499] + std::complex<double> (0, 1) * amp[504] - amp[506] -
-      amp[508] + std::complex<double> (0, 1) * amp[510] - amp[512] - amp[514] +
-      std::complex<double> (0, 1) * amp[528] - amp[530] + std::complex<double>
-      (0, 1) * amp[531] - amp[532] + std::complex<double> (0, 1) * amp[533] +
-      std::complex<double> (0, 1) * amp[534] - amp[536] + std::complex<double>
-      (0, 1) * amp[537] - amp[538] + std::complex<double> (0, 1) * amp[539] +
-      amp[542] - amp[540] + amp[545] - amp[543] + amp[548] - amp[546] +
-      amp[551] - amp[549] - std::complex<double> (0, 1) * amp[673] +
-      std::complex<double> (0, 1) * amp[674] + amp[675] - std::complex<double>
-      (0, 1) * amp[680] + std::complex<double> (0, 1) * amp[678] +
-      std::complex<double> (0, 1) * amp[683] - std::complex<double> (0, 1) *
-      amp[689] + std::complex<double> (0, 1) * amp[687] - std::complex<double>
-      (0, 1) * amp[691] + std::complex<double> (0, 1) * amp[692] + amp[693] -
-      std::complex<double> (0, 1) * amp[698] + std::complex<double> (0, 1) *
-      amp[696] + std::complex<double> (0, 1) * amp[701] - std::complex<double>
-      (0, 1) * amp[707] + std::complex<double> (0, 1) * amp[705] + amp[708] +
-      std::complex<double> (0, 1) * amp[710] + amp[712] + std::complex<double>
-      (0, 1) * amp[713] + amp[715] + amp[716] + std::complex<double> (0, 1) *
-      amp[718] + amp[720] + std::complex<double> (0, 1) * amp[721] + amp[723] +
-      std::complex<double> (0, 1) * amp[726] + amp[727] + std::complex<double>
-      (0, 1) * amp[728] - std::complex<double> (0, 1) * amp[732] -
-      std::complex<double> (0, 1) * amp[731] + std::complex<double> (0, 1) *
-      amp[735] + std::complex<double> (0, 1) * amp[737] - amp[738] -
-      std::complex<double> (0, 1) * amp[741] - std::complex<double> (0, 1) *
-      amp[740] + std::complex<double> (0, 1) * amp[744] + amp[745] +
-      std::complex<double> (0, 1) * amp[746] - std::complex<double> (0, 1) *
-      amp[750] - std::complex<double> (0, 1) * amp[749] + std::complex<double>
-      (0, 1) * amp[753] + std::complex<double> (0, 1) * amp[755] - amp[756] -
-      std::complex<double> (0, 1) * amp[759] - std::complex<double> (0, 1) *
-      amp[758] + std::complex<double> (0, 1) * amp[902] - std::complex<double>
-      (0, 1) * amp[908] - std::complex<double> (0, 1) * amp[907] +
-      std::complex<double> (0, 1) * amp[910] + std::complex<double> (0, 1) *
-      amp[911] - amp[912] - std::complex<double> (0, 1) * amp[917] -
-      std::complex<double> (0, 1) * amp[916] + std::complex<double> (0, 1) *
-      amp[920] - std::complex<double> (0, 1) * amp[926] - std::complex<double>
-      (0, 1) * amp[925] + std::complex<double> (0, 1) * amp[928] +
-      std::complex<double> (0, 1) * amp[929] - amp[930] - std::complex<double>
-      (0, 1) * amp[935] - std::complex<double> (0, 1) * amp[934] - amp[938] -
-      amp[937] - std::complex<double> (0, 1) * amp[941] - std::complex<double>
-      (0, 1) * amp[940] - std::complex<double> (0, 1) * amp[947] -
-      std::complex<double> (0, 1) * amp[946] - amp[950] - amp[949] -
-      std::complex<double> (0, 1) * amp[953] - std::complex<double> (0, 1) *
-      amp[952] - std::complex<double> (0, 1) * amp[959] - std::complex<double>
-      (0, 1) * amp[958] - std::complex<double> (0, 1) * amp[989] +
-      std::complex<double> (0, 1) * amp[987] + amp[992] - amp[990] -
-      std::complex<double> (0, 1) * amp[995] + std::complex<double> (0, 1) *
-      amp[993] - std::complex<double> (0, 1) * amp[1001] + std::complex<double>
-      (0, 1) * amp[999] + amp[1004] - amp[1002] - std::complex<double> (0, 1) *
-      amp[1007] + std::complex<double> (0, 1) * amp[1005];
-  jamp[23] = +amp[328] + amp[334] + amp[336] + amp[339] + amp[341] + amp[342] +
-      amp[345] + amp[347] + std::complex<double> (0, 1) * amp[348] +
-      std::complex<double> (0, 1) * amp[349] + std::complex<double> (0, 1) *
-      amp[350] + std::complex<double> (0, 1) * amp[351] + std::complex<double>
-      (0, 1) * amp[384] - amp[385] + std::complex<double> (0, 1) * amp[387] -
-      amp[388] + std::complex<double> (0, 1) * amp[389] + std::complex<double>
-      (0, 1) * amp[390] - amp[391] + std::complex<double> (0, 1) * amp[393] -
-      amp[394] + std::complex<double> (0, 1) * amp[395] - amp[409] +
-      std::complex<double> (0, 1) * amp[411] - amp[412] - amp[415] +
-      std::complex<double> (0, 1) * amp[417] - amp[418] + amp[422] - amp[420] +
-      amp[425] - amp[423] + amp[428] - amp[426] + amp[431] - amp[429] +
-      amp[433] + amp[439] + std::complex<double> (0, 1) * amp[444] - amp[446] -
-      amp[448] + std::complex<double> (0, 1) * amp[450] - amp[452] - amp[454] +
-      std::complex<double> (0, 1) * amp[468] - amp[470] + std::complex<double>
-      (0, 1) * amp[471] - amp[472] + std::complex<double> (0, 1) * amp[473] +
-      std::complex<double> (0, 1) * amp[474] - amp[476] + std::complex<double>
-      (0, 1) * amp[477] - amp[478] + std::complex<double> (0, 1) * amp[479] +
-      amp[482] - amp[480] + amp[485] - amp[483] + amp[488] - amp[486] +
-      amp[491] - amp[489] + std::complex<double> (0, 1) * amp[673] -
-      std::complex<double> (0, 1) * amp[674] - amp[675] + std::complex<double>
-      (0, 1) * amp[680] - std::complex<double> (0, 1) * amp[678] -
-      std::complex<double> (0, 1) * amp[683] + std::complex<double> (0, 1) *
-      amp[689] - std::complex<double> (0, 1) * amp[687] + std::complex<double>
-      (0, 1) * amp[691] - std::complex<double> (0, 1) * amp[692] - amp[693] +
-      std::complex<double> (0, 1) * amp[698] - std::complex<double> (0, 1) *
-      amp[696] - std::complex<double> (0, 1) * amp[701] + std::complex<double>
-      (0, 1) * amp[707] - std::complex<double> (0, 1) * amp[705] - amp[708] -
-      std::complex<double> (0, 1) * amp[710] - amp[712] - std::complex<double>
-      (0, 1) * amp[713] - amp[715] - amp[716] - std::complex<double> (0, 1) *
-      amp[718] - amp[720] - std::complex<double> (0, 1) * amp[721] - amp[723] -
-      std::complex<double> (0, 1) * amp[830] - amp[831] - std::complex<double>
-      (0, 1) * amp[832] + std::complex<double> (0, 1) * amp[836] -
-      std::complex<double> (0, 1) * amp[834] - std::complex<double> (0, 1) *
-      amp[839] - std::complex<double> (0, 1) * amp[841] - amp[842] +
-      std::complex<double> (0, 1) * amp[845] - std::complex<double> (0, 1) *
-      amp[843] - std::complex<double> (0, 1) * amp[848] - amp[849] -
-      std::complex<double> (0, 1) * amp[850] + std::complex<double> (0, 1) *
-      amp[854] - std::complex<double> (0, 1) * amp[852] - std::complex<double>
-      (0, 1) * amp[857] - std::complex<double> (0, 1) * amp[859] - amp[860] +
-      std::complex<double> (0, 1) * amp[863] - std::complex<double> (0, 1) *
-      amp[861] - std::complex<double> (0, 1) * amp[904] + std::complex<double>
-      (0, 1) * amp[908] - std::complex<double> (0, 1) * amp[906] +
-      std::complex<double> (0, 1) * amp[909] - std::complex<double> (0, 1) *
-      amp[913] - amp[914] + std::complex<double> (0, 1) * amp[917] -
-      std::complex<double> (0, 1) * amp[915] - std::complex<double> (0, 1) *
-      amp[922] + std::complex<double> (0, 1) * amp[926] - std::complex<double>
-      (0, 1) * amp[924] + std::complex<double> (0, 1) * amp[927] -
-      std::complex<double> (0, 1) * amp[931] - amp[932] + std::complex<double>
-      (0, 1) * amp[935] - std::complex<double> (0, 1) * amp[933] + amp[938] -
-      amp[936] + std::complex<double> (0, 1) * amp[941] - std::complex<double>
-      (0, 1) * amp[939] + std::complex<double> (0, 1) * amp[947] -
-      std::complex<double> (0, 1) * amp[945] + amp[950] - amp[948] +
-      std::complex<double> (0, 1) * amp[953] - std::complex<double> (0, 1) *
-      amp[951] + std::complex<double> (0, 1) * amp[959] - std::complex<double>
-      (0, 1) * amp[957] + std::complex<double> (0, 1) * amp[1013] -
-      std::complex<double> (0, 1) * amp[1011] + amp[1016] - amp[1014] +
-      std::complex<double> (0, 1) * amp[1019] - std::complex<double> (0, 1) *
-      amp[1017] + std::complex<double> (0, 1) * amp[1025] -
-      std::complex<double> (0, 1) * amp[1023] + amp[1028] - amp[1026] +
-      std::complex<double> (0, 1) * amp[1031] - std::complex<double> (0, 1) *
-      amp[1029];
-
-  // Store the leading color flows for choice of color
-  for(int i = 0; i < ncolor; i++ )
-    jamp2[0][i] += real(jamp[i] * conj(jamp[i])); 
-
-  return -1.;
-}
-
-
-double eeuugggg::get_jamp2(int i)
-{
-  return jamp2[0][i];
-}
-
-int eeuugggg::colorstring(int i, int j)
-{
-  static const int res[24][8] = {
-    {5, 6, 7, 8, 3, 4, 0, 0},
-    {5, 6, 8, 7, 3, 4, 0, 0},
-    {5, 7, 6, 8, 3, 4, 0, 0},
-    {5, 7, 8, 6, 3, 4, 0, 0},
-    {5, 8, 6, 7, 3, 4, 0, 0},
-    {5, 8, 7, 6, 3, 4, 0, 0},
-    {6, 5, 7, 8, 3, 4, 0, 0},
-    {6, 5, 8, 7, 3, 4, 0, 0},
-    {6, 7, 5, 8, 3, 4, 0, 0},
-    {6, 7, 8, 5, 3, 4, 0, 0},
-    {6, 8, 5, 7, 3, 4, 0, 0},
-    {6, 8, 7, 5, 3, 4, 0, 0},
-    {7, 5, 6, 8, 3, 4, 0, 0},
-    {7, 5, 8, 6, 3, 4, 0, 0},
-    {7, 6, 5, 8, 3, 4, 0, 0},
-    {7, 6, 8, 5, 3, 4, 0, 0},
-    {7, 8, 5, 6, 3, 4, 0, 0},
-    {7, 8, 6, 5, 3, 4, 0, 0},
-    {8, 5, 6, 7, 3, 4, 0, 0},
-    {8, 5, 7, 6, 3, 4, 0, 0},
-    {8, 6, 5, 7, 3, 4, 0, 0},
-    {8, 6, 7, 5, 3, 4, 0, 0},
-    {8, 7, 5, 6, 3, 4, 0, 0},
-    {8, 7, 6, 5, 3, 4, 0, 0}};
-  return res[i][j];
-}
-
-
-int eeuugggg::NCol()
-{
-  static const int ncolor = 24;
-  return ncolor;
-}
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/Shower/Dipole/Colorea/eeuugggg.h b/Shower/Dipole/Colorea/eeuugggg.h
deleted file mode 100644
--- a/Shower/Dipole/Colorea/eeuugggg.h
+++ /dev/null
@@ -1,52 +0,0 @@
-  //==========================================================================
-  // This file has been automatically generated for C++ Standalone by
-  // MadGraph5_aMC@NLO v. 2.5.4, 2017-03-28
-  // By the MadGraph5_aMC@NLO Development Team
-  // Visit launchpad.net/madgraph5 and amcatnlo.web.cern.ch
-  //==========================================================================
-  // and was then modified by J. Bellm.
-#ifndef MG5_Sigma_sm_epem_uuxgggg_H
-#define MG5_Sigma_sm_epem_uuxgggg_H
-#include <complex> 
-#include <vector>
-#include "Parameters_sm.h"
-using namespace std;
-class eeuugggg
-{
-  public:
-  eeuugggg(){ 
-    initProc("param_card.dat");
-  }
-    // Retrun the prefered gluon order
-  vector<int> producePermutation(double r,vector < double * > & momenta);
-  void setMass(int i,double M){mME[i]=M;}
-  private:
-    ///////// Process Dependent
-  static const int ninitial = 2;
-  static const int nexternal = 8;
-  static const int nprocesses = 1;
-  static const int nwavefuncs = 205;
-  static const int namplitudes = 1032;
-  std::complex<double> w[nwavefuncs][18];
-  double matrix_1_epem_uuxgggg();
-    ///////// Generic
-  double matrix_element[nprocesses];
-  std::complex<double> amp[namplitudes];
-  double * jamp2[nprocesses];
-  Parameters_sm * pars;
-  vector<double> mME;
-  vector < double * > p;
-  int id1, id2;
-  void initProc(string param_card_name);
-  void sigmaKin();
-  const vector<double> & getMasses() const {return mME;}
-  vector < double * > getMomenta(){return p;}
-  void setMomenta(vector < double * > & momenta){p = momenta;}
-  void setInitial(int inid1, int inid2){id1 = inid1; id2 = inid2;}
-  void calculate_wavefunctions(const int perm[], const int hel[]);
-    // New function
-  double get_jamp2(int i);
-  int colorstring(int i, int j);
-  int NCol();
-}; 
-#endif  // MG5_Sigma_sm_epem_uuxgggg_H
diff --git a/Shower/Dipole/Colorea/read_slha_COLOREA.cc b/Shower/Dipole/Colorea/read_slha_COLOREA.cc
deleted file mode 100644
--- a/Shower/Dipole/Colorea/read_slha_COLOREA.cc
+++ /dev/null
@@ -1,144 +0,0 @@
-#include <algorithm>
-#include <iostream>
-#include <fstream>
-#include "read_slha_COLOREA.h"
-
-void SLHABlock_COLOREA::set_entry(std::vector<int> indices, double value)
-{
-  if (_entries.size() == 0)
-    _indices = indices.size();
-  else if(indices.size() != _indices)
-    throw "Wrong number of indices in set_entry";
-    
-  _entries[indices] = value;
-}
-
-double SLHABlock_COLOREA::get_entry(std::vector<int> indices, double def_val)
-{
-  if (_entries.find(indices) == _entries.end()){
-    std::cout << "Warning: No such entry in " << _name << ", using default value " 
-	 << def_val << std::endl;
-    return def_val;
-  }
-  return _entries[indices];
-}
-
-void SLHAReader_COLOREA::read_slha_file(std::string file_name)
-{
-  std::ifstream param_card;
-  param_card.open(file_name.c_str(), std::ifstream::in);
-  if(!param_card.good())
-    throw "Error while opening param card";
-  std::cout << "\nColorea: Opened slha file " << file_name << " for reading" << std::endl;
-  char buf[200];
-  std::string line;
-  std::string block("");
-
-  while(param_card.good()){
-    param_card.getline(buf, 200);
-    line = buf;
-    // Change to lowercase
-    transform(line.begin(), line.end(), line.begin(), (int(*)(int)) tolower);
-    if(line != "" && line[0] != '#'){
-      if(block != ""){
-	// Look for double index blocks
-	double dindex1, dindex2;
-	double value;
-	std::stringstream linestr2(line);
-	if (linestr2 >> dindex1 >> dindex2 >> value &&
-	    dindex1 == int(dindex1) and dindex2 == int(dindex2))
-	{
-	  std::vector<int> indices;
-	  indices.push_back(int(dindex1));
-	  indices.push_back(int(dindex2));
-	  set_block_entry(block, indices, value);
-	  // Done with this line, read next
-	  continue;
-	}
-	std::stringstream linestr1(line);
-	// Look for single index blocks
-	if(linestr1 >> dindex1 >> value && dindex1 == int(dindex1)) 
-	{
-	  std::vector<int> indices;
-	  indices.push_back(int(dindex1));
-	  set_block_entry(block, indices, value);
-	  // Done with this line, read next
-	  continue;
-	}
-      }
-      // Look for block
-      if(line.find("block ") != line.npos){
-	line = line.substr(6);
-	// Get rid of spaces between block and block name
-	while (line[0] == ' ')
-	  line = line.substr(1);
-	// Now find end of block name
-	std::string::size_type space_pos = line.find(' ');
-	if(space_pos != line.npos)
-	  line = line.substr(0, space_pos);
-	block = line;
-	continue;
-      }
-      // Look for decay
-      if(line.find("decay ") == 0){
-	line = line.substr(6);
-	block = "";
-	std::stringstream linestr(line);
-	int pdg_code;
-	double value;
-	if(linestr >> pdg_code >> value)
-	  set_block_entry("decay", pdg_code, value);
-	else
-	  std::cout << "Warning: Wrong format for decay block " << line << std::endl;
-	continue;
-      }
-    }
-  }
-
-  if (_blocks.size() == 0)
-    throw "No information read from SLHA card";
-
-  param_card.close();
-}
-
-double SLHAReader_COLOREA::get_block_entry(std::string block_name, std::vector<int> indices,
-				   double def_val)
-{
-  if (_blocks.find(block_name) == _blocks.end()){
-    std::cout << "No such block " << block_name << ", using default value " 
-	 << def_val << std::endl;
-    return def_val;
-  }
-  return _blocks[block_name].get_entry(indices);  
-}
-
-double SLHAReader_COLOREA::get_block_entry(std::string block_name, int index,
-				   double def_val)
-{
-  std::vector<int> indices;
-  indices.push_back(index);
-  return get_block_entry(block_name, indices, def_val);
-}
-
-
-void SLHAReader_COLOREA::set_block_entry(std::string block_name, std::vector<int> indices,
-				   double value)
-{
-  if (_blocks.find(block_name) == _blocks.end()){
-    SLHABlock_COLOREA block(block_name);
-    _blocks[block_name] = block;
-  }
-  _blocks[block_name].set_entry(indices, value);  
-  /* cout << "Set block " << block_name << " entry ";
-     for (int i=0;i < indices.size();i++) 
-     cout << indices[i] << " ";
-     cout << "to " << _blocks[block_name].get_entry(indices) << endl;*/
-}
-
-void SLHAReader_COLOREA::set_block_entry(std::string block_name, int index,
-				   double value)
-{
-  std::vector<int> indices;
-  indices.push_back(index);
-  set_block_entry(block_name, indices, value);
-}
diff --git a/Shower/Dipole/Colorea/read_slha_COLOREA.h b/Shower/Dipole/Colorea/read_slha_COLOREA.h
deleted file mode 100644
--- a/Shower/Dipole/Colorea/read_slha_COLOREA.h
+++ /dev/null
@@ -1,46 +0,0 @@
-#ifndef READ_SLHA_H
-#define READ_SLHA_H
-
-#include <map>
-#include <string>
-#include <sstream>
-#include <vector>
-
-class SLHABlock_COLOREA
-{
-  public:
-    SLHABlock_COLOREA(std::string name = ""){_name = name;}
-    ~SLHABlock_COLOREA(){}
-
-    void set_entry(std::vector<int> indices, double value);
-    double get_entry(std::vector<int> indices, double def_val = 0);
-    void set_name(std::string name) {_name = name;}
-    std::string get_name(){return _name;}
-    int get_indices() { return _indices;}
-
-  private:
-    std::string _name;
-    std::map<std::vector<int>, double> _entries;
-    unsigned int _indices;
-};
-
-class SLHAReader_COLOREA
-{
-  public:
-    SLHAReader_COLOREA(std::string file_name = "")
-	{if(file_name != "") read_slha_file(file_name);}
-
-    void read_slha_file(std::string file_name);
-    double get_block_entry(std::string block_name, std::vector<int> indices, 
-			   double def_val = 0);
-    double get_block_entry(std::string block_name, int index, 
-			   double def_val = 0);
-    void set_block_entry(std::string block_name, std::vector<int> indices, 
-			   double value);
-    void set_block_entry(std::string block_name, int index, 
-			   double value);
-  private:
-    std::map<std::string, SLHABlock_COLOREA> _blocks;
-};
-
-#endif
diff --git a/Shower/Dipole/DipoleShowerHandler.cc b/Shower/Dipole/DipoleShowerHandler.cc
--- a/Shower/Dipole/DipoleShowerHandler.cc
+++ b/Shower/Dipole/DipoleShowerHandler.cc
@@ -1,1924 +1,1888 @@
   // -*- C++ -*-
   //
   // DipoleShowerHandler.cc is a part of Herwig - A multi-purpose Monte Carlo event generator
   // Copyright (C) 2002-2017 The Herwig Collaboration
   //
   // Herwig is licenced under version 3 of the GPL, see COPYING for details.
   // Please respect the MCnet academic guidelines, see GUIDELINES for details.
   //
   //
   // This is the implementation of the non-inlined, non-templated member
   // functions of the DipoleShowerHandler class.
   //
 
 #include <config.h>
 #include "DipoleShowerHandler.h"
 #include "ThePEG/Interface/ClassDocumentation.h"
 #include "ThePEG/Interface/Reference.h"
 #include "ThePEG/Interface/RefVector.h"
 #include "ThePEG/Interface/Parameter.h"
 #include "ThePEG/Interface/ParVector.h"
 #include "ThePEG/Interface/Switch.h"
 
 #include "ThePEG/Persistency/PersistentOStream.h"
 #include "ThePEG/Persistency/PersistentIStream.h"
 
   // include theses to have complete types
 #include "Herwig/PDF/MPIPDF.h"
 #include "Herwig/PDF/MinBiasPDF.h"
 #include "Herwig/PDF/HwRemDecayer.h"
 
 #include "Herwig/Shower/Dipole/Utility/DipolePartonSplitter.h"
 #include "Herwig/MatrixElement/Matchbox/Base/MergerBase.h"
 
 #include "Herwig/MatrixElement/Matchbox/Base/SubtractedME.h"
 #include "Herwig/MatrixElement/Matchbox/MatchboxFactory.h"
 #include <queue>
 
 using namespace Herwig;
 
 bool DipoleShowerHandler::firstWarn = true;
 
 DipoleShowerHandler::DipoleShowerHandler() :
   ShowerHandler(), chainOrderVetoScales(true),
   nEmissions(0), discardNoEmissions(false), firstMCatNLOEmission(false),
   thePowhegDecayEmission(true),
   //theAnalyseSpinCorrelations(false),
   realignmentScheme(0),
   doSubleadingNc(false),subleadingNcEmissionsLimit(0),
   densityOperatorEvolution(0),densityOperatorCutoff(1.0*GeV2),
   doPartialUnweightingAtEmission(false),
   doPartialUnweighting(false),referenceWeight(0.1),
   cmecReweightFactor(1.0),negCMECScaling(1.0),
   verbosity(0), printEvent(0), nTries(0),
   didRadiate(false), didRealign(false),
   theRenormalizationScaleFreeze(1.*GeV),
   theFactorizationScaleFreeze(2.*GeV), theDoCompensate(false),
   theFreezeGrid(500000), theDetuning(1.0),
   maxPt(ZERO), muPt(ZERO),
   theInputColouredOffShellInShower(),
   theZBoundaries(1) {}
 
 DipoleShowerHandler::~DipoleShowerHandler() {}
 
 IBPtr DipoleShowerHandler::clone() const {
   return new_ptr(*this);
 }
 
 IBPtr DipoleShowerHandler::fullclone() const {
   return new_ptr(*this);
 }
 
 
 
 void  DipoleShowerHandler::cascade(tPVector ) {
   throw Exception()
   << "DipoleShowerHandler: Dipoleshower not implemented as second shower."
   << "Check your setup or contact Herwig authors."
   << Exception::runerror;
 }
 
 
 tPPair DipoleShowerHandler::cascade(tSubProPtr sub, XCombPtr,
                                     Energy optHardPt, Energy optCutoff) {
   
   useMe();
   
   prepareCascade(sub);
   resetWeights();
   
   if ( !doFSR() && ! doISR() )
     return sub->incoming();
 
   eventRecord().setSubleadingNc(doSubleadingNc,
 				subleadingNcEmissionsLimit);
   eventRecord().clear();
   eventRecord().prepare(sub,dynamic_ptr_cast<tStdXCombPtr>(lastXCombPtr()),newStep(),pdfs(),
 			ShowerHandler::currentHandler()->generator()->currentEvent()->incoming(),
 			firstInteraction(), offShellPartons(),
                         !doSubleadingNc);
   if ( doSubleadingNc ) {
     if ( !theSplittingReweight ) {
       throw Exception() << "No splitting reweight was found. "
 			<< "A ColourMatrixElementCorrection "
 			<< "splitting reweight is required "
 			<< "for the subleading colour shower."
 			<< Exception::runerror; 
     }
     //Set the evolution scheme for the density operator
     eventRecord().setDensityOperatorEvolution( densityOperatorEvolution, densityOperatorCutoff );
     //Set the CMEC reweight factor
     theSplittingReweight->reweightFactor(cmecReweightFactor);
     theSplittingReweight->negativeScaling(negCMECScaling);
     theSplittingReweight->updateCurrentHandler();
   }
 
   // SW: Removed simple test on doFSR and doISR and moved
   // here to account for the case of a hard event involving
   // no coloured particles but with unstable outgoing particles
   if ( !doFSR() && ! doISR() && eventRecord().decays().empty() )
   return sub->incoming();
   if ( !doISR() &&
        eventRecord().outgoing().empty() &&
        eventRecord().decays().empty() )
     return sub->incoming();
   if ( !doFSR() &&
        !eventRecord().incoming().first->coloured() &&
       !eventRecord().incoming().second->coloured() &&
        eventRecord().decays().empty() )
   return sub->incoming();
   
   nTries = 0;
   
   // Clear the vertex record for spin correlations
   if ( spinCorrelations() ) //|| theAnalyseSpinCorrelations )
     vertexRecord().clear();
   
   while ( true ) {
     
     try {
       
       didRadiate = false;
       didRealign = false;
       
       if ( eventRecord().truncatedShower() ) {
         throw Exception() << "Inconsistent hard emission set-up in DipoleShowerHandler::cascade. "
         << "No truncated shower needed with DipoleShowerHandler.  Add "
         << "'set MEMatching:TruncatedShower No' to input file."
         << Exception::runerror;
       }
       
       hardScales(lastXCombPtr()->lastShowerScale());
       
       if ( verbosity > 1 ) {
         generator()->log() << "DipoleShowerHandler starting off:\n";
         eventRecord().debugLastEvent(generator()->log());
         generator()->log() << flush;
       }
       
       unsigned int nEmitted = 0;
       
       if ( firstMCatNLOEmission ) {
         
         if ( !eventRecord().isMCatNLOHEvent() )
         nEmissions = 1;
         else
         nEmissions = 0;
         
       }
       
       if ( !firstMCatNLOEmission ) {
         
         doCascade(nEmitted,optHardPt,optCutoff);
         
         if ( discardNoEmissions ) {
           if ( !didRadiate )
           throw Veto();
           if ( nEmissions )
           if ( nEmissions < nEmitted )
           throw Veto();
         }
         
       } else {
         
         if ( nEmissions == 1 )
         doCascade(nEmitted,optHardPt,optCutoff);
         
       }
       
       if ( intrinsicPtGenerator ) {
         if ( eventRecord().incoming().first->coloured() &&
             eventRecord().incoming().second->coloured() ) {
           LorentzRotation rot =
           intrinsicPtGenerator->kick(eventRecord().incoming(),
                                      eventRecord().intermediates());
           eventRecord().transform(rot);
         }
       }
       
       didRealign = realign();
     
       constituentReshuffle();
 
       // backup subleading switch if decays fail
       bool doneSubleadingNc = doSubleadingNc;
 
       // subleading N can't handle decays
       doSubleadingNc = false;
 
       try {
       
         // Decay and shower any particles that require decaying
       while ( !eventRecord().decays().empty() ) {
 	
         map<PPtr,PerturbativeProcessPtr>::const_iterator decayIt = eventRecord().decays().begin();
         if ( eventRecord().nextDecay() ) {
           decayIt = eventRecord().decays().find(eventRecord().nextDecay() );
         }
         else {
           // find the decay to do, one with greatest width and parent showered
         while(find(eventRecord().outgoing().begin(),eventRecord().outgoing().end(),decayIt->first)==
               eventRecord().outgoing().end() &&
               find(eventRecord().hard().begin(),eventRecord().hard().end(),decayIt->first)==
               eventRecord().hard().end()) ++decayIt;
         }
 	
         assert(decayIt!=eventRecord().decays().end());
         PPtr incoming = decayIt->first;
         eventRecord().currentDecay(decayIt->second);
         
           // Use this to record if an emission actually happens
         bool powhegEmission = !( nEmissions && nEmitted==nEmissions) ? thePowhegDecayEmission : false;
         
           // Decay the particle / sort out its pert proc
         Energy showerScale = eventRecord().decay(incoming, powhegEmission);
         
           // Following the decay, the bool powheg emission is updated
           // to indicate whether or not an emission occurred
         if ( powhegEmission )
         nEmitted += 1;
         
           // Check that there is only one particle incoming to the decay
         assert(eventRecord().currentDecay()->incoming().size()==1);
         
           // Prepare the event record for the showering of the decay
         bool needToShower = eventRecord().prepareDecay(eventRecord().currentDecay(),
 						       offShellPartons());
         
           // Only need to shower if we have coloured outgoing particles
         if ( needToShower ) {
           
             // The decays currently considered produce a maximum of 2 chains (with powheg emission)
             // so all dipole should have the same scale as returned by the decay function.
           assert( eventRecord().chains().size() <= 2 );
           for ( auto  & ch : eventRecord().chains()) {
             for ( auto  & dip : ch.dipoles()) {
               assert ( showerScale > ZERO );
               dip.leftScale( showerScale );
               dip.rightScale( showerScale );
             }
           }
       
           // Prepare vertex record for spin correlations in decay shower
           if ( spinCorrelations() )
             vertexRecord().prepareParticleDecay(incoming);
       
             // Perform the cascade
           doCascade(nEmitted,optHardPt,optCutoff,true);
           
           if ( spinCorrelations() )
             vertexRecord().updateParticleDecay();
       
             // Do the constituent mass shell reshuffling
           decayConstituentReshuffle(eventRecord().currentDecay());
           
         }
         
           // Update the decays, adding any decays and updating momenta
         eventRecord().updateDecays(eventRecord().currentDecay());
         
 	  eventRecord().decays().erase(decayIt);
 
 	}
 
       } catch(...) {
 
 	// reset flag
 	doSubleadingNc = doneSubleadingNc;
 	throw;
 
       }
 
       doSubleadingNc = doneSubleadingNc;
       
       break;
       
     } catch (RedoShower&) {
       
       resetWeights();
       
       if ( ++nTries > maxtry() )
       throw ShowerTriesVeto(maxtry());
       
       eventRecord().clear();
       eventRecord().prepare(sub, dynamic_ptr_cast<tStdXCombPtr>(lastXCombPtr()), newStep(), pdfs(),
                             ShowerHandler::currentHandler()->generator()->currentEvent()->incoming(),
 			    firstInteraction(), offShellPartons(),
                             !doSubleadingNc);
       if ( doSubleadingNc ) {
 	theSplittingReweight->updateCurrentHandler();
       }
       
       continue;
       
     } catch (...) {
       throw;
     }
     
   }
   
   tPPair incoming=eventRecord().fillEventRecord(newStep(),firstInteraction(),didRealign);
   setDidRunCascade(true);
   return incoming;
 }
 
 
 
   // Reshuffle the outgoing partons from the hard process onto their constituent mass shells
 void DipoleShowerHandler::constituentReshuffle() {
   
   if ( constituentReshuffler &&  ShowerHandler::currentHandler()->retConstituentMasses() ) {
     if ( eventRecord().decays().empty() ) {
       constituentReshuffler->reshuffle(eventRecord().outgoing(),
                                        eventRecord().incoming(),
                                        eventRecord().intermediates());
       return;
     }
     
     else {
       PList decaying;
       for(auto const & dec : eventRecord().decays())
       decaying.push_back(dec.first);
       
       constituentReshuffler->hardProcDecayReshuffle( decaying,
                                                     eventRecord().outgoing(),
                                                     eventRecord().hard(),
                                                     eventRecord().incoming(),
                                                     eventRecord().intermediates());
     }
   }
   
     // After reshuffling the hard process, the decays need to be updated
     // as this is not done in reshuffle
   vector<pair<PPtr,PerturbativeProcessPtr> > decays;
   for(auto const & dec : eventRecord().decays() )
   decays.push_back({dec.first,dec.second});
   
   
   for(auto const & dec : decays) {
     
     PPtr unstable = dec.first;
     PList::iterator pos = find(eventRecord().intermediates().begin(),
                                eventRecord().intermediates().end(),
                                dec.first);
     
       // Update the PPtr in theDecays
     if(pos!=eventRecord().intermediates().end()) {
       unstable = *pos;
       while(!unstable->children().empty()) {
         unstable = unstable->children()[0];
       }
       eventRecord().decays().erase(dec.first);
       eventRecord().decays()[unstable] = dec.second;
       
         // Update the momenta of any other particles in the decay chain
         // (for externally provided events)
       if ( !(eventRecord().decays()[unstable]->outgoing().empty()) )
       eventRecord().updateDecayChainMom( unstable , eventRecord().decays()[unstable]);
     }
     
     else {
       if ( !(eventRecord().decays()[unstable]->outgoing().empty()) ) {
           // Update the momenta of any other particles in the decay chain
           // (for externally provided events)
           // Note this needs to be done for all decaying particles in the
           // outgoing/hard regardless of whether that particle radiated
           // or was involved in the reshuffling, this is due to the
           // transformation performed for IILightKinematics.
         if ( (find(eventRecord().outgoing().begin(),
                    eventRecord().outgoing().end(), unstable) != eventRecord().outgoing().end())
             || (find(eventRecord().hard().begin(),
                      eventRecord().hard().end(), unstable) != eventRecord().hard().end()) )
         eventRecord().updateDecayChainMom( unstable , eventRecord().decays()[unstable]);
         
       }
     }
   }
   
   eventRecord().currentDecay(PerturbativeProcessPtr());
 }
 
 
   // Reshuffle outgoing partons from a decay process onto their constituent mass shells
 void DipoleShowerHandler::decayConstituentReshuffle(PerturbativeProcessPtr decayProc) {
   
   
   
   if ( Debug::level  > 2  ){
   
       // Test this function by comparing the
       // invariant mass of the outgoing decay
       // systems before and after reshuffling
     Lorentz5Momentum testOutMomBefore (ZERO,ZERO,ZERO,ZERO);
     Energy testInvMassBefore = ZERO;
     
     for ( auto const & testDecayOutItBefore : decayProc->outgoing() ) {
       testOutMomBefore += testDecayOutItBefore.first->momentum();
     }
     
     testInvMassBefore = testOutMomBefore.m();
     
     
       // decayReshuffle updates both the event record and the decay perturbative process
     if ( constituentReshuffler && ShowerHandler::currentHandler()->retConstituentMasses()) {
       constituentReshuffler->decayReshuffle(decayProc,
                                             eventRecord().outgoing(),
                                             eventRecord().hard(),
                                             eventRecord().intermediates());
     }
     
     Lorentz5Momentum testOutMomAfter (ZERO,ZERO,ZERO,ZERO);
     Energy testInvMassAfter = ZERO;
     
     for ( auto const &  testDecayOutItAfter : decayProc->outgoing() ) {
       
       testOutMomAfter += testDecayOutItAfter.first->momentum();
       
     }
     
     testInvMassAfter = testOutMomAfter.m();
     
 #ifndef NDEBUG
     Energy incomingMass = decayProc->incoming()[0].first->momentum().m();
 #endif
     assert( abs(testInvMassBefore-incomingMass)/GeV < 1e-5 );
     assert( abs(testInvMassBefore-testInvMassAfter)/GeV < 1e-5);
     
     
   }else{
       // decayReshuffle updates both the event record and the decay perturbative process
     if ( constituentReshuffler && ShowerHandler::currentHandler()->retConstituentMasses() ) {
       constituentReshuffler->decayReshuffle(decayProc,
                                             eventRecord().outgoing(),
                                             eventRecord().hard(),
                                             eventRecord().intermediates());
     }
     return;
   }
   
 }
 
   // Sets the scale of each particle in the dipole chains by finding the smallest
   //of several upper bound energy scales: the CMEnergy of the event,
   //the transverse mass of outgoing particles, the hardScale (maxPT or maxQ)
   //calculated for each dipole (in both configurations) and the veto scale for each particle
 void DipoleShowerHandler::hardScales(Energy2 muf)  {
   
     // Initalise maximum pt as max CMEnergy of the event
   maxPt = generator()->maximumCMEnergy();
   
   if ( restrictPhasespace() ) {
       // First interaction == hard collision (i.e. not a MPI collision)
     if ( !hardScaleIsMuF() || !firstInteraction() ) {
       if ( !eventRecord().outgoing().empty() ) {
         for ( auto const &  p : eventRecord().outgoing() )
 	       maxPt = min(maxPt,p->momentum().mt());
       }
         //Look at any non-coloured outgoing particles in the current subprocess
       else {
         assert(!eventRecord().hard().empty());
         Lorentz5Momentum phard(ZERO,ZERO,ZERO,ZERO);
         for ( auto const & p : eventRecord().hard())
         phard += p->momentum();
         Energy mhard = phard.m();
         maxPt = mhard;
       }
       maxPt *= hardScaleFactor();
     }
     else {
       maxPt = hardScaleFactor()*sqrt(muf);
     }
     muPt = maxPt;
   } else {
     muPt = hardScaleFactor()*sqrt(muf);
   }
 
   if ( doSubleadingNc ) {
     return;
   }
 
  for ( auto  & ch : eventRecord().chains()) {
     
       // Note that minVetoScale is a value for each DipoleChain, not each dipole
       // It will contain the minimum veto scale from all of the dipoles in the chain
     Energy minVetoScale = -1.*GeV;
     
     for ( auto  & dip : ch.dipoles()) {
       
         // max scale per config
       Energy maxFirst = ZERO;
       Energy maxSecond = ZERO;
       
         // Loop over the kernels for the given dipole.
         // For each dipole configuration, calculate ptMax (or QMax if virtuality ordering)
         // for each kernel and find the maximum
       for ( auto const & k : kernels) {
         
         pair<bool,bool> conf = {true,false};
         
         if ( k->canHandle(dip.index(conf)) ) {
             // Look in DipoleChainOrdering for this
           Energy scale =
           evolutionOrdering()->hardScale(dip.emitter(conf),dip.spectator(conf),
                                          dip.emitterX(conf),dip.spectatorX(conf),
                                          *k,dip.index(conf));
           maxFirst = max(maxFirst,scale);
         }
         
         conf = {false,true};
         
         if ( k->canHandle(dip.index(conf)) ) {
           Energy scale =
           evolutionOrdering()->hardScale(dip.emitter(conf),dip.spectator(conf),
                                          dip.emitterX(conf),dip.spectatorX(conf),
                                          *k,dip.index(conf));
           maxSecond = max(maxSecond,scale);
         }
         
       }
       
         // Find the maximum value from comparing the maxScale found from maxPt and the vetoScale of the particle
       if ( dip.leftParticle()->vetoScale() >= ZERO ) {
         maxFirst = min(maxFirst,sqrt(dip.leftParticle()->vetoScale()));
         
           // minVetoScale is a value for each DipoleChain, not each dipole
           // It contains the minimum veto scale for all the dipoles in the entire DipoleChain
         if ( minVetoScale >= ZERO )
         minVetoScale = min(minVetoScale,sqrt(dip.leftParticle()->vetoScale()));
         else
         minVetoScale = sqrt(dip.leftParticle()->vetoScale());
       }
       
       if ( dip.rightParticle()->vetoScale() >= ZERO ) {
         maxSecond = min(maxSecond,sqrt(dip.rightParticle()->vetoScale()));
         if ( minVetoScale >= ZERO )
         minVetoScale = min(minVetoScale,sqrt(dip.rightParticle()->vetoScale()));
         else
         minVetoScale = sqrt(dip.rightParticle()->vetoScale());
       }
       
         // Set the emitterScale for both members of each dipole
       maxFirst = min(maxPt,maxFirst);
       dip.emitterScale({true,false},maxFirst);
       
       maxSecond = min(maxPt,maxSecond);
       dip.emitterScale({false,true},maxSecond);
       
     }
     
       // if the smallest veto scale (i.e. from all of the dipoles)
       // is smaller than the scale calculated for a particular
       // particle in a particular dipole,
       // replace the scale with the veto scale
     if ( !evolutionOrdering()->independentDipoles() &&
         chainOrderVetoScales &&
         minVetoScale >= ZERO ) {
       for ( auto  & dip : ch.dipoles() ) {
         dip.leftScale(min(dip.leftScale(),minVetoScale));
         dip.rightScale(min(dip.rightScale(),minVetoScale));
       }
     }
     
   }
   
 }
 
 void DipoleShowerHandler::hardScalesSubleading(list<DipoleSplittingInfo> candidates,
 					       Energy hardPt) {
 
   maxPt = hardPt;//generator()->maximumCMEnergy();
 
   // Note that minVetoScale is a value for each competing dipole (i.e. all dipoles
   // for the subleading shower.
   // It will contain the minimum veto scale from all of the dipoles
   Energy minVetoScale = -1.*GeV;
 
   for ( list<DipoleSplittingInfo>::iterator cand = candidates.begin();
 	cand != candidates.end(); ++cand ) {
 
       // max scale
       Energy maxScale = ZERO;
 
       // Loop over kernels
       for ( vector<Ptr<DipoleSplittingKernel>::ptr>::iterator k =
 	      kernels.begin(); k != kernels.end(); ++k ) {
 	
 	if ( (**k).canHandle(cand->index()) ) {
 	  Energy scale =
 	    evolutionOrdering()->hardScale(cand->emitter(),cand->spectator(),
 					 cand->emitterX(),cand->spectatorX(),
 					 **k,cand->index());
 	  maxScale = max(maxScale,scale);
 	}
 
       }
 
       if ( cand->emitter()->vetoScale() >= ZERO ) {
 	maxScale = min(maxScale,sqrt(cand->emitter()->vetoScale()));
 	if ( minVetoScale >= ZERO )
 	  minVetoScale = min(minVetoScale,sqrt(cand->emitter()->vetoScale()));
 	else
 	  minVetoScale = sqrt(cand->emitter()->vetoScale());
       }
 
       maxScale = min(maxPt,maxScale);
       cand->scale(maxScale);
 
     }
 
     if ( !evolutionOrdering()->independentDipoles() &&
 	 chainOrderVetoScales &&
 	 minVetoScale >= ZERO ) {
       for ( list<DipoleSplittingInfo>::iterator cand = candidates.begin();
 	    cand != candidates.end(); ++cand ) {
 	cand->scale(min(cand->scale(),minVetoScale));
       }
     }
 
 }
 
 
 
 void DipoleShowerHandler::addCandidates(PPair particles,
 					list<DipoleSplittingInfo>& clist) const {
 
   DipoleSplittingInfo candidate;
   Energy2 scale = ZERO;
   pair<bool,bool> is(particles.first == eventRecord().incoming().first,
 		     particles.second == eventRecord().incoming().second);
   if ( (is.first && !is.second) ||
        (!is.first && is.second) ) {
     scale = -(particles.first->momentum() - particles.second->momentum()).m2();
   } else {
     scale = (particles.first->momentum() + particles.second->momentum()).m2();
   }
 
   DipoleIndex index(particles.first->dataPtr(),particles.second->dataPtr(),
 		    is.first ? eventRecord().pdfs().first : PDF(),
 		    is.second ? eventRecord().pdfs().second : PDF());
 
   candidate.scale(sqrt(scale));
 
   candidate.index(index);
   candidate.configuration(make_pair(true,false));
   candidate.emitter(particles.first);
   candidate.emitterX(is.first ? eventRecord().fractions().first : 1.0);
   candidate.spectator(particles.second);
   candidate.spectatorX(is.second ? eventRecord().fractions().second : 1.0);
 
   clist.push_back(candidate);
 
   index.swap();
 
   candidate.index(index);
   candidate.configuration(make_pair(false,true));
   candidate.emitter(particles.second);
   candidate.emitterX(is.second ? eventRecord().fractions().second : 1.0);
   candidate.spectator(particles.first);
   candidate.spectatorX(is.first ? eventRecord().fractions().first : 1.0);
 
   clist.push_back(candidate);
 
 }
 
 void DipoleShowerHandler::getCandidates(list<DipoleSplittingInfo>& clist) const {
 
   clist.clear();
 
   for ( PList::const_iterator i = eventRecord().outgoing().begin(); 
 	i != eventRecord().outgoing().end(); ++i ) {
     PList::const_iterator j = i; ++j;
     for ( ; j != eventRecord().outgoing().end(); ++j ) {
       addCandidates(make_pair(*i,*j),clist);
     }
     // Changed order of *i and inc().first
     if ( eventRecord().incoming().first->coloured() )
       addCandidates(make_pair(eventRecord().incoming().first,*i),clist);
     if ( eventRecord().incoming().second->coloured() )
       addCandidates(make_pair(*i,eventRecord().incoming().second),clist);
   }
 
   if ( eventRecord().incoming().first->coloured() && eventRecord().incoming().second->coloured() ) {
     addCandidates(eventRecord().incoming(),clist);
   }
 
 }
 
 void DipoleShowerHandler::performSplitting(DipoleSplittingInfo& split) const {
 
   Ptr<DipoleSplittingKinematics>::tptr kinematics = split.splittingKinematics();
   kinematics->generateKinematics(split.emitter()->momentum(),
 				 split.spectator()->momentum(),
 				 split);
 
   split.splitEmitter(split.emitterData()->produceParticle(kinematics->lastEmitterMomentum()));
   split.splitSpectator(split.spectatorData()->produceParticle(kinematics->lastSpectatorMomentum()));
   split.emission(split.emissionData()->produceParticle(kinematics->lastEmissionMomentum()));
 
   // Setting resolution scales for the particles
   split.emission()->scale(sqr(split.lastPt()));
   split.splitEmitter()->scale(sqr(split.lastPt()));
   split.splitSpectator()->scale(split.spectator()->scale());
 
   PVector neighbours;
   if ( DipolePartonSplitter::colourConnected(split.emitter(),
 					     eventRecord().incoming().first) &&
        split.emitter() != eventRecord().incoming().first )
     neighbours.push_back(eventRecord().incoming().first);
   if ( DipolePartonSplitter::colourConnected(split.emitter(),
 					     eventRecord().incoming().second) &&
        split.emitter() != eventRecord().incoming().second )
     neighbours.push_back(eventRecord().incoming().second);
   for ( PList::const_iterator p = eventRecord().outgoing().begin(); 
 	p != eventRecord().outgoing().end(); ++p ) {
     if ( *p == split.emitter() )
       continue;
     if ( DipolePartonSplitter::colourConnected(split.emitter(),*p) )
       neighbours.push_back(*p);
   }
   assert(neighbours.size() == 1 || neighbours.size() == 2 );
   if ( neighbours.size() == 2 ) {
     if ( UseRandom::rnd() < 0.5 )
       swap(neighbours[0],neighbours[1]);
   }
 
   DipolePartonSplitter::split(split.emitter(),split.splitEmitter(),split.emission(),
 			      neighbours.front(),split.index().initialStateEmitter(),false);
   DipolePartonSplitter::change(split.spectator(),split.splitSpectator(),
 			       split.index().initialStateSpectator(),false);
 }
 
 Energy DipoleShowerHandler::nextSubleadingSplitting(Energy hardPt,
 						    Energy optHardPt, Energy optCutoff,
 						    const bool decay) {
 
   list<DipoleSplittingInfo> candidates;
   getCandidates(candidates);
 
   hardScalesSubleading(candidates,hardPt);
   for ( list<DipoleSplittingInfo>::iterator cand = candidates.begin();
    	cand != candidates.end(); cand++ ) {
     cand->scale(hardPt);
   }
 
 
   list<DipoleSplittingInfo>::iterator split = candidates.end();
 
   // Winner of all dipoles
   DipoleSplittingInfo winner;
   // Winner for the current iteration of the for loop
   DipoleSplittingInfo candWinner;
   Energy winnerScale = 0.0*GeV;
 
   Energy nextScale = 0.0*GeV;
 
   for ( list<DipoleSplittingInfo>::iterator cand = candidates.begin();
 	cand != candidates.end(); cand++ ) {
     nextScale = getWinner(candWinner,
 			  cand->index(),
 			  cand->emitterX(),cand->spectatorX(),
 			  make_pair(true,false),
 			  cand->emitter(),cand->spectator(),
 			  hardPt,
 			  optHardPt,
 			  optCutoff);
     if ( nextScale > winnerScale ) {
       winnerScale = nextScale;
       winner = candWinner;
       split = cand;
       winnerIndex = winningKernelIndex;//check
     }
   }
 
   if ( split == candidates.end() )
     return ZERO;
 
   if ( decay )
     winner.isDecayProc( true );
   
   split->fill(winner);
 
   performSplitting(*split);
   eventRecord().update(*split);
 
   for ( list<DipoleSplittingInfo>::iterator dip = candidates.begin();
 	dip != candidates.end(); ++dip ) {
     if ( dip == split )
       continue;
     dip->emission(split->emission());
     if ( dip->emitter() == split->emitter() ) {
       dip->splitEmitter(split->splitEmitter());
     } else {
       dip->splitEmitter(dip->emitter());
     }
     if ( dip->spectator() == split->spectator() ) {
       dip->splitSpectator(split->splitSpectator());
     } else {
       dip->splitSpectator(dip->spectator());
     }
   }
 
   // Update the ShowerHandler of the splitting reweight.
   if ( doSubleadingNc ) {
     theSplittingReweight->updateCurrentHandler();
   }
 
   return split->lastPt();
 
 }
 
 
 Energy DipoleShowerHandler::getWinner(DipoleSplittingInfo& winner,
                                       const Dipole& dip,
                                       pair<bool,bool> conf,
                                       Energy optHardPt,
                                       Energy optCutoff) {
   return
   getWinner(winner,dip.index(conf),
             dip.emitterX(conf),dip.spectatorX(conf),
             conf,dip.emitter(conf),dip.spectator(conf),
             dip.emitterScale(conf),optHardPt,optCutoff);
 }
 
 Energy DipoleShowerHandler::getWinner(SubleadingSplittingInfo& winner,
                                       Energy optHardPt,
                                       Energy optCutoff) {
   return
   getWinner(winner,winner.index(),
             winner.emitterX(),winner.spectatorX(),
             winner.configuration(),
             winner.emitter(),winner.spectator(),
             winner.startScale(),optHardPt,optCutoff);
 }
 
 Energy DipoleShowerHandler::getWinner(DipoleSplittingInfo& winner,
                                       const DipoleIndex& index,
                                       double emitterX, double spectatorX,
                                       pair<bool,bool> conf,
                                       tPPtr emitter, tPPtr spectator,
                                       Energy startScale,
                                       Energy optHardPt,
                                       Energy optCutoff) {
   
   if ( !index.initialStateEmitter() &&
       !doFSR() ) {
     winner.didStopEvolving();
     return 0.0*GeV;
   }
   
   if ( index.initialStateEmitter() &&
       !doISR() ) {
     winner.didStopEvolving();
     return 0.0*GeV;
   }
 
   if ( index.incomingDecaySpectator()
        && !doFSR() ) {
     winner.didStopEvolving();
     return 0.0*GeV;
   }
   
   // Currently do not split IF dipoles so
   // don't evaluate them in order to avoid
   // exceptions in the log
   if ( index.incomingDecayEmitter() ) {
     winner.didStopEvolving();
     return 0.0*GeV;
   }
   
   DipoleSplittingInfo candidate;
   candidate.index(index);
   candidate.configuration(conf);
   candidate.emitterX(emitterX);
   candidate.spectatorX(spectatorX);
   candidate.emitter(emitter);
   candidate.spectator(spectator);
 
   if ( generators().find(candidate.index()) == generators().end() )
   getGenerators(candidate.index(),theSplittingReweight);
   
   //
   // NOTE -- needs proper fixing at some point
   //
   // For some very strange reason, equal_range gives back
   // key ranges it hasn't been asked for. This particularly
   // happens e.g. for FI dipoles of the same kind, but different
   // PDF (hard vs MPI PDF). I can't see a reason for this,
   // as DipoleIndex properly implements comparison for equality
   // and (lexicographic) ordering; for the time being, we
   // use equal_range, extented by an explicit check for wether
   // the key is indeed what we wanted. See line after (*) comment
   // below.
   //
   // SW - Update 04/01/2016: Note - This caused a bug for me as I did not
   // include equality checks on the decay booleans in the == definition
   
   pair<GeneratorMap::iterator,GeneratorMap::iterator> gens
   = generators().equal_range(candidate.index());
   
   Energy winnerScale = 0.0*GeV;
   GeneratorMap::iterator winnerGen = generators().end();
   
   for ( GeneratorMap::iterator gen = gens.first; gen != gens.second; ++gen ) {
 
     if ( doPartialUnweighting )
       gen->second->doPartialUnweighting(referenceWeight);
 
     // (*) see NOTE above
     if ( !(gen->first == candidate.index()) )
     continue;
     
     if ( startScale <= gen->second->splittingKinematics()->IRCutoff() )
     continue;
     
     Energy dScale =
     gen->second->splittingKinematics()->dipoleScale(emitter->momentum(),
                                                     spectator->momentum());
 
     // in very exceptional cases happening in DIS
     if ( std::isnan( double(dScale/MeV) ) )
     throw RedoShower();
     
     candidate.scale(dScale);
     
       // Calculate the mass of the recoil system
       // for decay dipoles
     if ( candidate.index().incomingDecaySpectator() || candidate.index().incomingDecayEmitter() ) {
       Energy recoilMass = gen->second->splittingKinematics()->recoilMassKin(emitter->momentum(),
                                                                             spectator->momentum());
       candidate.recoilMass(recoilMass);
     }
 
     // Store emitter and spectator masses, needed in kinematics
     if ( candidate.index().emitterData()->mass() != ZERO ) {
       if ( !candidate.index().offShellEmitter() )
 	candidate.emitterMass( emitter->nominalMass() );  
       else
 	candidate.emitterMass( emitter->mass() );  
     }
     
     if ( candidate.index().spectatorData()->mass() != ZERO ) {
       if ( !candidate.index().offShellSpectator() )
 	candidate.spectatorMass( spectator->nominalMass() );  
       else
 	candidate.spectatorMass( spectator->mass() );  
     }
     
     
     candidate.continuesEvolving();
     Energy hardScale = evolutionOrdering()->maxPt(startScale,candidate,*(gen->second->splittingKernel()));
     
     Energy maxPossible =
     gen->second->splittingKinematics()->ptMax(candidate.scale(),
                                               candidate.emitterX(), candidate.spectatorX(),
                                               candidate,
                                               *gen->second->splittingKernel());
     
     Energy ircutoff =
     optCutoff < gen->second->splittingKinematics()->IRCutoff() ?
     gen->second->splittingKinematics()->IRCutoff() :
     optCutoff;
     
     if ( maxPossible <= ircutoff ) {
       continue;
     }
     if ( maxPossible >= hardScale ){
       candidate.hardPt(hardScale);
     }
     else {
       hardScale = maxPossible;
       candidate.hardPt(maxPossible);
     }
 
     gen->second->generate(candidate,currentWeights(),optHardPt,optCutoff);
     Energy nextScale = evolutionOrdering()->evolutionScale(
                       gen->second->lastSplitting(),*(gen->second->splittingKernel()));
     
     if ( nextScale > winnerScale ) {
       winner.fill(candidate);
       gen->second->completeSplitting(winner);
       winnerGen = gen;
       winnerScale = nextScale;
       if ( continueSubleadingNc() )
 	winningKernelIndex = kernelIndex+1;//check
     }
     
     if ( continueSubleadingNc() ) {
       kernelIndex++;//check
       scales.push_back(nextScale);//check
       theWeightsVector.push_back(gen->second->splittingWeightVector());
     }
 
     reweight(reweight() * gen->second->splittingWeight());
     
   }
   
   if ( winnerGen == generators().end() ) {
     winner.didStopEvolving();
     return 0.0*GeV;
   }
   
   if ( winner.stoppedEvolving() )
   return 0.0*GeV;
   
   return winnerScale;
   
 }
 
 void DipoleShowerHandler::doCascade(unsigned int& emDone,
                                     Energy optHardPt,
                                     Energy optCutoff,
                                     const bool decay) {
   
   if ( nEmissions )
     if ( emDone == nEmissions )
       return;
 
   if ( doSubleadingNc ) {
     unsigned int subEmDone = 0;
     // Set the starting scale
     Energy hardPt = muPt;
 
     double wref = referenceWeight;
     while ( subEmDone < subleadingNcEmissionsLimit && hardPt != ZERO && continueSubleadingNc() ) {
       // Clear out the weights from the earlier step
       theWeightsVector.clear();
       kernelIndex = 0;//check
       scales.clear();//check
 
       hardPt = nextSubleadingSplitting( hardPt, optHardPt, optCutoff, decay );
 
       // Partial unweighting
       if ( doPartialUnweightingAtEmission ) {
 	const double w = reweight();
 	if ( abs(w) < wref ) {
 	  if ( abs(w)/wref < UseRandom::rnd() ) {
 	    // Set weight to zero and end this event
 	    reweight(0.0);
 	    return;
 	  } else
 	    reweight( wref*w/abs(w) );
 	}
 	// Update the reference weight after emission
 	wref *= referenceWeight;
       }
 
       // When the winning scale is larger than the cutoff
       // remove the added weights that are under the winning scale
       if ( hardPt != ZERO ) {
         Energy maxq = 0.0*GeV;
 #ifndef NDEBUG
 	size_t iwinner = theWeightsVector.size();//check
 #endif
 	for ( size_t i = 0; i < theWeightsVector.size(); i++ ) {
 	  if ( theWeightsVector[i].size() > 0 ) {
 	    // get<2> is true for an accept step.
 	    if ( std::get<2>(theWeightsVector[i].back()) 
 		 && std::get<0>(theWeightsVector[i].back()) > maxq) {
 	      maxq = std::get<0>(theWeightsVector[i].back());
 #ifndef NDEBUG
 	      iwinner = i;//check
 #endif
 	    }
 	  }
 	}
 
         assert(winnerIndex-1 == iwinner);//check
 
 	double correctionWeight = 1.0;
 	for ( size_t i = 0; i < theWeightsVector.size(); i++ ) {
 	  for ( size_t j = 0; j < theWeightsVector[i].size(); j++ ) {
 	    if ( std::get<0>(theWeightsVector[i][j]) < maxq )
 	      correctionWeight *= std::get<1>(theWeightsVector[i][j]);
 	  }
 	}
 	reweight(reweight()/correctionWeight);
       }
 
       // Increment the number of subleading Nc emissions done
       subEmDone++;
       // Stop if the limit of emissions is reached
       if ( nEmissions )
 	if ( ++emDone == nEmissions )
 	  return;
     }
 
     // Subleading shower done, prepare chains for the standard
     // dipole shower
     eventRecord().prepareChainsSubleading( decay );
     // Set scales
     for ( list<DipoleChain>::iterator ch = eventRecord().chains().begin();
 	  ch != eventRecord().chains().end(); ch++ ) {
       for ( list<Dipole>::iterator dp = ch->dipoles().begin();
 	    dp != ch->dipoles().end(); dp++ ) {
 	dp->emitterScale(make_pair(true,false),hardPt);
 	dp->emitterScale(make_pair(false,true),hardPt);
       }
     }
     
   }
 
 
   DipoleSplittingInfo winner;
   DipoleSplittingInfo dipoleWinner;
   
   
   while ( eventRecord().haveChain() ) {
-    
-     // allow the dipole chain to be rearranged according to arXiv:1801.06113
-    if( _rearrange && ( _rearrangeNEmissions < 0 || _rearrangeNEmissions >= int(emDone) ) ){
-      eventRecord().currentChain().rearrange(_dipmax,_diplong);
-    }
 
     if ( verbosity > 2 ) {
       generator()->log() << "DipoleShowerHandler selecting splittings for the chain:\n"
       << eventRecord().currentChain() << flush;
     }
     
     list<Dipole>::iterator winnerDip = eventRecord().currentChain().dipoles().end();
     Energy winnerScale = 0.0*GeV;
     Energy nextLeftScale = 0.0*GeV;
     Energy nextRightScale = 0.0*GeV;
     for ( list<Dipole>::iterator dip = eventRecord().currentChain().dipoles().begin();
          dip != eventRecord().currentChain().dipoles().end(); ++dip ) {
       
       nextLeftScale = getWinner(dipoleWinner,*dip,{true,false},optHardPt,optCutoff);
       if ( nextLeftScale > winnerScale ) {
         winnerScale = nextLeftScale;
         winner = dipoleWinner;
         winnerDip = dip;
       }
       
       nextRightScale = getWinner(dipoleWinner,*dip,{false,true},optHardPt,optCutoff);
       if ( nextRightScale > winnerScale ) {
         winnerScale = nextRightScale;
         winner = dipoleWinner;
         winnerDip = dip;
       }
       
       if ( evolutionOrdering()->independentDipoles() ) {
         Energy dipScale = max(nextLeftScale,nextRightScale);
         if ( dip->leftScale() > dipScale )
         dip->leftScale(dipScale);
         if ( dip->rightScale() > dipScale )
         dip->rightScale(dipScale);
       }
     }
     
     if ( verbosity > 1 ) {
       if ( winnerDip != eventRecord().currentChain().dipoles().end() )
       generator()->log() << "DipoleShowerHandler selected the splitting:\n"
 			   << winner << " for the dipole\n"
 			   << (*winnerDip) << flush;
       else
       generator()->log() << "DipoleShowerHandler could not select a splitting above the IR cutoff\n"
 			   << flush;
     }
     
       // pop the chain if no dipole did radiate
     if ( winnerDip == eventRecord().currentChain().dipoles().end() ) {
       eventRecord().popChain();
       if ( theEventReweight && eventRecord().chains().empty() )
       if ( (theEventReweight->firstInteraction() && firstInteraction()) ||
           (theEventReweight->secondaryInteractions() && !firstInteraction()) ) {
         double w = theEventReweight->weightCascade(eventRecord().incoming(),
                                                    eventRecord().outgoing(),
                                                    eventRecord().hard(),theGlobalAlphaS);
         reweight(reweight()*w);
       }
       continue;
     }
     
       // otherwise perform the splitting
       // but first see if the emission would produce a configuration in the ME region.
     if (   theMergingHelper
 	&& eventHandler()->currentCollision()
 	&& !decay
 	&& firstInteraction() ) {
       if (theMergingHelper->maxLegs()>eventRecord().outgoing().size()+
                                       eventRecord().hard().size()
                                       +2){//incoming
         
 	if (theMergingHelper->mergingScale()<winnerScale && 
             theMergingHelper->emissionProbability() < UseRandom::rnd()) {
             
           theMergingHelper->setEmissionProbability(0.);
 
           const bool transparent=true;
           if (transparent) {
             pair<list<Dipole>::iterator,list<Dipole>::iterator> tmpchildren;
             DipoleSplittingInfo tmpwinner=winner;
             DipoleChain* tmpfirstChain = nullptr;
             DipoleChain* tmpsecondChain = nullptr;
             
             auto New=eventRecord().tmpsplit(winnerDip,tmpwinner,
                                             tmpchildren,tmpfirstChain,
                                             tmpsecondChain);
             
             
             if (theMergingHelper->matrixElementRegion(New.first,
                                                       New.second,
                                                       winnerScale,
                                                       theMergingHelper->mergingScale())) {
               optHardPt=winnerScale;
               continue;
             }
           }else{
             optHardPt=winnerScale;
             continue;
             
           }
         }
       }
     }
     if(theMergingHelper&&firstInteraction())
        optHardPt=ZERO;  
   
    
     
     didRadiate = true;
     
     eventRecord().isMCatNLOSEvent(false);
     eventRecord().isMCatNLOHEvent(false);
     
     pair<list<Dipole>::iterator,list<Dipole>::iterator> children;
     
     DipoleChain* firstChain = nullptr;
     DipoleChain* secondChain = nullptr;
     
     // Generate the azimuthal angle 
     if ( spinCorrelations() ) 
       vertexRecord().generatePhi(winner,*winnerDip);
 
     if ( decay )
       winner.isDecayProc( true );
     
       // Note: the dipoles are updated in eventRecord().split(....) after the splitting,
       // hence the entire cascade is handled in doCascade
       // The dipole scales are updated in dip->split(....)
     
     if ( decay )
     winner.isDecayProc( true );
 
     eventRecord().split(winnerDip,winner,children,firstChain,secondChain);
 
     // Update the vertex record following the splitting
     if ( spinCorrelations() )
       vertexRecord().update(winner);
 
     assert(firstChain && secondChain);
     evolutionOrdering()->setEvolutionScale(winnerScale,winner,*firstChain,children);
     if ( !secondChain->dipoles().empty() )
     evolutionOrdering()->setEvolutionScale(winnerScale,winner,*secondChain,children);
     
     if ( verbosity > 1 ) {
       generator()->log() << "DipoleShowerHandler did split the last selected dipole into:\n"
       << (*children.first) << (*children.second) << flush;
     }
     
     if ( verbosity > 2 ) {
       generator()->log() << "After splitting the last selected dipole, "
       << "DipoleShowerHandler encountered the following chains:\n"
       << (*firstChain) << (*secondChain) << flush;
     }
     
     if ( theEventReweight )
     if ( (theEventReweight->firstInteraction() && firstInteraction()) ||
         (theEventReweight->secondaryInteractions() && !firstInteraction()) ) {
       double w = theEventReweight->weight(eventRecord().incoming(),
                                           eventRecord().outgoing(),
                                           eventRecord().hard(),theGlobalAlphaS);
       reweight(reweight()*w);
     }
     
     if ( nEmissions )
     if ( ++emDone == nEmissions )
     return;
   }
   
 }
 
 bool DipoleShowerHandler::realign() {
   
   if ( !didRadiate && !intrinsicPtGenerator )
   return false;
   
   if ( eventRecord().incoming().first->coloured() ||
       eventRecord().incoming().second->coloured() ) {
     
     if ( eventRecord().incoming().first->momentum().perp2()/GeV2 < 1e-10 &&
         eventRecord().incoming().second->momentum().perp2()/GeV2 < 1e-10 )
     return false;
     
     pair<Lorentz5Momentum,Lorentz5Momentum> inMomenta
     (eventRecord().incoming().first->momentum(),
      eventRecord().incoming().second->momentum());
     
     LorentzRotation transform((inMomenta.first+inMomenta.second).findBoostToCM());
     
     Axis dir = (transform * inMomenta.first).vect().unit();
     Axis rot (-dir.y(),dir.x(),0);
     double theta = dir.theta();
     
     if ( lastParticles().first->momentum().z() < ZERO )
     theta = -theta;
     
     transform.rotate(-theta,rot);
     
     inMomenta.first = transform*inMomenta.first;
     inMomenta.second = transform*inMomenta.second;
     
     assert(inMomenta.first.z() > ZERO &&
            inMomenta.second.z() < ZERO);
     
     Energy2 sHat =
     (eventRecord().incoming().first->momentum() +
      eventRecord().incoming().second->momentum()).m2();
     
     pair<Energy,Energy> masses(eventRecord().incoming().first->mass(),
                                eventRecord().incoming().second->mass());
     pair<Energy,Energy> qs;
     
     if ( !eventRecord().incoming().first->coloured() ) {
       assert(masses.second == ZERO);
       qs.first = eventRecord().incoming().first->momentum().z();
       qs.second = (sHat-sqr(masses.first))/(2.*(qs.first+sqrt(sqr(masses.first)+sqr(qs.first))));
     } else if ( !eventRecord().incoming().second->coloured() ) {
       assert(masses.first == ZERO);
       qs.second = eventRecord().incoming().second->momentum().z();
       qs.first = (sHat-sqr(masses.second))/(2.*(qs.second+sqrt(sqr(masses.second)+sqr(qs.second))));
     } else {
       assert(masses.first == ZERO && masses.second == ZERO);
       if ( realignmentScheme == 0 ) {
         double yX = eventRecord().pX().rapidity();
         double yInt = (transform*eventRecord().pX()).rapidity();
         double dy = yX-yInt;
         qs.first = (sqrt(sHat)/2.)*exp(dy);
         qs.second = (sqrt(sHat)/2.)*exp(-dy);
       } else if ( realignmentScheme == 1 ) {
         Energy sS = sqrt((lastParticles().first->momentum() +
                           lastParticles().second->momentum()).m2());
         qs.first = eventRecord().fractions().first * sS / 2.;
         qs.second = eventRecord().fractions().second * sS / 2.;
       }
     }
     
     double beta =
     (qs.first-qs.second) /
     ( sqrt(sqr(masses.first)+sqr(qs.first)) +
      sqrt(sqr(masses.second)+sqr(qs.second)) );
     transform.boostZ(beta);
     
     Lorentz5Momentum tmp;
     
     if ( eventRecord().incoming().first->coloured() ) {
       tmp = eventRecord().incoming().first->momentum();
       tmp = transform * tmp;
       eventRecord().incoming().first->set5Momentum(tmp);
     }
     if ( eventRecord().incoming().second->coloured() ) {
       tmp = eventRecord().incoming().second->momentum();
       tmp = transform * tmp;
       eventRecord().incoming().second->set5Momentum(tmp);
     }
     eventRecord().transform(transform);
     return true;
     
   }
   
   return false;
   
 }
 
 void DipoleShowerHandler::resetAlphaS(Ptr<AlphaSBase>::tptr as) {
   
   for ( auto & k : kernels) {
     if ( !k->alphaS() )
     k->alphaS(as);
     k->renormalizationScaleFreeze(theRenormalizationScaleFreeze);
     k->factorizationScaleFreeze(theFactorizationScaleFreeze);
   }
   
     // clear the generators to be rebuild
     // actually, there shouldn't be any generators
     // when this happens.
   generators().clear();
   
 }
 
 void DipoleShowerHandler::resetReweight(Ptr<DipoleSplittingReweight>::tptr rw) {
   for ( auto &  g : generators() )
   g.second->splittingReweight(rw);
 }
 
 void DipoleShowerHandler::getGenerators(const DipoleIndex& ind,
                                         Ptr<DipoleSplittingReweight>::tptr rw) {
   
   bool gotone = false;
   
   for ( auto &  k : kernels ) {
     if ( k->canHandle(ind) ) {
       
       if ( verbosity > 0 ) {
         generator()->log() << "DipoleShowerHandler encountered the dipole configuration\n"
         << ind << " in event number "
         << eventHandler()->currentEvent()->number()
         << "\nwhich can be handled by the splitting kernel '"
         << k->name() << "'.\n" << flush;
       }
       
       gotone = true;
       Ptr<DipoleSplittingGenerator>::ptr nGenerator =
       new_ptr(DipoleSplittingGenerator());
       nGenerator->doCompensate(theDoCompensate);
       nGenerator->splittingKernel(k);
       if ( renormalizationScaleFactor() != 1. )
       nGenerator->splittingKernel()->renormalizationScaleFactor(renormalizationScaleFactor());
       if ( factorizationScaleFactor() != 1. )
       nGenerator->splittingKernel()->factorizationScaleFactor(factorizationScaleFactor());
       if ( !nGenerator->splittingReweight() )
       nGenerator->splittingReweight(rw);
       nGenerator->splittingKernel()->freezeGrid(theFreezeGrid);
       nGenerator->splittingKernel()->detuning(theDetuning);
       
       GeneratorMap::const_iterator equivalent = generators().end();
       
       for ( GeneratorMap::const_iterator eq = generators().begin();
            eq != generators().end(); ++eq ) {
         if ( !eq->second->wrapping() )
         if ( k->canHandleEquivalent(ind,*(eq->second->splittingKernel()),eq->first) ) {
           
           equivalent = eq;
           
           if ( verbosity > 0 ) {
             generator()->log() << "The dipole configuration "
             << ind
             << " can equivalently be handled by the existing\n"
             << "generator for configuration "
             << eq->first << " using the kernel '"
             << eq->second->splittingKernel()->name()
             << "'\n" << flush;
           }
           
           break;
           
         }
       }
       
       if ( equivalent != generators().end() ) {
         nGenerator->wrap(equivalent->second);
       }
       
       DipoleSplittingInfo dummy;
       dummy.index(ind);
       nGenerator->prepare(dummy);
       
       generators().insert({ind,nGenerator});
       
     }
   }
   
   if ( !gotone ) {
     throw Exception()
       << "DipoleShowerHandler could not "
       << "find a splitting kernel which is able "
       << "to handle splittings off the dipole "
       << ind << ".\n"
       << "Please check the input files."
       << Exception::runerror;
   }
   
 }
 
   // If needed, insert default implementations of virtual function defined
   // in the InterfacedBase class here (using ThePEG-interfaced-impl in Emacs).
 
 void DipoleShowerHandler::doinit() {
   ShowerHandler::doinit();
   if ( theGlobalAlphaS )
   resetAlphaS(theGlobalAlphaS);
   // copy off-shell particle ids before showering from input vector to the 
   // set used in the simulation
   if ( theColouredOffShellInShower.empty() ) {
     for(unsigned int ix=0;ix<theInputColouredOffShellInShower.size();++ix)
       theColouredOffShellInShower.insert(abs(theInputColouredOffShellInShower[ix]));
   }
   // work out which shower phase space to use for the matching
   bool zChoice0 = false;
   bool zChoice1 = false;
   size_t zChoiceOther = false;
   for ( auto & k : kernels) {
     if ( k->splittingKinematics()->openZBoundaries() == 0 )
       zChoice0 = true;
     else if ( k->splittingKinematics()->openZBoundaries() == 1 )
       zChoice1 = true;
     else
       zChoiceOther = true;
     // either inconsistent or other option which cannot be handled by the matching
     if ( zChoice0 && zChoice1 ) {
       zChoiceOther = true; break;
     }
   }
   if ( zChoiceOther )
     theZBoundaries = 2;
   else if ( zChoice1 )
     theZBoundaries = 1;
   else if ( zChoice0 )
     theZBoundaries = 0;
 }
 
 void DipoleShowerHandler::dofinish() {
   ShowerHandler::dofinish();
 }
 
 void DipoleShowerHandler::doinitrun() {
   ShowerHandler::doinitrun();
 }
 
 void DipoleShowerHandler::persistentOutput(PersistentOStream & os) const {
   os << kernels << theEvolutionOrdering
      << constituentReshuffler << intrinsicPtGenerator
      << theGlobalAlphaS << chainOrderVetoScales
      << nEmissions << discardNoEmissions << firstMCatNLOEmission
      << thePowhegDecayEmission
     //<< theAnalyseSpinCorrelations
      << doSubleadingNc << subleadingNcEmissionsLimit
      << densityOperatorEvolution << ounit(densityOperatorCutoff,GeV2)
      << doPartialUnweightingAtEmission
      << doPartialUnweighting << referenceWeight
      << cmecReweightFactor << negCMECScaling
      << realignmentScheme << verbosity << printEvent
      << ounit(theRenormalizationScaleFreeze,GeV)
      << ounit(theFactorizationScaleFreeze,GeV)
      << theShowerApproximation
      << theDoCompensate << theFreezeGrid << theDetuning
      << theEventReweight << theSplittingReweight << ounit(maxPt,GeV)
      << ounit(muPt,GeV)<< theMergingHelper << theColouredOffShellInShower
      << theInputColouredOffShellInShower
-     << _rearrange << _dipmax << _diplong << _rearrangeNEmissions << theZBoundaries;
+      << theZBoundaries;
 }
 
 void DipoleShowerHandler::persistentInput(PersistentIStream & is, int) {
   is >> kernels >> theEvolutionOrdering
      >> constituentReshuffler >> intrinsicPtGenerator
      >> theGlobalAlphaS >> chainOrderVetoScales
      >> nEmissions >> discardNoEmissions >> firstMCatNLOEmission
      >> thePowhegDecayEmission
     //>> theAnalyseSpinCorrelations
      >> doSubleadingNc >> subleadingNcEmissionsLimit
      >> densityOperatorEvolution >> iunit(densityOperatorCutoff,GeV2)
      >> doPartialUnweightingAtEmission
      >> doPartialUnweighting >> referenceWeight
      >> cmecReweightFactor >> negCMECScaling
      >> realignmentScheme >> verbosity >> printEvent
      >> iunit(theRenormalizationScaleFreeze,GeV)
      >> iunit(theFactorizationScaleFreeze,GeV)
      >> theShowerApproximation
      >> theDoCompensate >> theFreezeGrid >> theDetuning
      >> theEventReweight >> theSplittingReweight >> iunit(maxPt,GeV)
      >> iunit(muPt,GeV)>>theMergingHelper >> theColouredOffShellInShower
      >> theInputColouredOffShellInShower
-     >> _rearrange >> _dipmax >> _diplong >> _rearrangeNEmissions >> theZBoundaries;
+      >> theZBoundaries;
 }
 
 ClassDescription<DipoleShowerHandler> DipoleShowerHandler::initDipoleShowerHandler;
   // Definition of the static class description member.
 
 void DipoleShowerHandler::Init() {
   
   static ClassDocumentation<DipoleShowerHandler> documentation
   ("The DipoleShowerHandler class manages the showering using "
    "the dipole shower algorithm.",
    "The shower evolution was performed using the algorithm described in "
    "\\cite{Platzer:2009jq} and \\cite{Platzer:2011bc}.",
    "%\\cite{Platzer:2009jq}\n"
    "\\bibitem{Platzer:2009jq}\n"
    "S.~Platzer and S.~Gieseke,\n"
    "``Coherent Parton Showers with Local Recoils,''\n"
    "  JHEP {\\bf 1101}, 024 (2011)\n"
    "arXiv:0909.5593 [hep-ph].\n"
    "%%CITATION = ARXIV:0909.5593;%%\n"
    "%\\cite{Platzer:2011bc}\n"
    "\\bibitem{Platzer:2011bc}\n"
    "S.~Platzer and S.~Gieseke,\n"
    "``Dipole Showers and Automated NLO Matching in Herwig,''\n"
    "arXiv:1109.6256 [hep-ph].\n"
    "%%CITATION = ARXIV:1109.6256;%%");
   
   static RefVector<DipoleShowerHandler,DipoleSplittingKernel> interfaceKernels
   ("Kernels",
    "Set the splitting kernels to be used by the dipole shower.",
    &DipoleShowerHandler::kernels, -1, false, false, true, false, false);
   
   
   static Reference<DipoleShowerHandler,DipoleEvolutionOrdering> interfaceEvolutionOrdering
   ("EvolutionOrdering",
    "Set the evolution ordering to be used.",
    &DipoleShowerHandler::theEvolutionOrdering, false, false, true, false, false);
   
   
   static Reference<DipoleShowerHandler,ConstituentReshuffler> interfaceConstituentReshuffler
   ("ConstituentReshuffler",
    "The object to be used to reshuffle partons to their constitutent mass shells.",
    &DipoleShowerHandler::constituentReshuffler, false, false, true, true, false);
   
   
   static Reference<DipoleShowerHandler,IntrinsicPtGenerator> interfaceIntrinsicPtGenerator
   ("IntrinsicPtGenerator",
    "Set the object in charge to generate intrinsic pt for incoming partons.",
    &DipoleShowerHandler::intrinsicPtGenerator, false, false, true, true, false);
   
   static Reference<DipoleShowerHandler,AlphaSBase> interfaceGlobalAlphaS
     ("GlobalAlphaS",
      "Set a global strong coupling for all splitting kernels.",
      &DipoleShowerHandler::theGlobalAlphaS, false, false, true, true, false);
 // Start: Trying to add interface for the subleading Nc
   static Switch<DipoleShowerHandler,bool> interfaceDoSubleadingNc
     ("DoSubleadingNc",
      "Switch on or off subleading Nc corrections.",
      &DipoleShowerHandler::doSubleadingNc, true, false, false);
   static SwitchOption interfaceDoSubleadingNcOn
     (interfaceDoSubleadingNc,
      "On",
      "Switch on subleading Nc corrections.",
      true);
   static SwitchOption interfaceDoSubleadingNcOff
     (interfaceDoSubleadingNc,
      "Off",
      "Switch off subleading Nc corrections.",
      false);
   // Limit for how many subleading Nc emissions should be calculated
   static Parameter<DipoleShowerHandler,size_t> interfaceSubleadingNcEmissionsLimit
     ("SubleadingNcEmissionsLimit",
      "Number of emissions to calculate subleading Nc corrections for.",
      &DipoleShowerHandler::subleadingNcEmissionsLimit,0,0,0,
      false, false, Interface::lowerlim);
   static Parameter<DipoleShowerHandler,int> interfaceDensityOperatorEvolution
     ("DensityOperatorEvolution",
      "Scheme for evolving the density operator.",
      &DipoleShowerHandler::densityOperatorEvolution,0,0,0,
      false, false, Interface::lowerlim);
   static Parameter<DipoleShowerHandler,Energy2> interfaceDensityOperatorCutoff
     ("DensityOperatorCutoff",
      "Cutoff for momentum invariants for the density operator evolution.",
      &DipoleShowerHandler::densityOperatorCutoff,GeV2,1.0*GeV2,0.0*GeV2,0*GeV2,
      false, false, Interface::lowerlim);
   static Switch<DipoleShowerHandler,bool> interfaceDoPartialUnweightingAtEmission
     ("DoPartialUnweightingAtEmission",
      "Switch on or off partial unweighting at the emission level.",
      &DipoleShowerHandler::doPartialUnweightingAtEmission,true,false,false);
   static SwitchOption interfaceDoPartialUnweightingAtEmissionOn
     (interfaceDoPartialUnweightingAtEmission,
      "On",
      "Switch on partial unweighting.",
      true);
   static SwitchOption interfaceDoPartialUnweightingAtEmissionOff
     (interfaceDoPartialUnweightingAtEmission,
      "Off",
      "Switch off partial unweighting.",
      false);
   static Switch<DipoleShowerHandler,bool> interfaceDoPartialUnweighting
     ("DoPartialUnweighting",
      "Switch on or off partial unweighting at the dipole splitting level.",
      &DipoleShowerHandler::doPartialUnweighting,true,false,false);
   static SwitchOption interfaceDoPartialUnweightingOn
     (interfaceDoPartialUnweighting,
      "On",
      "Switch on partial unweighting.",
      true);
   static SwitchOption interfaceDoPartialUnweightingOff
     (interfaceDoPartialUnweighting,
      "Off",
      "Switch off partial unweighting.",
      false);
   static Parameter<DipoleShowerHandler,double> interfaceReferenceWeight
     ("ReferenceWeight",
      "Reference weight for the partial unweighting.",
      &DipoleShowerHandler::referenceWeight,0.1,0.0,0,
      false, false, Interface::lowerlim);
   static Parameter<DipoleShowerHandler,double> interfaceCMECReweightFactor
     ("CMECReweightFactor",
      "Factor used in the reweighting algorithm.",
      &DipoleShowerHandler::cmecReweightFactor,1.0,0.0,0,
      false, false, Interface::lowerlim);
   static Parameter<DipoleShowerHandler,double> interfaceNegCMECScaling
     ("NegCMECScaling",
      "Scaling factor for the negative colour matrix element corrections (CMECs).",
      &DipoleShowerHandler::negCMECScaling,0.0,0.0,0,
      false, false, Interface::lowerlim);
   static Switch<DipoleShowerHandler,int> interfaceRealignmentScheme
   ("RealignmentScheme",
    "The realignment scheme to use.",
    &DipoleShowerHandler::realignmentScheme, 0, false, false);
   static SwitchOption interfaceRealignmentSchemePreserveRapidity
   (interfaceRealignmentScheme,
    "PreserveRapidity",
    "Preserve the rapidity of non-coloured outgoing system.",
    0);
   static SwitchOption interfaceRealignmentSchemeEvolutionFractions
   (interfaceRealignmentScheme,
    "EvolutionFractions",
    "Use momentum fractions as generated by the evolution.",
    1);
   static SwitchOption interfaceRealignmentSchemeCollisionFrame
   (interfaceRealignmentScheme,
    "CollisionFrame",
    "Determine realignment from collision frame.",
    2);
   
   
   static Switch<DipoleShowerHandler,bool> interfaceChainOrderVetoScales
   ("ChainOrderVetoScales",
    "[experimental] Switch the chain ordering for veto scales on or off.",
    &DipoleShowerHandler::chainOrderVetoScales, true, false, false);
   static SwitchOption interfaceChainOrderVetoScalesYes
   (interfaceChainOrderVetoScales,
    "Yes",
    "Switch on chain ordering for veto scales.",
    true);
   static SwitchOption interfaceChainOrderVetoScalesNo
   (interfaceChainOrderVetoScales,
    "No",
    "Switch off chain ordering for veto scales.",
    false);
   
   interfaceChainOrderVetoScales.rank(-1);
   
   
   static Parameter<DipoleShowerHandler,unsigned int> interfaceNEmissions
   ("NEmissions",
    "[debug option] Limit the number of emissions to be generated. Zero does not limit the number of emissions.",
    &DipoleShowerHandler::nEmissions, 0, 0, 0,
    false, false, Interface::lowerlim);
   
   interfaceNEmissions.rank(-1);
   
   
   static Switch<DipoleShowerHandler,bool> interfaceDiscardNoEmissions
   ("DiscardNoEmissions",
    "[debug option] Discard events without radiation.",
    &DipoleShowerHandler::discardNoEmissions, false, false, false);
   static SwitchOption interfaceDiscardNoEmissionsYes
   (interfaceDiscardNoEmissions,
    "Yes",
    "Discard events without radiation.",
    true);
   static SwitchOption interfaceDiscardNoEmissionsNo
   (interfaceDiscardNoEmissions,
    "No",
    "Do not discard events without radiation.",
    false);
   
   interfaceDiscardNoEmissions.rank(-1);
   
   static Switch<DipoleShowerHandler,bool> interfaceFirstMCatNLOEmission
   ("FirstMCatNLOEmission",
    "[debug option] Only perform the first MC@NLO emission.",
    &DipoleShowerHandler::firstMCatNLOEmission, false, false, false);
   static SwitchOption interfaceFirstMCatNLOEmissionYes
   (interfaceFirstMCatNLOEmission,
    "Yes",
    "Perform only the first MC@NLO emission.",
    true);
   static SwitchOption interfaceFirstMCatNLOEmissionNo
   (interfaceFirstMCatNLOEmission,
    "No",
    "Produce all emissions.",
    false);
   
   interfaceFirstMCatNLOEmission.rank(-1);
   
   
   static Parameter<DipoleShowerHandler,int> interfaceVerbosity
   ("Verbosity",
    "[debug option] Set the level of debug information provided.",
    &DipoleShowerHandler::verbosity, 0, 0, 0,
    false, false, Interface::lowerlim);
   
   interfaceVerbosity.rank(-1);
   
   
   static Parameter<DipoleShowerHandler,int> interfacePrintEvent
   ("PrintEvent",
    "[debug option] The number of events for which debugging information should be provided.",
    &DipoleShowerHandler::printEvent, 0, 0, 0,
    false, false, Interface::lowerlim);
   
   interfacePrintEvent.rank(-1);
   
   static Parameter<DipoleShowerHandler,Energy> interfaceRenormalizationScaleFreeze
   ("RenormalizationScaleFreeze",
    "The freezing scale for the renormalization scale.",
    &DipoleShowerHandler::theRenormalizationScaleFreeze, GeV, 1.0*GeV, 0.0*GeV, 0*GeV,
    false, false, Interface::lowerlim);
   
   static Parameter<DipoleShowerHandler,Energy> interfaceFactorizationScaleFreeze
   ("FactorizationScaleFreeze",
    "The freezing scale for the factorization scale.",
    &DipoleShowerHandler::theFactorizationScaleFreeze, GeV, 2.0*GeV, 0.0*GeV, 0*GeV,
    false, false, Interface::lowerlim);
   
   static Switch<DipoleShowerHandler,bool> interfaceDoCompensate
   ("DoCompensate",
    "",
    &DipoleShowerHandler::theDoCompensate, false, false, false);
   static SwitchOption interfaceDoCompensateYes
   (interfaceDoCompensate,
    "Yes",
    "",
    true);
   static SwitchOption interfaceDoCompensateNo
   (interfaceDoCompensate,
    "No",
    "",
    false);
   
   static Parameter<DipoleShowerHandler,unsigned long> interfaceFreezeGrid
   ("FreezeGrid",
    "",
    &DipoleShowerHandler::theFreezeGrid, 500000, 1, 0,
    false, false, Interface::lowerlim);
   
   static Parameter<DipoleShowerHandler,double> interfaceDetuning
   ("Detuning",
    "A value to detune the overestimate kernel.",
    &DipoleShowerHandler::theDetuning, 1.0, 1.0, 0,
    false, false, Interface::lowerlim);
   
   static Reference<DipoleShowerHandler,DipoleEventReweight> interfaceEventReweight
   ("EventReweight",
    "",
    &DipoleShowerHandler::theEventReweight, false, false, true, true, false);
   
   static Reference<DipoleShowerHandler,DipoleSplittingReweight> interfaceSplittingReweight
   ("SplittingReweight",
    "Set the splitting reweight.",
    &DipoleShowerHandler::theSplittingReweight, false, false, true, true, false);
   
   
   static Switch<DipoleShowerHandler, bool> interfacePowhegDecayEmission
   ("PowhegDecayEmission",
    "Use Powheg style emission for the decays",
    &DipoleShowerHandler::thePowhegDecayEmission, true, false, false);
   
   static SwitchOption interfacePowhegDecayEmissionYes
   (interfacePowhegDecayEmission,"Yes","Powheg decay emission on", true);
   
   static SwitchOption interfacePowhegDecayEmissionNo
   (interfacePowhegDecayEmission,"No","Powheg decay emission off", false);
 
   static ParVector<DipoleShowerHandler,long> interfaceOffShellInShower
     ("OffShellInShower",
      "PDG codes of the coloured particles that can be off-shell in the process.",
      &DipoleShowerHandler::theInputColouredOffShellInShower, -1, 0l, -10000000l, 10000000l,
      false, false, Interface::limited);
 
   /*
     static Switch<DipoleShowerHandler, bool> interfaceAnalyseSpinCorrelations
     ("AnalyseSpinCorrelations",
     "Record the information required for the spin correlation analyis.",
     &DipoleShowerHandler::theAnalyseSpinCorrelations, false, false, false);
   
     static SwitchOption interfaceAnalyseSpinCorrelationsYes
     (interfaceAnalyseSpinCorrelations,"Yes","Record the information for analysing the spin correlations.", true);
   
     static SwitchOption interfaceAnalyseSpinCorrelationsNo
     (interfaceAnalyseSpinCorrelations,"No","Do not record extra information.", false);
   */
 
-  static Switch<DipoleShowerHandler, bool> interfacerearrange
-  ("Rearrange",
-   "Allow rearranging of dipole chains according to arXiv:1801.06113",
-   &DipoleShowerHandler::_rearrange, false, false, false);
-
-  static SwitchOption interfacerearrangeYes
-  (interfacerearrange,"Yes","_rearrange on", true);
-
-  static SwitchOption interfacerearrangeNo
-  (interfacerearrange,"No","_rearrange off", false);
-
-  static Parameter<DipoleShowerHandler,unsigned int> interfacedipmax
-  ("DipMax",
-   "Allow rearrangment of color chains with ME including dipmax dipoles.",
-   &DipoleShowerHandler::_dipmax, 0, 0, 0,
-   false, false, Interface::lowerlim);
-
-  static Parameter<DipoleShowerHandler,unsigned int> interfacediplong
-  ("DipLong",
-   "Dipole chains with more than dipmax dipoles are treated as long. \
-    diplong=3 rearranges these chains with eeuugg MEs,  \
-    diplong=4 rearranges these chains with eeuuggg MEs (slower),  \
-    diplong=5 rearranges these chains with eeuugggg MEs (slow).\
-    Note: Numerically there is no difference between the options. ",
-   &DipoleShowerHandler::_diplong, 0, 0, 0,
-   false, false, Interface::lowerlim);
-
-  static Parameter<DipoleShowerHandler, int> interfacedcorrectNemissions
-  ("RearrangeNEmissions",
-   "Allow rearrangment of color chains up to the nth emission.",
-   &DipoleShowerHandler::_rearrangeNEmissions, 0, 0, 0,
-   false, false, Interface::lowerlim);
+  
 
   
 }
 
diff --git a/Shower/Dipole/DipoleShowerHandler.h b/Shower/Dipole/DipoleShowerHandler.h
--- a/Shower/Dipole/DipoleShowerHandler.h
+++ b/Shower/Dipole/DipoleShowerHandler.h
@@ -1,777 +1,756 @@
 // -*- C++ -*-
 //
 // DipoleShowerHandler.h is a part of Herwig - A multi-purpose Monte Carlo event generator
 // Copyright (C) 2002-2017 The Herwig Collaboration
 //
 // Herwig is licenced under version 3 of the GPL, see COPYING for details.
 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
 //
 #ifndef HERWIG_DipoleShowerHandler_H
 #define HERWIG_DipoleShowerHandler_H
 //
 // This is the declaration of the DipoleShowerHandler class.
 //
 
 #include "Herwig/Shower/ShowerHandler.h"
 
 #include "Herwig/Shower/Dipole/DipoleShowerHandler.fh"
 #include "Herwig/Shower/Dipole/Base/DipoleSplittingInfo.h"
 #include "Herwig/Shower/Dipole/Base/DipoleSplittingReweight.h"
 #include "Herwig/Shower/Dipole/Kernels/DipoleSplittingKernel.h"
 #include "Herwig/Shower/Dipole/Base/DipoleSplittingGenerator.h"
 #include "Herwig/Shower/Dipole/Base/DipoleEventRecord.h"
 #include "Herwig/Shower/Dipole/Base/DipoleEvolutionOrdering.h"
 #include "Herwig/Shower/Dipole/Base/DipoleEventReweight.h"
 #include "Herwig/Shower/Dipole/Utility/ConstituentReshuffler.h"
 #include "Herwig/Shower/Dipole/Utility/IntrinsicPtGenerator.h"
 #include "Herwig/MatrixElement/Matchbox/Base/MergerBase.h"
 #include "Herwig/MatrixElement/Matchbox/Matching/ShowerApproximation.h"
 
 #include "Herwig/Shower/Dipole/SpinCorrelations/DipoleVertexRecord.h"
 #include "Herwig/MatrixElement/Matchbox/Utility/DensityOperator.h"
 
 #include <tuple>
 
 namespace Herwig {
 
 using namespace ThePEG;
 
 /** 
  * \ingroup DipoleShower
  * \author Simon Platzer, Stephen Webster
  *
  * \brief The DipoleShowerHandler class manages the showering using
  * the dipole shower algorithm.
  *
  * @see \ref DipoleShowerHandlerInterfaces "The interfaces"
  * defined for DipoleShowerHandler.
  */
 class DipoleShowerHandler: public ShowerHandler {
 
 
  friend class Merger;
 
 public:
 
   /** @name Standard constructors and destructors. */
   //@{
   /**
    * The default constructor.
    */
   DipoleShowerHandler();
 
   /**
    * The destructor.
    */
   virtual ~DipoleShowerHandler();
   //@}
 
 public:
 
 
   inline void colourPrint();
 
   /**
    * Indicate a problem in the shower.
    */
   struct RedoShower {};
 
   /**
    * Insert an additional splitting kernel.
    */
   void addSplitting(Ptr<DipoleSplittingKernel>::ptr sp) {
     kernels.push_back(sp);
   }
 
   /**
    * Reset the alpha_s for all splitting kernels.
    */
   void resetAlphaS(Ptr<AlphaSBase>::tptr);
   
   
   virtual void cascade(tPVector); 
 
   /**
    * Reset the splitting reweight for all splitting kernels.
    */
   void resetReweight(Ptr<DipoleSplittingReweight>::tptr);
 
   /**
    * Return true, if the shower handler can generate a truncated 
    * shower for POWHEG style events generated using Matchbox
    */
   virtual bool canHandleMatchboxTrunc() const { return false; }
 
   /**
    * Return true, if this cascade handler will perform reshuffling from hard
    * process masses.
    */
   virtual bool isReshuffling() const { return false; }
 
   /**
    * Return the relevant hard scale to be used in the profile scales
    */
   virtual Energy hardScale() const {
     return muPt;
   }
   
   /**
    * Calculate the alpha_s value the shower uses for Q.
    */
   
   double as(Energy Q)const{return theGlobalAlphaS->value(sqr(Q));}
   
   /**
    * Return the number of scale dependent active flavours from 
    * the alpha_s object.
    */
 
   double Nf(Energy Q)const{return theGlobalAlphaS->Nf(sqr(Q));}
 
   /*
    * Access the vertex record
    */
   DipoleVertexRecord& vertexRecord() { return theVertexRecord; }
 
   /**
    * Return the event record
    */
   const DipoleVertexRecord& vertexRecord() const { return theVertexRecord; }
 
 
   /**
    * Set the pointer to the Merging Helper.
    * Used by the merging factory.
    */
   void setMerger(Ptr<MergerBase>::ptr mh){theMergingHelper=mh;}
 
 
 
 public:
 
   /**
    * Return the dictionary for the incoming particles and outgoing partons 
    * in the event, will be empty if subleading Nc is turned off.
    */
   const map<PPtr,size_t>& particleIndices() const { return eventRecord().particleIndices(); }
 
   /**
    * Return the particle data vector of the particles in the event, will 
    * be empty if subleading Nc is turned off.
    */
   const cPDVector& particlesAfter() const { return eventRecord().particlesAfter(); }
 
   /**
    * Return the density operator from the event record.
    */
   DensityOperator& densityOperator() { return eventRecord().densityOperator(); }
 
   /**
    * Return the colour matrix element correction map, will be empty if
    * subleading Nc is turned off. NOT USED, REMOVE
    */
   const map<pair<vector<PDT::Colour>,pair<size_t,size_t> >,double>& correlatorMap() const {
     return eventRecord().densityOperator().correlatorMap();
   }
 
   /**
    * Return the colour basis used in the density operator. NOT USED, REMOVE
    */
   Ptr<ColourBasis>::tptr colourBasis() {
     return eventRecord().densityOperator().colourBasis();
   }
 
   /**
    * Return the continue subleading Nc flag from the event record.
    */
   bool continueSubleadingNc() const { return eventRecord().getContinueSubleadingNc(); }
 
 protected:
 
   /**
    * Add the possible splitting candidates given a pair of emitting particles
    */
   void addCandidates(PPair particles, list<DipoleSplittingInfo>& clist) const;
 
   /**
    * Get all possible radiating dipoles
    */
   void getCandidates(list<DipoleSplittingInfo>& clist) const;
 
   /**
    * Perform a splitting independent of any chains
    */
   void performSplitting(DipoleSplittingInfo&) const;
 
   /**
    * Generate the next subleading Nc improved splitting and return the scale
    */
   Energy nextSubleadingSplitting(Energy hardPt,
 				 Energy optHardPt, Energy optCutoff,
 				 const bool decay);
 
 protected:
 
   typedef multimap<DipoleIndex,Ptr<DipoleSplittingGenerator>::ptr> GeneratorMap;
 
   /**
    * The main method which manages the showering of a subprocess.
    */
   virtual tPPair cascade(tSubProPtr sub, XCombPtr xcomb) {
     return cascade(sub,xcomb,ZERO,ZERO);
   }
 
   /**
    * The main method which manages the showering of a subprocess.
    */
   tPPair cascade(tSubProPtr sub, XCombPtr xcomb, 
 		 Energy optHardPt, Energy optCutoff);
 
   /**
    * Build splitting generators for the given
    * dipole index.
    */
   void getGenerators(const DipoleIndex&,
 		     Ptr<DipoleSplittingReweight>::tptr rw =
   		     Ptr<DipoleSplittingReweight>::tptr());
 
   /**
    * Setup the hard scales.
    */
   void hardScales(Energy2 scale);
 
   /**
    * Setup the hard scales of the dipoles after subleading emissions.//debug
    */
   void hardScalesSubleading(list<DipoleSplittingInfo> candidates,Energy hardPt);
 
   /**
    * Return the evolution ordering
    */
   Ptr<DipoleEvolutionOrdering>::tptr evolutionOrdering() const { return theEvolutionOrdering; }
 
   /**
    * Reshuffle to constituent mass shells
    */
   void constituentReshuffle();
 
   /**
    * Reshuffle to constituent mass shells
    */
   void decayConstituentReshuffle( PerturbativeProcessPtr decayProc);
 
   /**
    * Access the generator map
    */
   GeneratorMap& generators() { return theGenerators; }
 
   /**
    * Access the event record
    */
   DipoleEventRecord& eventRecord() { return theEventRecord; }
 
   /**
    * Return the event record
    */
   const DipoleEventRecord& eventRecord() const { return theEventRecord; }
 
   /**
    * Return the splitting kernels.
    */
   const vector<Ptr<DipoleSplittingKernel>::ptr>& splittingKernels() const {
     return kernels;
   }
   
   /**
    * Return the set of offshell parton ids.
    **/
   const set<long>& offShellPartons() { return theColouredOffShellInShower; }
   
   /**
    * Realign the event such as to have the incoming partons along thre
    * beam axes.
    */
   bool realign();
 
   /**
    * The choice of z boundaries; 0 = restricted, 1 = open, 2 = mixed/other
    */
   virtual int showerPhaseSpaceOption() const {
     return theZBoundaries;
   }
 
 protected:
 
   /**
    * Perform the cascade.
    */
   void doCascade(unsigned int& emDone,
 		 Energy optHardPt = ZERO,
 		 Energy optCutoff = ZERO,
 		 const bool decay = false);
   /**
    * Set the number of emissions 
    **/
   void setNEmissions(unsigned int n){nEmissions=n;}
   
 
   /**
    * Get the winning splitting for the
    * given dipole and configuration.
    */
   Energy getWinner(DipoleSplittingInfo& winner,
 		   const Dipole& dip,
 		   pair<bool,bool> conf,
 		   Energy optHardPt = ZERO,
 		   Energy optCutoff = ZERO);
 
   /**
    * Get the winning splitting for the
    * given dipole and configuration.
    */
   Energy getWinner(DipoleSplittingInfo& winner,
 		   Energy optHardPt = ZERO,
 		   Energy optCutoff = ZERO);
 
   /**
    * Get the winning splitting for the
    * given dipole and configuration.
    */
   Energy getWinner(SubleadingSplittingInfo& winner,
 		   Energy optHardPt = ZERO,
 		   Energy optCutoff = ZERO);
 
   /**
    * Get the winning splitting for the
    * given dipole and configuration.
    */
   Energy getWinner(DipoleSplittingInfo& winner,
 		   const DipoleIndex& index,
 		   double emitterX, double spectatorX,
 		   pair<bool,bool> conf,
 		   tPPtr emitter, tPPtr spectator,
 		   Energy startScale,
 		   Energy optHardPt = ZERO,
 		   Energy optCutoff = ZERO);
   
 public:
 
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
 
 protected:
 
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const;
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const;
   //@}
 
 
 // If needed, insert declarations of virtual function defined in the
 // InterfacedBase class here (using ThePEG-interfaced-decl in Emacs).
 
 
 protected:
 
   /** @name Standard Interfaced functions. */
   //@{
   /**
    * Initialize this object after the setup phase before saving an
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
 
   /**
    * Initialize this object. Called in the run phase just before
    * a run begins.
    */
   virtual void doinitrun();
 
   /**
    * Finalize this object. Called in the run phase just after a
    * run has ended. Used eg. to write out statistics.
    */
   virtual void dofinish();
   //@}
 
 
 private:
 
   /**
    * The splitting kernels to be used.
    */
   vector<Ptr<DipoleSplittingKernel>::ptr> kernels;
 
   /**
    * The evolution ordering considered
    */
   Ptr<DipoleEvolutionOrdering>::ptr theEvolutionOrdering;
 
   /**
    * The ConstituentReshuffler to be used
    */
   Ptr<ConstituentReshuffler>::ptr constituentReshuffler;
 
   /**
    * The intrinsic pt generator to be used.
    */
   Ptr<IntrinsicPtGenerator>::ptr intrinsicPtGenerator;
 
   /**
    * A global alpha_s to be used for all splitting kernels.
    */
   Ptr<AlphaSBase>::ptr theGlobalAlphaS;
 
   /**
    * Apply chain ordering to events from matrix
    * element corrections.
    */
   bool chainOrderVetoScales;
 
   /**
    * Limit the number of emissions.
    * Limit applied if > 0.
    */
   unsigned int nEmissions;
 
   /**
    * Discard events which did not radiate.
    */
   bool discardNoEmissions;
 
   /**
    * Perform the first MC@NLO emission only.
    */
   bool firstMCatNLOEmission;
 
   /**
    * True if powheg style emissions are to be used in the decays
    */
   bool thePowhegDecayEmission;
 
  /**
    * Switch to record information required for the 
    * nearest neighbour analysis.
    */
   //bool theAnalyseSpinCorrelations;
 
   /**
    * The realignment scheme
    */
   int realignmentScheme;
 
   /**
    * Switch on or off subleading Nc corrections
    */
   bool doSubleadingNc;
   
   /**
    * Number of emissions to do subleading Nc corrections to.
    */
   size_t subleadingNcEmissionsLimit;
 
   /**
    * Current reference weight used for partial unweighting of the 
    * subleading colour shower (updated each emission).
    */
   int currentReferenceWeight;
 
   /**
    * Integer used to set which method of evolving the density operator
    * to use:
    * 0 - Vijk is Eikonal but there is a cutoff.
    * 1 - Vijk is Eikonal.
    * 2 - Vijk=1 for all i,j,k.
    * 3 - Semi-leading Nc, Vijk=0 for all 
    */
   int densityOperatorEvolution;
 
   /**
    * Cutoff scale for the invariants (e.g. pEmitter*pEmission) in the 
    * Eikonal dipole kernel, Vijk.
    */
   Energy2 densityOperatorCutoff;
 
   /**
    * Switch on or off partial unweighting in after each subleading emission.
    */
   bool doPartialUnweightingAtEmission;
 
   /**
    * Switch on or off partial unweighting in the splitting generator.
    */
   bool doPartialUnweighting;
 
   /**
    * Reference weight for the partial unweighting.
    */
   double referenceWeight;
 
   /**
    * Factor changing the acceptance probability for the veto algorithm.
    */
   double cmecReweightFactor;
 
   /**
    * Scaling factor for the negative colour matrix element corrections.
    */
   double negCMECScaling;
 
 private:
 
   /**
    * The verbosity level.
    * 0 - print no info
    * 1 - print diagnostic information on setting up
    *     splitting generators etc.
    * 2 - print detailed event information for up to
    *     printEvent events.
    * 3 - print dipole chains after each splitting.
    */
   int verbosity;
 
   /**
    * See verbosity.
    */
   int printEvent;
 
 private:
 
   /**
    * The splitting generators indexed by the dipole
    * indices they can work on.
    */
   GeneratorMap theGenerators;
 
   /**
    * The evnt record used.
    */
   DipoleEventRecord theEventRecord;
 
   /**
    * The vertex record.
    **/
   DipoleVertexRecord theVertexRecord;
 
   /**
    * The number of shoer tries so far.
    */
   unsigned int nTries;
 
   /**
    * Whether or not we did radiate anything
    */
   bool didRadiate;
 
   /**
    * Whether or not we did realign the event
    */
   bool didRealign;
 
   /**
    * Vector of candidate splittings containing a vector of the
    * weights, scale and a bool for every step in the reweighted 
    * veto algorithm. The bool is true for an accept step.
    */
   vector<vector<std::tuple<Energy,double,bool> > > theWeightsVector;
 
   /**
    * Winning candidate index.
    */
   size_t winnerIndex;//debug
   size_t kernelIndex;//debug
   size_t winningKernelIndex;//debug
   vector<Energy> scales;//debug
 
 private:
 
   /**
    * A freezing value for the renormalization scale
    */
   Energy theRenormalizationScaleFreeze;
 
   /**
    * A freezing value for the factorization scale
    */
   Energy theFactorizationScaleFreeze;
 
   /**
    * The matching subtraction, if appropriate
    */
   Ptr<ShowerApproximation>::tptr theShowerApproximation;
 
   /**
    * True, if sampler should apply compensation
    */
   bool theDoCompensate;
 
   /**
    * Return the number of accepted points after which the grid should
    * be frozen
    */
   unsigned long theFreezeGrid;
 
   /**
    * The detuning factor applied to the sampling overestimate kernel
    */
   double theDetuning;
 
   /**
    * A pointer to the dipole event reweight object
    */
   Ptr<DipoleEventReweight>::ptr theEventReweight;
 
   /**
    * A pointer to a global dipole splitting reweight
    */
   Ptr<DipoleSplittingReweight>::ptr theSplittingReweight;
 
   /**
    * True if no warnings have been issued yet
    */
   static bool firstWarn;
 
   /**
    * The shower starting scale for the last event encountered
    */
   Energy maxPt;
 
   /**
    * The shower hard scale for the last event encountered
    */
   Energy muPt;
   
   
   /**
    * The merging helper takes care of merging multiple LO and NLO
    * cross sections. Here we need to check if an emission would 
    * radiate in the matrix element region of an other multipicity.
    * If so, the emission is vetoed.
    */
   Ptr<MergerBase>::ptr theMergingHelper;
 
 
   /**
    *  PDG codes of the partons which can have an off-shell mass,
    *  this is fast storage for use during running
    */
   set<long> theColouredOffShellInShower;
 
   /**
    *  PDG codes of the partons which can have an off-shell mass,
    *  this is a vector that is interfaced so they can be changed
    */
   vector<long> theInputColouredOffShellInShower;
   
   /**
-   * Allow the dipole chains to be rearranged
-   */
-  bool _rearrange=false;
-
-  /**
-   * number of maximal ME dipoles in the rearrangement.
-   */
-  unsigned int _dipmax=3;
-
-  /**
-   * If a chain is considered long (more than dipmax dipoles)
-   * ME with diplong dipoles are used to test for rearrangement.
-   */
-  unsigned int _diplong=3;
-  
-  /**
-   * Number of emissions to be rearranged.
-   */
-  int _rearrangeNEmissions=-1;
-  
-  /**
    * The choice of z boundaries; 0 = restricted, 1 = open, 2 = mixed/other
    */
   int theZBoundaries;
   
 private:
 
   /**
    * The static object used to initialize the description of this class.
    * Indicates that this is a concrete class with persistent data.
    */
   static ClassDescription<DipoleShowerHandler> initDipoleShowerHandler;
 
   /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   DipoleShowerHandler & operator=(const DipoleShowerHandler &) = delete;
 
 };
 
 }
 
 #include "ThePEG/Utilities/ClassTraits.h"
 
 namespace ThePEG {
 
 /** @cond TRAITSPECIALIZATIONS */
 
 /** This template specialization informs ThePEG about the
  *  base classes of DipoleShowerHandler. */
 template <>
 struct BaseClassTrait<Herwig::DipoleShowerHandler,1> {
   /** Typedef of the first base class of DipoleShowerHandler. */
   typedef Herwig::ShowerHandler NthBase;
 };
 
 /** This template specialization informs ThePEG about the name of
  *  the DipoleShowerHandler class and the shared object where it is defined. */
 template <>
 struct ClassTraits<Herwig::DipoleShowerHandler>
   : public ClassTraitsBase<Herwig::DipoleShowerHandler> {
   /** Return a platform-independent class name */
   static string className() { return "Herwig::DipoleShowerHandler"; }
   /**
    * The name of a file containing the dynamic library where the class
    * DipoleShowerHandler is implemented. It may also include several, space-separated,
    * libraries if the class DipoleShowerHandler depends on other classes (base classes
    * excepted). In this case the listed libraries will be dynamically
    * linked in the order they are specified.
    */
   static string library() { return "HwDipoleShower.so"; }
 };
 
 /** @endcond */
 
 }
 
 #endif /* HERWIG_DipoleShowerHandler_H */
diff --git a/Shower/Dipole/Makefile.am b/Shower/Dipole/Makefile.am
--- a/Shower/Dipole/Makefile.am
+++ b/Shower/Dipole/Makefile.am
@@ -1,24 +1,23 @@
-SUBDIRS = Base Kernels Kinematics Utility AlphaS Merging SpinCorrelations Colorea
+SUBDIRS = Base Kernels Kinematics Utility AlphaS Merging SpinCorrelations 
 
 pkglib_LTLIBRARIES = HwDipoleShower.la
 
 HwDipoleShower_la_LDFLAGS = $(AM_LDFLAGS) -module -version-info 10:0:0
 
 HwDipoleShower_la_LIBADD = \
 	Base/libHwDipoleShowerBase.la \
 	Kernels/libHwDipoleShowerKernels.la \
 	Kinematics/libHwDipoleShowerKinematics.la \
 	Utility/libHwDipoleShowerUtility.la \
 	Merging/libHwDipoleShowerMerging.la \
-	SpinCorrelations/libHwDipoleShowerSpinCorrelations.la \
-        Colorea/libHwDipoleShowerColorea.la
+	SpinCorrelations/libHwDipoleShowerSpinCorrelations.la 
 
 HwDipoleShower_la_SOURCES =  \
 	DipoleShowerHandler.h DipoleShowerHandler.fh DipoleShowerHandler.cc
 
 
 pkglib_LTLIBRARIES += HwKrknloEventReweight.la
 HwKrknloEventReweight_la_SOURCES = \
 	KrkNLO/KrknloEventReweight.h KrkNLO/KrknloEventReweight.cc
 
 HwKrknloEventReweight_la_LDFLAGS = $(AM_LDFLAGS) -module -version-info 2:0:0
diff --git a/configure.ac b/configure.ac
--- a/configure.ac
+++ b/configure.ac
@@ -1,246 +1,245 @@
 dnl Process this file with autoconf to produce a configure script.
 
 AC_PREREQ([2.63])
 AC_INIT([Herwig],[7.2.0],[herwig@projects.hepforge.org],[Herwig])
 AC_CONFIG_SRCDIR([Utilities/HerwigStrategy.cc])
 AC_CONFIG_AUX_DIR([Config])
 AC_CONFIG_MACRO_DIR([m4])
 AC_CONFIG_HEADERS([Config/config.h])
 dnl AC_PRESERVE_HELP_ORDER
 AC_CANONICAL_HOST
 
 dnl === disable debug symbols by default =====
 if test "x$CXXFLAGS" = "x"; then
    CXXFLAGS=-O2
 fi
 if test "x$CFLAGS" = "x"; then
    CFLAGS=-O2
 fi
 
 AC_LANG([C++])
 
 AM_INIT_AUTOMAKE([1.11 subdir-objects gnu dist-bzip2 no-dist-gzip -Wall -Wno-portability])
 m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
 m4_ifdef([AM_PROG_AR], [AM_PROG_AR])
 
 dnl Checks for C++ compiler. Handle C++11 flags.
 AC_PROG_CXX
 AX_CXX_COMPILE_STDCXX([11],[noext],[mandatory])
 
 dnl check for POSIX
 AC_CHECK_HEADER([unistd.h],[],
       [AC_MSG_ERROR([Herwig needs "unistd.h". Non-POSIX systems are not supported.])])
 AC_CHECK_HEADER([sys/stat.h],[],
       [AC_MSG_ERROR([Herwig needs "sys/stat.h". Non-POSIX systems are not supported.])])
 
 dnl Checks for programs.
 AC_PROG_INSTALL
 AC_PROG_MAKE_SET
 AC_PROG_LN_S
 
 dnl modified search order
 AC_PROG_FC([gfortran g95 g77]) 
 dnl xlf95 f95 fort ifort ifc efc pgf95 lf95 ftn xlf90 f90 pgf90 pghpf epcf90 xlf f77 frt pgf77 cf77 fort77 fl32 af77])
 AC_LANG_PUSH([Fortran])
 AC_MSG_CHECKING([if the Fortran compiler ($FC) works])
 AC_COMPILE_IFELSE(
    	AC_LANG_PROGRAM([],[      print *[,]"Hello"]),
 	[AC_MSG_RESULT([yes])],
 	[AC_MSG_RESULT([no])
 	 AC_MSG_ERROR([A Fortran compiler is required to build Herwig.])
 	]
 )
 AC_LANG_POP([Fortran])
 AC_FC_WRAPPERS
 
 
 LT_PREREQ([2.2.6])
 LT_INIT([disable-static dlopen pic-only])
 
 dnl ####################################
 dnl ####################################
 
 dnl for Doc/fixinterfaces.pl
 AC_PATH_PROG(PERL, perl)
 
 dnl for Models/Feynrules
 AM_PATH_PYTHON([2.6],, [:])
 AM_CONDITIONAL([HAVE_PYTHON], [test "x$PYTHON" != "x:"])
 
 HERWIG_CHECK_GSL
 
 HERWIG_CHECK_THEPEG
 
 BOOST_REQUIRE([1.41])
 BOOST_FIND_HEADER([boost/numeric/ublas/io.hpp])
 dnl Boost 1.64 is missing a required header to make these work
 dnl we just assume they're there if io.hpp has been found OK above
 dnl BOOST_FIND_HEADER([boost/numeric/ublas/matrix.hpp])
 dnl BOOST_FIND_HEADER([boost/numeric/ublas/matrix_proxy.hpp])
 dnl BOOST_FIND_HEADER([boost/numeric/ublas/matrix_sparse.hpp])
 dnl BOOST_FIND_HEADER([boost/numeric/ublas/symmetric.hpp])
 dnl BOOST_FIND_HEADER([boost/numeric/ublas/vector.hpp])
 BOOST_FIND_HEADER([boost/operators.hpp])
 BOOST_TEST()
 
 HERWIG_CHECK_VBFNLO
 
 HERWIG_CHECK_NJET
 
 HERWIG_CHECK_GOSAM
 
 HERWIG_CHECK_GOSAM_CONTRIB
 
 HERWIG_CHECK_OPENLOOPS
 
 HERWIG_CHECK_MADGRAPH
 
 HERWIG_CHECK_EVTGEN
 HERWIG_CHECK_PYTHIA
 
 HERWIG_COMPILERFLAGS
 
 HERWIG_LOOPTOOLS
 
 FASTJET_CHECK_FASTJET
 
 HERWIG_ENABLE_MODELS
 
 SHARED_FLAG=-shared
 AM_CONDITIONAL(NEED_APPLE_FIXES,
 		[test "xx${host/darwin/foundit}xx" != "xx${host}xx"])
 if test "xx${host/darwin/foundit}xx" != "xx${host}xx"; then
    APPLE_DSO_FLAGS=-Wl,-undefined,dynamic_lookup
    SHARED_FLAG=-bundle
 fi
 AC_SUBST([APPLE_DSO_FLAGS])
 AC_SUBST([SHARED_FLAG])
 
 AC_CONFIG_FILES([UnderlyingEvent/Makefile
 		Models/Makefile
 		Models/StandardModel/Makefile
 		Models/RSModel/Makefile
 		Models/General/Makefile
 		Models/Susy/Makefile
 		Models/Susy/NMSSM/Makefile
 		Models/Susy/RPV/Makefile
 		Models/UED/Makefile
 		Models/LH/Makefile
 		Models/LHTP/Makefile
 		Models/Transplanckian/Makefile
 		Models/Leptoquarks/Makefile
 		Models/Zprime/Makefile
 		Models/TTbAsymm/Makefile
 		Models/Feynrules/Makefile
 		Models/Feynrules/python/Makefile-FR
 		Models/ADD/Makefile
 		Models/Sextet/Makefile
 		Decay/Makefile
 		Decay/FormFactors/Makefile
 		Decay/Tau/Makefile
 		Decay/Baryon/Makefile
 		Decay/VectorMeson/Makefile
 		Decay/Perturbative/Makefile
 		Decay/ScalarMeson/Makefile
 		Decay/TensorMeson/Makefile
 		Decay/WeakCurrents/Makefile
 		Decay/Partonic/Makefile
 		Decay/General/Makefile	
 		Decay/Radiation/Makefile
 		Decay/EvtGen/Makefile
 		Doc/refman.conf
 		Doc/refman.h
 		PDT/Makefile
 		PDF/Makefile
 		MatrixElement/Makefile
 		MatrixElement/General/Makefile
 		MatrixElement/Lepton/Makefile
 		MatrixElement/Hadron/Makefile
 		MatrixElement/DIS/Makefile
 		MatrixElement/Powheg/Makefile
 		MatrixElement/Gamma/Makefile
 		MatrixElement/Reweighters/Makefile
 		MatrixElement/Matchbox/Makefile
 		MatrixElement/Matchbox/Base/Makefile
 		MatrixElement/Matchbox/Utility/Makefile
 		MatrixElement/Matchbox/Phasespace/Makefile
 		MatrixElement/Matchbox/Dipoles/Makefile
 		MatrixElement/Matchbox/InsertionOperators/Makefile
 		MatrixElement/Matchbox/Matching/Makefile
 		MatrixElement/Matchbox/Cuts/Makefile
 		MatrixElement/Matchbox/Scales/Makefile
 		MatrixElement/Matchbox/ColorFull/Makefile
 		MatrixElement/Matchbox/CVolver/Makefile
 		MatrixElement/Matchbox/Builtin/Makefile
 		MatrixElement/Matchbox/Builtin/Amplitudes/Makefile
 		MatrixElement/Matchbox/Tests/Makefile
 		MatrixElement/Matchbox/External/Makefile
 		MatrixElement/Matchbox/External/BLHAGeneric/Makefile
 		MatrixElement/Matchbox/External/VBFNLO/Makefile
 		MatrixElement/Matchbox/External/NJet/Makefile
 		MatrixElement/Matchbox/External/GoSam/Makefile
 		MatrixElement/Matchbox/External/OpenLoops/Makefile
 		MatrixElement/Matchbox/External/MadGraph/Makefile
 		MatrixElement/Matchbox/External/MadGraph/mg2herwig
 		MatrixElement/FxFx/Makefile
 		Sampling/Makefile
 		Sampling/CellGrids/Makefile
 		Shower/Makefile
 		Shower/QTilde/Makefile
 		Shower/QTilde/Matching/Makefile
 		Shower/Dipole/Makefile
 		Shower/Dipole/Base/Makefile
 		Shower/Dipole/Kernels/Makefile
 		Shower/Dipole/Kinematics/Makefile
 		Shower/Dipole/Utility/Makefile
 		Shower/Dipole/AlphaS/Makefile
 		Shower/Dipole/SpinCorrelations/Makefile
 		Utilities/Makefile
 		Utilities/XML/Makefile
 		Utilities/Statistics/Makefile
 		Hadronization/Makefile
 		lib/Makefile
 		include/Makefile
 		src/Makefile
 		src/defaults/Makefile
 		src/snippets/Makefile
 		src/Matchbox/Makefile
 		src/herwig-config
 		Doc/Makefile
 		Doc/HerwigDefaults.in
 		Looptools/Makefile
 		Analysis/Makefile
 		API/Makefile
 		src/Makefile-UserModules
 		src/defaults/Analysis.in
 		src/defaults/MatchboxDefaults.in
 		src/defaults/Decays.in
 		src/defaults/decayers.in
 		src/defaults/setup.gosam.in
 		src/Matchbox/LO-DefaultShower.in
 		src/Matchbox/LO-DipoleShower.in
 		src/Matchbox/MCatLO-DefaultShower.in
 		src/Matchbox/MCatLO-DipoleShower.in
 		src/Matchbox/LO-NoShower.in
 		src/Matchbox/MCatNLO-DefaultShower.in
 		src/Matchbox/MCatNLO-DipoleShower.in
 		src/Matchbox/NLO-NoShower.in
 		src/Matchbox/Powheg-DefaultShower.in
 		src/Matchbox/Powheg-DipoleShower.in
 		src/Merging/Makefile
 		Shower/Dipole/Merging/Makefile
-		Shower/Dipole/Colorea/Makefile
 		src/defaults/MatchboxMergingDefaults.in
 		Contrib/Makefile
 		Contrib/make_makefiles.sh
 		Tests/Makefile
 		Makefile])
 
 AC_CONFIG_LINKS([Doc/BSMlibs.in:Doc/BSMlibs.in])
 AC_CONFIG_FILES([Doc/fixinterfaces.pl],[chmod +x Doc/fixinterfaces.pl])
 AC_CONFIG_HEADERS([PDF/SaSPhotonPDF.cc])
 HERWIG_OVERVIEW
 
 AC_CONFIG_COMMANDS([summary],[cat config.herwig])
 
 AC_OUTPUT