[jboss-svn-commits] JBL Code SVN: r5421 - in labs/jbossrules/trunk/drools-compiler/src: main/java/org/drools/lang main/java/org/drools/lang/descr main/java/org/drools/semantics/java main/java/org/drools/xml main/resources main/resources/META-INF main/resources/org/drools/lang test/java/org/drools/compiler test/java/org/drools/integrationtests test/java/org/drools/lang/descr test/java/org/drools/xml test/resources/org/drools/reteoo test/resources/org/drools/xml

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Wed Aug 2 20:14:31 EDT 2006


Author: mark.proctor at jboss.com
Date: 2006-08-02 20:14:06 -0400 (Wed, 02 Aug 2006)
New Revision: 5421

Added:
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/FieldConstraintHandler.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/LiteralRestrictionHandler.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/ReturnValueRestrictionHandler.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/VariableRestrictionsHandler.java
   labs/jbossrules/trunk/drools-compiler/src/main/resources/drl.g
Removed:
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/BoundVariableHandler.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/LiteralHandler.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/ReturnValueHandler.java
   labs/jbossrules/trunk/drools-compiler/src/main/resources/org/drools/lang/drl.g
Modified:
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/DrlDumper.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/FieldConstraintDescr.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/LiteralRestrictionDescr.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/ReturnValueRestrictionDescr.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/RuleBuilder.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/FieldBindingHandler.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/PredicateHandler.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/XmlDumper.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/XmlPackageReader.java
   labs/jbossrules/trunk/drools-compiler/src/main/resources/META-INF/drools-3.0.xsd
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/compiler/PackageBuilderTest.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/LeapsTest.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/lang/descr/AndDescrTest.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/xml/DumperTest.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/xml/XmlPackageReaderTest.java
   labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/reteoo/OneAndTwoOrs
   labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/reteoo/OneAndTwoOrsPerson
   labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/reteoo/ThreeColumnsWithConstraints
   labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/xml/test_Dump.drl
   labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/xml/test_ParseLhs.xml
Log:
JBRULES-220 Refactor ObjectType to work with Templates
-This also involved  refactor Evaluator to use Enums for ValueType and Operator

JBRULES-329 implement core handling of Templates for ObjectType
-Initial commmit for FactTemplate work, still not integrated into parsers and builds, it also needs unit tests.

JBRULES-216 Allow & and | connectives for field constraints
-XmlReader is now fixed
-Xml and Drl Dumpers  have been fixed

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/DrlDumper.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/DrlDumper.java	2006-08-02 21:58:31 UTC (rev 5420)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/DrlDumper.java	2006-08-03 00:14:06 UTC (rev 5421)
@@ -23,21 +23,23 @@
 
 import org.drools.lang.descr.AndDescr;
 import org.drools.lang.descr.AttributeDescr;
-import org.drools.lang.descr.VariableDescr;
+import org.drools.lang.descr.FieldConstraintDescr;
 import org.drools.lang.descr.ColumnDescr;
 import org.drools.lang.descr.EvalDescr;
 import org.drools.lang.descr.ExistsDescr;
 import org.drools.lang.descr.FieldBindingDescr;
 import org.drools.lang.descr.FunctionDescr;
-import org.drools.lang.descr.LiteralDescr;
+import org.drools.lang.descr.LiteralRestrictionDescr;
 import org.drools.lang.descr.NotDescr;
 import org.drools.lang.descr.OrDescr;
 import org.drools.lang.descr.PackageDescr;
 import org.drools.lang.descr.PackageDescrDumper;
 import org.drools.lang.descr.PredicateDescr;
 import org.drools.lang.descr.QueryDescr;
-import org.drools.lang.descr.ReturnValueDescr;
+import org.drools.lang.descr.RestrictionConnectiveDescr;
+import org.drools.lang.descr.ReturnValueRestrictionDescr;
 import org.drools.lang.descr.RuleDescr;
+import org.drools.lang.descr.VariableRestrictionDescr;
 import org.drools.util.ReflectiveVisitor;
 
 /**
@@ -60,7 +62,7 @@
 
     public void visitAndDescr(final AndDescr descr) {
         this.template = new String();
-        if ( descr.getDescrs() != Collections.EMPTY_LIST ) {
+        if ( !descr.getDescrs().isEmpty() ) {
             this.template = processDescrList( descr.getDescrs() );
         } else {
             this.template = "";
@@ -79,15 +81,21 @@
         }
         this.template = "\t " + name + " " + value + DrlDumper.eol;
     }
+    
+    public void visitFieldConstraintDescr(final FieldConstraintDescr descr) {
+        if ( !descr.getRestrictions().isEmpty() ) {
+            this.template = descr.getFieldName() + " " + processFieldConstraint( descr.getRestrictions() );
+        } 
+    }    
 
-    public void visitBoundVariableDescr(final VariableDescr descr) {
+    public void visitVariableRestrictionDescr(final VariableRestrictionDescr descr) {
         this.template = new String();
-        this.template = descr.getFieldName() + " " + descr.getEvaluator() + " " + descr.getIdentifier();
+        this.template = descr.getEvaluator() + " " + descr.getIdentifier();
     }
 
     public void visitColumnDescr(final ColumnDescr descr) {
         this.template = new String();
-        if ( descr.getDescrs() != Collections.EMPTY_LIST ) {
+        if ( !descr.getDescrs().isEmpty() ) {
             if ( descr.getIdentifier() != null ) {
                 this.template = "\t\t" + descr.getIdentifier() + " : " + descr.getObjectType() + "( " + processColoumnConstraintList( descr.getDescrs() ) + ")";
             } else {
@@ -110,7 +118,7 @@
 
     public void visitExistsDescr(final ExistsDescr descr) {
         this.template = new String();
-        if ( descr.getDescrs() != Collections.EMPTY_LIST ) {
+        if ( !descr.getDescrs().isEmpty() ) {
             this.template = "\t\texists " + processDescrList( descr.getDescrs() );
         } else {
             this.template = "";
@@ -133,7 +141,7 @@
 
     }
 
-    public void visitLiteralDescr(final LiteralDescr descr) {
+    public void visitLiteralRestrictionDescr(final LiteralRestrictionDescr descr) {
         this.template = new String();
         String text = descr.getText();
         try {
@@ -142,12 +150,20 @@
             text = "\"" + text + "\"";
         }
 
-        this.template = descr.getFieldName() + " " + descr.getEvaluator() + " " + text;
+        this.template = descr.getEvaluator() + " " + text;
     }
+    
+    public void visitRestrictionConnectiveDescr(final RestrictionConnectiveDescr descr) {
+        if ( descr.getConnective() == RestrictionConnectiveDescr.OR ) {
+            this.template = " | ";
+        } else {
+            this.template = " & ";
+        }
+    }
 
     public void visitNotDescr(final NotDescr descr) {
         this.template = new String();
-        if ( descr.getDescrs() != Collections.EMPTY_LIST ) {
+        if ( descr.getDescrs().isEmpty() ) {
             this.template = "\t   not " + processDescrList( descr.getDescrs() );
         } else {
             this.template = "";
@@ -157,7 +173,7 @@
 
     public void visitOrDescr(final OrDescr descr) {
         this.template = new String();
-        if ( descr.getDescrs() != Collections.EMPTY_LIST ) {
+        if ( !descr.getDescrs().isEmpty() ) {
             this.template = processOrDescrList( descr.getDescrs() );
         } else {
             this.template = " ";
@@ -190,9 +206,9 @@
 
     }
 
-    public void visitReturnValueDescr(final ReturnValueDescr descr) {
+    public void visitReturnValueRestrictionDescr(final ReturnValueRestrictionDescr descr) {
         this.template = new String();
-        this.template = descr.getFieldName() + " " + descr.getEvaluator() + " ( " + descr.getText() + ")";
+        this.template = descr.getEvaluator() + " ( " + descr.getText() + ")";
     }
 
     public void visitQueryDescr(final QueryDescr descr) {
@@ -209,7 +225,7 @@
             String rule = "rule \"" + ruleDescr.getName() + "\" " + DrlDumper.eol;
             final String attribute = processAttribute( ruleDescr.getAttributes() );
             String lhs = "";
-            if ( ruleDescr.getLhs().getDescrs() != Collections.EMPTY_LIST ) {
+            if ( !ruleDescr.getLhs().getDescrs().isEmpty() ) {
                 lhs = "\t when" + DrlDumper.eol + processDescrList( ruleDescr.getLhs().getDescrs() ) + DrlDumper.eol;
             } else {
 
@@ -264,10 +280,20 @@
                                       descrString.length() - 2 );
     }
 
+    private String processFieldConstraint(List list)  {
+        String descrString = "";
+        for ( final Iterator it = list.iterator(); it.hasNext(); ) {
+            final Object temp = it.next();
+            visit( temp );
+            descrString += this.template;
+        }
+        return descrString;
+    }    
+    
     private String processDescrList(final List descr) {
         String descrString = "";
-        for ( final Iterator iterator = descr.iterator(); iterator.hasNext(); ) {
-            visit( iterator.next() );
+        for ( final Iterator it = descr.iterator(); it.hasNext(); ) {
+            visit( it.next() );
             descrString += this.template;
             descrString += DrlDumper.eol;
         }
@@ -277,8 +303,8 @@
     private String processFunctionsList(final List functions) {
         String functionList = "";
 
-        for ( final Iterator iterator = functions.iterator(); iterator.hasNext(); ) {
-            visit( iterator.next() );
+        for ( final Iterator it = functions.iterator(); it.hasNext(); ) {
+            visit( it.next() );
             functionList += this.template;
         }
 
@@ -288,8 +314,8 @@
     private String processAttribute(final List attributes) {
 
         String attributeList = "";
-        for ( final Iterator iterator = attributes.iterator(); iterator.hasNext(); ) {
-            final AttributeDescr attributeDescr = (AttributeDescr) iterator.next();
+        for ( final Iterator it = attributes.iterator(); it.hasNext(); ) {
+            final AttributeDescr attributeDescr = (AttributeDescr) it.next();
             visit( attributeDescr );
             attributeList += this.template;
         }
@@ -300,8 +326,8 @@
                                      final List parameterTypes) {
         String paramList = "";
         int i = 0;
-        for ( final Iterator iterator = parameterNames.iterator(); iterator.hasNext(); i++ ) {
-            final String paramName = (String) iterator.next();
+        for ( final Iterator it = parameterNames.iterator(); it.hasNext(); i++ ) {
+            final String paramName = (String) it.next();
             final String paramType = (String) parameterTypes.get( i );
             final String paramTemplate = paramType + " " + paramName + ",";
             paramList += paramTemplate;
@@ -314,8 +340,8 @@
     private String processGlobalsMap(final Map globals) {
         String globalList = "";
 
-        for ( final Iterator iterator = globals.keySet().iterator(); iterator.hasNext(); ) {
-            final String key = (String) iterator.next();
+        for ( final Iterator it = globals.keySet().iterator(); it.hasNext(); ) {
+            final String key = (String) it.next();
             final String value = (String) globals.get( key );
             final String globalTemplate = "global " + value + " " + key + ";" + DrlDumper.eol;
             globalList += globalTemplate;
@@ -327,8 +353,8 @@
     private String processImportsList(final List imports) {
         String importList = "";
 
-        for ( final Iterator iterator = imports.iterator(); iterator.hasNext(); ) {
-            final String importString = (String) iterator.next();
+        for ( final Iterator it = imports.iterator(); it.hasNext(); ) {
+            final String importString = (String) it.next();
             final String importTemplate = "import " + importString + ";" + DrlDumper.eol;
             importList += importTemplate;
         }

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/FieldConstraintDescr.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/FieldConstraintDescr.java	2006-08-02 21:58:31 UTC (rev 5420)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/FieldConstraintDescr.java	2006-08-03 00:14:06 UTC (rev 5421)
@@ -1,6 +1,7 @@
 package org.drools.lang.descr;
 
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
 
 /*
@@ -28,7 +29,7 @@
 
 	private static final long serialVersionUID = 320;
     private String  fieldName;
-    private List    restrictions = new ArrayList();
+    private List    restrictions = Collections.EMPTY_LIST;
 
     public FieldConstraintDescr(final String fieldName) {
         this.fieldName = fieldName;        
@@ -39,6 +40,9 @@
     }
     
     public void addRestriction(RestrictionDescr restriction) {
+        if ( this.restrictions == Collections.EMPTY_LIST ) {
+            this.restrictions = new ArrayList();
+        }
         this.restrictions.add( restriction );
     }
     

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/LiteralRestrictionDescr.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/LiteralRestrictionDescr.java	2006-08-02 21:58:31 UTC (rev 5420)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/LiteralRestrictionDescr.java	2006-08-03 00:14:06 UTC (rev 5421)
@@ -26,20 +26,20 @@
      * 
      */
     private static final long serialVersionUID = 320;
-    private String  evaluator;
-    private String  text;
-    private boolean staticFieldValue;
+    private String            evaluator;
+    private String            text;
+    private boolean           staticFieldValue;
 
-    public LiteralRestrictionDescr( final String evaluator,
-                        final String text) {
+    public LiteralRestrictionDescr(final String evaluator,
+                                   final String text) {
         this( evaluator,
               text,
               false );
     }
 
     public LiteralRestrictionDescr(final String evaluator,
-                        final String text,
-                        final boolean staticFieldValue) {
+                                   final String text,
+                                   final boolean staticFieldValue) {
         this.text = text;
         this.evaluator = evaluator;
         this.staticFieldValue = staticFieldValue;

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/ReturnValueRestrictionDescr.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/ReturnValueRestrictionDescr.java	2006-08-02 21:58:31 UTC (rev 5420)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/ReturnValueRestrictionDescr.java	2006-08-03 00:14:06 UTC (rev 5421)
@@ -21,20 +21,18 @@
      * 
      */
     private static final long serialVersionUID = 478782161375380651L;
-    private String   evaluator;
-    private String   text;
-    private String[] declarations;
+    private String            evaluator;
+    private String            text;
+    private String[]          declarations;
 
-    private String   classMethodName;
+    private String            classMethodName;
 
-    public ReturnValueRestrictionDescr(final String fieldName,
-                            final String evaluator) {
+    public ReturnValueRestrictionDescr(final String evaluator) {
         this.evaluator = evaluator;
     }
 
-    public ReturnValueRestrictionDescr(final String fieldName,
-                            final String evaluator,
-                            final String text) {
+    public ReturnValueRestrictionDescr(final String evaluator,
+                                       final String text) {
         this.evaluator = evaluator;
         this.text = text;
     }

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/RuleBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/RuleBuilder.java	2006-08-02 21:58:31 UTC (rev 5420)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/RuleBuilder.java	2006-08-03 00:14:06 UTC (rev 5421)
@@ -29,11 +29,13 @@
 import org.antlr.stringtemplate.StringTemplateGroup;
 import org.antlr.stringtemplate.language.AngleBracketTemplateLexer;
 import org.drools.RuntimeDroolsException;
+import org.drools.base.ClassFieldExtractor;
 import org.drools.base.ClassFieldExtractorCache;
 import org.drools.base.ClassObjectType;
-import org.drools.base.EvaluatorFactory;
 import org.drools.base.FieldFactory;
 import org.drools.base.FieldImpl;
+import org.drools.base.ValueType;
+import org.drools.base.evaluators.Operator;
 import org.drools.compiler.RuleError;
 import org.drools.lang.descr.AndDescr;
 import org.drools.lang.descr.AttributeDescr;
@@ -429,7 +431,6 @@
         return column;
     }
 
-
     private void build(final Column column,
                        final FieldConstraintDescr fieldConstraintDescr) {
 
@@ -445,22 +446,24 @@
 
         if ( fieldConstraintDescr.getRestrictions().size() == 1 ) {
             final Object object = fieldConstraintDescr.getRestrictions().get( 0 );
-            
-            Restriction restriction = buildRestriction( extractor, fieldConstraintDescr, ( RestrictionDescr ) object );
+
+            Restriction restriction = buildRestriction( extractor,
+                                                        fieldConstraintDescr,
+                                                        (RestrictionDescr) object );
             if ( restriction == null ) {
                 // @todo log errors
                 return;
             }
 
             if ( object instanceof LiteralRestrictionDescr ) {
-                    column.addConstraint( new LiteralConstraint( extractor,
-                                                                 ( LiteralRestriction ) restriction ) );
+                column.addConstraint( new LiteralConstraint( extractor,
+                                                             (LiteralRestriction) restriction ) );
             } else if ( object instanceof VariableRestrictionDescr ) {
-                    column.addConstraint( new VariableConstraint( extractor,
-                                                                  ( VariableRestriction ) restriction ) );
+                column.addConstraint( new VariableConstraint( extractor,
+                                                              (VariableRestriction) restriction ) );
             } else if ( object instanceof ReturnValueRestrictionDescr ) {
-                    column.addConstraint( new ReturnValueConstraint( extractor,
-                                                                     ( ReturnValueRestriction  ) restriction ) );
+                column.addConstraint( new ReturnValueConstraint( extractor,
+                                                                 (ReturnValueRestriction) restriction ) );
             }
 
             return;
@@ -468,14 +471,13 @@
 
         List orList = new ArrayList();
         List andList = null;
-        
+
         RestrictionDescr currentRestriction = null;
-        RestrictionDescr previousRestriction = null;        
-        
+        RestrictionDescr previousRestriction = null;
+
         List currentList = null;
         List previousList = null;
 
-
         for ( final Iterator it = fieldConstraintDescr.getRestrictions().iterator(); it.hasNext(); ) {
             Object object = it.next();
 
@@ -489,25 +491,29 @@
                         andList = new ArrayList();
                     }
                     previousList = currentList;
-                    currentList= andList;
+                    currentList = andList;
                 } else {
                     previousList = currentList;
                     currentList = orList;
                 }
             } else {
                 Restriction restriction = null;
-                if ( currentList != null ) {                                                           
+                if ( currentList != null ) {
                     // Are we are at the first operator? if so treat differently
-                    if ( previousList == null  ) {
-                        restriction = buildRestriction( extractor, fieldConstraintDescr, previousRestriction );
+                    if ( previousList == null ) {
+                        restriction = buildRestriction( extractor,
+                                                        fieldConstraintDescr,
+                                                        previousRestriction );
                         if ( currentList == andList ) {
                             andList.add( restriction );
                         } else {
-                            orList.add(  restriction );
-                        }                    
-                    } else {              
-                        restriction = buildRestriction( extractor, fieldConstraintDescr, previousRestriction );
-                        
+                            orList.add( restriction );
+                        }
+                    } else {
+                        restriction = buildRestriction( extractor,
+                                                        fieldConstraintDescr,
+                                                        previousRestriction );
+
                         if ( previousList == andList && currentList == orList ) {
                             andList.add( restriction );
                             if ( andList.size() == 1 ) {
@@ -516,27 +522,29 @@
                             } else {
                                 Restriction restrictions = new AndCompositeRestriction( (Restriction[]) andList.toArray( new Restriction[andList.size()] ) );
                                 orList.add( restrictions );
-                            }           
-                            andList = null;                           
+                            }
+                            andList = null;
                         } else if ( previousList == andList && currentList == andList ) {
                             andList.add( restriction );
                         } else if ( previousList == orList && currentList == andList ) {
                             andList.add( restriction );
                         } else if ( previousList == orList && currentList == orList ) {
                             orList.add( restriction );
-                        }                    
+                        }
                     }
-                }    
+                }
             }
-            previousRestriction = currentRestriction;                
-            currentRestriction = ( RestrictionDescr ) object;
+            previousRestriction = currentRestriction;
+            currentRestriction = (RestrictionDescr) object;
         }
-        
-        Restriction restriction = buildRestriction( extractor, fieldConstraintDescr, currentRestriction );
+
+        Restriction restriction = buildRestriction( extractor,
+                                                    fieldConstraintDescr,
+                                                    currentRestriction );
         currentList.add( restriction );
-        
+
         Restriction restrictions = null;
-        if ( currentList == andList &&  !orList.isEmpty() ) {
+        if ( currentList == andList && !orList.isEmpty() ) {
             // Check if it finished with an and, and process it
             if ( andList != null ) {
                 if ( andList.size() == 1 ) {
@@ -546,37 +554,40 @@
                     orList.add( new AndCompositeRestriction( (Restriction[]) andList.toArray( new Restriction[andList.size()] ) ) );
                 }
                 andList = null;
-            }                  
+            }
         }
-         
+
         if ( !orList.isEmpty() ) {
-            restrictions =   new OrCompositeRestriction(( Restriction[] )  orList.toArray(  new Restriction[ orList.size() ] ));
+            restrictions = new OrCompositeRestriction( (Restriction[]) orList.toArray( new Restriction[orList.size()] ) );
         } else if ( andList != null && !andList.isEmpty() ) {
             restrictions = new AndCompositeRestriction( (Restriction[]) andList.toArray( new Restriction[andList.size()] ) );
         } else {
             // @todo throw error
         }
 
-        column.addConstraint( new MultiRestrictionFieldConstraint( extractor, restrictions ) );        
+        column.addConstraint( new MultiRestrictionFieldConstraint( extractor,
+                                                                   restrictions ) );
     }
 
-    private Restriction buildRestriction(FieldExtractor extractor, FieldConstraintDescr fieldConstraintDescr, RestrictionDescr restrictionDescr) {        
+    private Restriction buildRestriction(FieldExtractor extractor,
+                                         FieldConstraintDescr fieldConstraintDescr,
+                                         RestrictionDescr restrictionDescr) {
         Restriction restriction = null;
         if ( restrictionDescr instanceof LiteralRestrictionDescr ) {
             restriction = build( extractor,
-                                                    fieldConstraintDescr,
-                                                    (LiteralRestrictionDescr) restrictionDescr);
+                                 fieldConstraintDescr,
+                                 (LiteralRestrictionDescr) restrictionDescr );
         } else if ( restrictionDescr instanceof VariableRestrictionDescr ) {
             restriction = build( extractor,
-                                                    fieldConstraintDescr,
-                                                    (VariableRestrictionDescr) restrictionDescr );                                
+                                 fieldConstraintDescr,
+                                 (VariableRestrictionDescr) restrictionDescr );
         } else if ( restrictionDescr instanceof ReturnValueRestrictionDescr ) {
             restriction = build( extractor,
-                                                     fieldConstraintDescr,
-                                                     (ReturnValueRestrictionDescr) restrictionDescr );
-                               
-        }   
-        
+                                 fieldConstraintDescr,
+                                 (ReturnValueRestrictionDescr) restrictionDescr );
+
+        }
+
         return restriction;
     }
 
@@ -635,7 +646,7 @@
         }
 
         final Evaluator evaluator = getEvaluator( variableRestrictionDescr,
-                                                  extractor.getObjectType().getValueType(),
+                                                  extractor.getValueType(),
                                                   variableRestrictionDescr.getEvaluator() );
         if ( evaluator == null ) {
             return null;
@@ -666,23 +677,23 @@
                 this.errors.add( new RuleError( this.rule,
                                                 literalRestrictionDescr,
                                                 e,
-                                                "Unable to create a Field value of type  '" + extractor.getObjectType().getValueType() + "' and value '" + literalRestrictionDescr.getText() + "'" ) );
+                                                "Unable to create a Field value of type  '" + extractor.getValueType() + "' and value '" + literalRestrictionDescr.getText() + "'" ) );
             }
 
         } else {
             try {
                 field = FieldFactory.getFieldValue( literalRestrictionDescr.getText(),
-                                                    extractor.getObjectType().getValueType() );
+                                                    extractor.getValueType() );
             } catch ( final Exception e ) {
                 this.errors.add( new RuleError( this.rule,
                                                 literalRestrictionDescr,
                                                 e,
-                                                "Unable to create a Field value of type  '" + extractor.getObjectType().getValueType() + "' and value '" + literalRestrictionDescr.getText() + "'" ) );
+                                                "Unable to create a Field value of type  '" + extractor.getValueType() + "' and value '" + literalRestrictionDescr.getText() + "'" ) );
             }
         }
 
         final Evaluator evaluator = getEvaluator( literalRestrictionDescr,
-                                                  extractor.getObjectType().getValueType(),
+                                                  extractor.getValueType(),
                                                   literalRestrictionDescr.getEvaluator() );
         if ( evaluator == null ) {
             return null;
@@ -707,7 +718,7 @@
         }
 
         final Evaluator evaluator = getEvaluator( returnValueRestrictionDescr,
-                                                  extractor.getObjectType().getValueType(),
+                                                  extractor.getValueType(),
                                                   returnValueRestrictionDescr.getEvaluator() );
         if ( evaluator == null ) {
             return null;
@@ -807,9 +818,10 @@
 
         st.setAttribute( "declaration",
                          declaration );
+
         st.setAttribute( "declarationType",
-                         ((ClassObjectType) declaration.getObjectType()).getClassType().getName().replace( '$',
-                                                                                                           '.' ) );
+                         declaration.getExtractor().getExtractToClass().getName().replace( '$',
+                                                                                           '.' ) );
 
         setStringTemplateAttributes( st,
                                      declarations,
@@ -839,8 +851,8 @@
         st.setAttribute( "declaration",
                          declaration );
         st.setAttribute( "declarationType",
-                         ((ClassObjectType) declaration.getObjectType()).getClassType().getName().replace( '$',
-                                                                                                           '.' ) );
+                         declaration.getExtractor().getExtractToClass().getName().replace( '$',
+                                                                                           '.' ) );
 
         setStringTemplateAttributes( st,
                                      declarations,
@@ -1024,8 +1036,8 @@
                                              final String text) {
         final String[] declarationTypes = new String[declarations.length];
         for ( int i = 0, size = declarations.length; i < size; i++ ) {
-            declarationTypes[i] = ((ClassObjectType) declarations[i].getObjectType()).getClassType().getName().replace( '$',
-                                                                                                                        '.' );
+            declarationTypes[i] = declarations[i].getExtractor().getExtractToClass().getName().replace( '$',
+                                                                                                        '.' );
         }
 
         final List globalTypes = new ArrayList( globals.length );
@@ -1067,11 +1079,11 @@
     }
 
     private Evaluator getEvaluator(final PatternDescr descr,
-                                   final int valueType,
+                                   final ValueType valueType,
                                    final String evaluatorString) {
-        final Evaluator evaluator = EvaluatorFactory.getEvaluator( valueType,
-                                                                   evaluatorString );
 
+        final Evaluator evaluator = valueType.getEvaluator( Operator.determineOperator( evaluatorString ) );
+
         if ( evaluator == null ) {
             this.errors.add( new RuleError( this.rule,
                                             descr,

Deleted: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/BoundVariableHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/BoundVariableHandler.java	2006-08-02 21:58:31 UTC (rev 5420)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/BoundVariableHandler.java	2006-08-03 00:14:06 UTC (rev 5421)
@@ -1,110 +0,0 @@
-package org.drools.xml;
-
-/*
- * Copyright 2005 JBoss Inc
- * 
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import java.util.HashSet;
-import java.util.LinkedList;
-import java.util.ListIterator;
-
-import org.drools.lang.descr.VariableDescr;
-import org.drools.lang.descr.ColumnDescr;
-import org.drools.lang.descr.FieldBindingDescr;
-import org.drools.lang.descr.LiteralDescr;
-import org.drools.lang.descr.PredicateDescr;
-import org.drools.lang.descr.ReturnValueDescr;
-import org.xml.sax.Attributes;
-import org.xml.sax.SAXException;
-import org.xml.sax.SAXParseException;
-
-/**
- * @author mproctor
- * 
- * TODO To change the template for this generated type comment go to Window -
- * Preferences - Java - Code Style - Code Templates
- */
-class BoundVariableHandler extends BaseAbstractHandler
-    implements
-    Handler {
-    BoundVariableHandler(final XmlPackageReader xmlPackageReader) {
-        this.xmlPackageReader = xmlPackageReader;
-
-        if ( (this.validParents == null) && (this.validPeers == null) ) {
-            this.validParents = new HashSet();
-            this.validParents.add( ColumnDescr.class );
-
-            this.validPeers = new HashSet();
-            this.validPeers.add( null );
-            this.validPeers.add( LiteralDescr.class );
-            this.validPeers.add( PredicateDescr.class );
-            this.validPeers.add( ReturnValueDescr.class );
-            this.validPeers.add( FieldBindingDescr.class );
-            this.validPeers.add( VariableDescr.class );
-            this.allowNesting = false;
-        }
-    }
-
-    public Object start(final String uri,
-                        final String localName,
-                        final Attributes attrs) throws SAXException {
-        this.xmlPackageReader.startConfiguration( localName,
-                                             attrs );
-
-        final String fieldName = attrs.getValue( "field-name" );
-        if ( fieldName == null || fieldName.trim().equals( "" ) ) {
-            throw new SAXParseException( "<bound-variable> requires a 'field-name' attribute",
-                                         this.xmlPackageReader.getLocator() );
-        }
-
-        final String evaluator = attrs.getValue( "evaluator" );
-        if ( evaluator == null || evaluator.trim().equals( "" ) ) {
-            throw new SAXParseException( "<bound-variable> requires an 'evaluator' attribute",
-                                         this.xmlPackageReader.getLocator() );
-        }
-
-        final String identifier = attrs.getValue( "identifier" );
-        if ( identifier == null || identifier.trim().equals( "" ) ) {
-            throw new SAXParseException( "<bound-variable>  requires an 'identifier' attribute",
-                                         this.xmlPackageReader.getLocator() );
-        }
-
-        final VariableDescr variableDescr = new VariableDescr( fieldName,
-                                                                        evaluator,
-                                                                        identifier );
-
-        return variableDescr;
-    }
-
-    public Object end(final String uri,
-                      final String localName) throws SAXException {
-        final Configuration config = this.xmlPackageReader.endConfiguration();
-
-        final VariableDescr variableDescr = (VariableDescr) this.xmlPackageReader.getCurrent();
-
-        final LinkedList parents = this.xmlPackageReader.getParents();
-        final ListIterator it = parents.listIterator( parents.size() );
-        it.previous();
-        final ColumnDescr columnDescr = (ColumnDescr) it.previous();
-
-        columnDescr.addDescr( variableDescr );
-
-        return null;
-    }
-
-    public Class generateNodeFor() {
-        return VariableDescr.class;
-    }
-}
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/FieldBindingHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/FieldBindingHandler.java	2006-08-02 21:58:31 UTC (rev 5420)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/FieldBindingHandler.java	2006-08-03 00:14:06 UTC (rev 5421)
@@ -20,12 +20,10 @@
 import java.util.LinkedList;
 import java.util.ListIterator;
 
-import org.drools.lang.descr.VariableDescr;
 import org.drools.lang.descr.ColumnDescr;
 import org.drools.lang.descr.FieldBindingDescr;
-import org.drools.lang.descr.LiteralDescr;
+import org.drools.lang.descr.FieldConstraintDescr;
 import org.drools.lang.descr.PredicateDescr;
-import org.drools.lang.descr.ReturnValueDescr;
 import org.xml.sax.Attributes;
 import org.xml.sax.SAXException;
 import org.xml.sax.SAXParseException;
@@ -48,11 +46,9 @@
 
             this.validPeers = new HashSet();
             this.validPeers.add( null );
-            this.validPeers.add( LiteralDescr.class );
+            this.validPeers.add( FieldConstraintDescr.class );
             this.validPeers.add( PredicateDescr.class );
-            this.validPeers.add( ReturnValueDescr.class );
             this.validPeers.add( FieldBindingDescr.class );
-            this.validPeers.add( VariableDescr.class );
             this.allowNesting = false;
         }
     }

Added: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/FieldConstraintHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/FieldConstraintHandler.java	2006-08-02 21:58:31 UTC (rev 5420)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/FieldConstraintHandler.java	2006-08-03 00:14:06 UTC (rev 5421)
@@ -0,0 +1,95 @@
+package org.drools.xml;
+
+/*
+ * Copyright 2005 JBoss Inc
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import java.util.HashSet;
+import java.util.LinkedList;
+import java.util.ListIterator;
+
+import org.drools.lang.descr.ColumnDescr;
+import org.drools.lang.descr.ConditionalElementDescr;
+import org.drools.lang.descr.FieldBindingDescr;
+import org.drools.lang.descr.FieldConstraintDescr;
+import org.drools.lang.descr.PredicateDescr;
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+import org.xml.sax.SAXParseException;
+
+/**
+ * @author mproctor
+ * 
+ * TODO To change the template for this generated type comment go to Window -
+ * Preferences - Java - Code Style - Code Templates
+ */
+class FieldConstraintHandler extends BaseAbstractHandler
+    implements
+    Handler {
+    FieldConstraintHandler(final XmlPackageReader xmlPackageReader) {
+        this.xmlPackageReader = xmlPackageReader;
+
+        if ( (this.validParents == null) && (this.validPeers == null) ) {
+            this.validParents = new HashSet();
+            this.validParents.add( ColumnDescr.class );
+
+            this.validPeers = new HashSet();
+            this.validPeers.add( null );
+            this.validPeers.add( FieldConstraintDescr.class );
+            this.validPeers.add( PredicateDescr.class );
+            this.validPeers.add( FieldBindingDescr.class );
+            this.allowNesting = false;
+        }
+    }
+
+    public Object start(final String uri,
+                        final String localName,
+                        final Attributes attrs) throws SAXException {
+        this.xmlPackageReader.startConfiguration( localName,
+                                             attrs );
+
+        final String fieldName = attrs.getValue( "field-name" );
+
+        if ( fieldName == null || fieldName.trim().equals( "" ) ) {
+            throw new SAXParseException( "<field-constraint> requires a 'field-name' attribute",
+                                         this.xmlPackageReader.getLocator() );
+        }               
+
+        FieldConstraintDescr fieldConstraint = new  FieldConstraintDescr( fieldName );
+
+        return fieldConstraint;
+    }
+
+    public Object end(final String uri,
+                      final String localName) throws SAXException {
+        final Configuration config = this.xmlPackageReader.endConfiguration();
+
+        final FieldConstraintDescr fieldConstraintDescr = (FieldConstraintDescr) this.xmlPackageReader.getCurrent();
+
+        final LinkedList parents = this.xmlPackageReader.getParents();
+        final ListIterator it = parents.listIterator( parents.size() );
+        it.previous();
+        final Object parent = it.previous();
+
+        final ColumnDescr columnDescr = ( ColumnDescr ) parent;
+        columnDescr.addDescr( fieldConstraintDescr );
+
+        return null;
+    }
+
+    public Class generateNodeFor() {
+        return FieldConstraintDescr.class;
+    }
+}
\ No newline at end of file

Deleted: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/LiteralHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/LiteralHandler.java	2006-08-02 21:58:31 UTC (rev 5420)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/LiteralHandler.java	2006-08-03 00:14:06 UTC (rev 5421)
@@ -1,110 +0,0 @@
-package org.drools.xml;
-
-/*
- * Copyright 2005 JBoss Inc
- * 
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import java.util.HashSet;
-import java.util.LinkedList;
-import java.util.ListIterator;
-
-import org.drools.lang.descr.VariableDescr;
-import org.drools.lang.descr.ColumnDescr;
-import org.drools.lang.descr.FieldBindingDescr;
-import org.drools.lang.descr.LiteralDescr;
-import org.drools.lang.descr.PredicateDescr;
-import org.drools.lang.descr.ReturnValueDescr;
-import org.xml.sax.Attributes;
-import org.xml.sax.SAXException;
-import org.xml.sax.SAXParseException;
-
-/**
- * @author mproctor
- * 
- * TODO To change the template for this generated type comment go to Window -
- * Preferences - Java - Code Style - Code Templates
- */
-class LiteralHandler extends BaseAbstractHandler
-    implements
-    Handler {
-    LiteralHandler(final XmlPackageReader xmlPackageReader) {
-        this.xmlPackageReader = xmlPackageReader;
-
-        if ( (this.validParents == null) && (this.validPeers == null) ) {
-            this.validParents = new HashSet();
-            this.validParents.add( ColumnDescr.class );
-
-            this.validPeers = new HashSet();
-            this.validPeers.add( null );
-            this.validPeers.add( LiteralDescr.class );
-            this.validPeers.add( PredicateDescr.class );
-            this.validPeers.add( ReturnValueDescr.class );
-            this.validPeers.add( FieldBindingDescr.class );
-            this.validPeers.add( VariableDescr.class );
-            this.allowNesting = false;
-        }
-    }
-
-    public Object start(final String uri,
-                        final String localName,
-                        final Attributes attrs) throws SAXException {
-        this.xmlPackageReader.startConfiguration( localName,
-                                             attrs );
-
-        final String fieldName = attrs.getValue( "field-name" );
-        if ( fieldName == null || fieldName.trim().equals( "" ) ) {
-            throw new SAXParseException( "<literal> requires a 'field-name' attribute",
-                                         this.xmlPackageReader.getLocator() );
-        }
-
-        final String evaluator = attrs.getValue( "evaluator" );
-        if ( evaluator == null || evaluator.trim().equals( "" ) ) {
-            throw new SAXParseException( "<literal> requires an 'evaluator' attribute",
-                                         this.xmlPackageReader.getLocator() );
-        }
-
-        final String text = attrs.getValue( "value" );
-        if ( text == null || text.trim().equals( "" ) ) {
-            throw new SAXParseException( "<literal>  requires an 'value' attribute",
-                                         this.xmlPackageReader.getLocator() );
-        }
-
-        final LiteralDescr literalDescr = new LiteralDescr( fieldName,
-                                                      evaluator,
-                                                      text );
-
-        return literalDescr;
-    }
-
-    public Object end(final String uri,
-                      final String localName) throws SAXException {
-        final Configuration config = this.xmlPackageReader.endConfiguration();
-
-        final LiteralDescr literalDescr = (LiteralDescr) this.xmlPackageReader.getCurrent();
-
-        final LinkedList parents = this.xmlPackageReader.getParents();
-        final ListIterator it = parents.listIterator( parents.size() );
-        it.previous();
-        final ColumnDescr columnDescr = (ColumnDescr) it.previous();
-
-        columnDescr.addDescr( literalDescr );
-
-        return null;
-    }
-
-    public Class generateNodeFor() {
-        return LiteralDescr.class;
-    }
-}
\ No newline at end of file

Copied: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/LiteralRestrictionHandler.java (from rev 5380, labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/LiteralHandler.java)
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/LiteralHandler.java	2006-08-01 14:51:08 UTC (rev 5380)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/LiteralRestrictionHandler.java	2006-08-03 00:14:06 UTC (rev 5421)
@@ -0,0 +1,103 @@
+package org.drools.xml;
+
+/*
+ * Copyright 2005 JBoss Inc
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import java.util.HashSet;
+import java.util.LinkedList;
+import java.util.ListIterator;
+
+import org.drools.lang.descr.FieldConstraintDescr;
+import org.drools.lang.descr.LiteralRestrictionDescr;
+import org.drools.lang.descr.ReturnValueRestrictionDescr;
+import org.drools.lang.descr.ColumnDescr;
+import org.drools.lang.descr.FieldBindingDescr;
+import org.drools.lang.descr.PredicateDescr;
+import org.drools.lang.descr.VariableRestrictionDescr;
+import org.drools.rule.LiteralRestriction;
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+import org.xml.sax.SAXParseException;
+
+/**
+ * @author mproctor
+ * 
+ * TODO To change the template for this generated type comment go to Window -
+ * Preferences - Java - Code Style - Code Templates
+ */
+class LiteralRestrictionHandler extends BaseAbstractHandler
+    implements
+    Handler {
+    LiteralRestrictionHandler(final XmlPackageReader xmlPackageReader) {
+        this.xmlPackageReader = xmlPackageReader;
+
+        if ( (this.validParents == null) && (this.validPeers == null) ) {
+            this.validParents = new HashSet();
+            this.validParents.add( FieldConstraintDescr.class );
+
+            this.validPeers = new HashSet();
+            this.validPeers.add( null );
+            this.validPeers.add( LiteralRestrictionDescr.class );
+            this.validPeers.add( ReturnValueRestrictionDescr.class );
+            this.validPeers.add( VariableRestrictionDescr.class );
+            this.allowNesting = false;
+        }
+    }
+
+    public Object start(final String uri,
+                        final String localName,
+                        final Attributes attrs) throws SAXException {
+        this.xmlPackageReader.startConfiguration( localName,
+                                                  attrs );
+
+        final String evaluator = attrs.getValue( "evaluator" );
+        if ( evaluator == null || evaluator.trim().equals( "" ) ) {
+            throw new SAXParseException( "<literal-restriction> requires an 'evaluator' attribute",
+                                         this.xmlPackageReader.getLocator() );
+        }
+
+        final String text = attrs.getValue( "value" );
+        if ( text == null || text.trim().equals( "" ) ) {
+            throw new SAXParseException( "<literal-restriction>  requires an 'value' attribute",
+                                         this.xmlPackageReader.getLocator() );
+        }
+
+        final LiteralRestrictionDescr literalDescr = new LiteralRestrictionDescr( evaluator,
+                                                                                  text );
+
+        return literalDescr;
+    }
+
+    public Object end(final String uri,
+                      final String localName) throws SAXException {
+        final Configuration config = this.xmlPackageReader.endConfiguration();
+
+        final LiteralRestrictionDescr literalDescr = (LiteralRestrictionDescr) this.xmlPackageReader.getCurrent();
+
+        final LinkedList parents = this.xmlPackageReader.getParents();
+        final ListIterator it = parents.listIterator( parents.size() );
+        it.previous();
+        final FieldConstraintDescr fieldConstriantDescr = (FieldConstraintDescr) it.previous();
+
+        fieldConstriantDescr.addRestriction( literalDescr );
+
+        return null;
+    }
+
+    public Class generateNodeFor() {
+        return LiteralRestrictionDescr.class;
+    }
+}
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/PredicateHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/PredicateHandler.java	2006-08-02 21:58:31 UTC (rev 5420)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/PredicateHandler.java	2006-08-03 00:14:06 UTC (rev 5421)
@@ -20,12 +20,10 @@
 import java.util.LinkedList;
 import java.util.ListIterator;
 
-import org.drools.lang.descr.VariableDescr;
 import org.drools.lang.descr.ColumnDescr;
 import org.drools.lang.descr.FieldBindingDescr;
-import org.drools.lang.descr.LiteralDescr;
+import org.drools.lang.descr.FieldConstraintDescr;
 import org.drools.lang.descr.PredicateDescr;
-import org.drools.lang.descr.ReturnValueDescr;
 import org.xml.sax.Attributes;
 import org.xml.sax.SAXException;
 import org.xml.sax.SAXParseException;
@@ -48,11 +46,9 @@
 
             this.validPeers = new HashSet();
             this.validPeers.add( null );
-            this.validPeers.add( LiteralDescr.class );
+            this.validPeers.add( FieldConstraintDescr.class );
             this.validPeers.add( PredicateDescr.class );
-            this.validPeers.add( ReturnValueDescr.class );
             this.validPeers.add( FieldBindingDescr.class );
-            this.validPeers.add( VariableDescr.class );
             this.allowNesting = false;
         }
     }

Deleted: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/ReturnValueHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/ReturnValueHandler.java	2006-08-02 21:58:31 UTC (rev 5420)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/ReturnValueHandler.java	2006-08-03 00:14:06 UTC (rev 5421)
@@ -1,112 +0,0 @@
-package org.drools.xml;
-
-/*
- * Copyright 2005 JBoss Inc
- * 
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import java.util.HashSet;
-import java.util.LinkedList;
-import java.util.ListIterator;
-
-import org.drools.lang.descr.VariableDescr;
-import org.drools.lang.descr.ColumnDescr;
-import org.drools.lang.descr.FieldBindingDescr;
-import org.drools.lang.descr.LiteralDescr;
-import org.drools.lang.descr.PredicateDescr;
-import org.drools.lang.descr.ReturnValueDescr;
-import org.xml.sax.Attributes;
-import org.xml.sax.SAXException;
-import org.xml.sax.SAXParseException;
-
-/**
- * @author mproctor
- * 
- * TODO To change the template for this generated type comment go to Window -
- * Preferences - Java - Code Style - Code Templates
- */
-class ReturnValueHandler extends BaseAbstractHandler
-    implements
-    Handler {
-    ReturnValueHandler(final XmlPackageReader xmlPackageReader) {
-        this.xmlPackageReader = xmlPackageReader;
-
-        if ( (this.validParents == null) && (this.validPeers == null) ) {
-            this.validParents = new HashSet();
-            this.validParents.add( ColumnDescr.class );
-
-            this.validPeers = new HashSet();
-            this.validPeers.add( null );
-            this.validPeers.add( LiteralDescr.class );
-            this.validPeers.add( PredicateDescr.class );
-            this.validPeers.add( ReturnValueDescr.class );
-            this.validPeers.add( FieldBindingDescr.class );
-            this.validPeers.add( VariableDescr.class );
-            this.allowNesting = false;
-        }
-    }
-
-    public Object start(final String uri,
-                        final String localName,
-                        final Attributes attrs) throws SAXException {
-        this.xmlPackageReader.startConfiguration( localName,
-                                             attrs );
-
-        final String fieldName = attrs.getValue( "field-name" );
-        if ( fieldName == null || fieldName.trim().equals( "" ) ) {
-            throw new SAXParseException( "<return-value> requires a 'field-name' attribute",
-                                         this.xmlPackageReader.getLocator() );
-        }
-
-        final String evaluator = attrs.getValue( "evaluator" );
-        if ( evaluator == null || evaluator.trim().equals( "" ) ) {
-            throw new SAXParseException( "<return-value> requires an 'evaluator' attribute",
-                                         this.xmlPackageReader.getLocator() );
-        }
-
-        final ReturnValueDescr returnValueDescr = new ReturnValueDescr( fieldName,
-                                                                  evaluator );
-
-        return returnValueDescr;
-    }
-
-    public Object end(final String uri,
-                      final String localName) throws SAXException {
-        final Configuration config = this.xmlPackageReader.endConfiguration();
-
-        final ReturnValueDescr returnValueDescr = (ReturnValueDescr) this.xmlPackageReader.getCurrent();
-
-        final String expression = config.getText();
-
-        if ( expression == null || expression.trim().equals( "" ) ) {
-            throw new SAXParseException( "<return-value> must have some content",
-                                         this.xmlPackageReader.getLocator() );
-        }
-
-        returnValueDescr.setText( expression );
-
-        final LinkedList parents = this.xmlPackageReader.getParents();
-        final ListIterator it = parents.listIterator( parents.size() );
-        it.previous();
-        final ColumnDescr columnDescr = (ColumnDescr) it.previous();
-
-        columnDescr.addDescr( returnValueDescr );
-
-        return null;
-    }
-
-    public Class generateNodeFor() {
-        return ReturnValueDescr.class;
-    }
-}
\ No newline at end of file

Copied: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/ReturnValueRestrictionHandler.java (from rev 5380, labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/ReturnValueHandler.java)
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/ReturnValueHandler.java	2006-08-01 14:51:08 UTC (rev 5380)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/ReturnValueRestrictionHandler.java	2006-08-03 00:14:06 UTC (rev 5421)
@@ -0,0 +1,100 @@
+package org.drools.xml;
+
+/*
+ * Copyright 2005 JBoss Inc
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import java.util.HashSet;
+import java.util.LinkedList;
+import java.util.ListIterator;
+
+import org.drools.lang.descr.FieldConstraintDescr;
+import org.drools.lang.descr.LiteralRestrictionDescr;
+import org.drools.lang.descr.ReturnValueRestrictionDescr;
+import org.drools.lang.descr.VariableRestrictionDescr;
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+import org.xml.sax.SAXParseException;
+
+/**
+ * @author mproctor
+ * 
+ * TODO To change the template for this generated type comment go to Window -
+ * Preferences - Java - Code Style - Code Templates
+ */
+class ReturnValueRestrictionHandler extends BaseAbstractHandler
+    implements
+    Handler {
+    ReturnValueRestrictionHandler(final XmlPackageReader xmlPackageReader) {
+        this.xmlPackageReader = xmlPackageReader;
+
+        if ( (this.validParents == null) && (this.validPeers == null) ) {
+            this.validParents = new HashSet();
+            this.validParents.add( FieldConstraintDescr.class );
+
+            this.validPeers = new HashSet();
+            this.validPeers.add( null );
+            this.validPeers.add( LiteralRestrictionDescr.class );
+            this.validPeers.add( ReturnValueRestrictionDescr.class );
+            this.validPeers.add( VariableRestrictionDescr.class );
+            this.allowNesting = false;
+        }
+    }
+
+    public Object start(final String uri,
+                        final String localName,
+                        final Attributes attrs) throws SAXException {
+        this.xmlPackageReader.startConfiguration( localName,
+                                                  attrs );
+        final String evaluator = attrs.getValue( "evaluator" );
+        if ( evaluator == null || evaluator.trim().equals( "" ) ) {
+            throw new SAXParseException( "<return-value-restriction> requires an 'evaluator' attribute",
+                                         this.xmlPackageReader.getLocator() );
+        }
+
+        final ReturnValueRestrictionDescr returnValueDescr = new ReturnValueRestrictionDescr( evaluator );
+
+        return returnValueDescr;
+    }
+
+    public Object end(final String uri,
+                      final String localName) throws SAXException {
+        final Configuration config = this.xmlPackageReader.endConfiguration();
+
+        final ReturnValueRestrictionDescr returnValueDescr = (ReturnValueRestrictionDescr) this.xmlPackageReader.getCurrent();
+
+        final String expression = config.getText();
+
+        if ( expression == null || expression.trim().equals( "" ) ) {
+            throw new SAXParseException( "<return-value-restriction> must have some content",
+                                         this.xmlPackageReader.getLocator() );
+        }
+
+        returnValueDescr.setText( expression );
+
+        final LinkedList parents = this.xmlPackageReader.getParents();
+        final ListIterator it = parents.listIterator( parents.size() );
+        it.previous();
+        final FieldConstraintDescr fieldConstraintDescr = (FieldConstraintDescr) it.previous();
+
+        fieldConstraintDescr.addRestriction( returnValueDescr );
+
+        return null;
+    }
+
+    public Class generateNodeFor() {
+        return ReturnValueRestrictionDescr.class;
+    }
+}
\ No newline at end of file

Copied: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/VariableRestrictionsHandler.java (from rev 5380, labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/BoundVariableHandler.java)
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/BoundVariableHandler.java	2006-08-01 14:51:08 UTC (rev 5380)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/VariableRestrictionsHandler.java	2006-08-03 00:14:06 UTC (rev 5421)
@@ -0,0 +1,102 @@
+package org.drools.xml;
+
+/*
+ * Copyright 2005 JBoss Inc
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import java.util.HashSet;
+import java.util.LinkedList;
+import java.util.ListIterator;
+
+import org.drools.lang.descr.FieldConstraintDescr;
+import org.drools.lang.descr.LiteralRestrictionDescr;
+import org.drools.lang.descr.ReturnValueRestrictionDescr;
+import org.drools.lang.descr.ColumnDescr;
+import org.drools.lang.descr.FieldBindingDescr;
+import org.drools.lang.descr.PredicateDescr;
+import org.drools.lang.descr.VariableRestrictionDescr;
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+import org.xml.sax.SAXParseException;
+
+/**
+ * @author mproctor
+ * 
+ * TODO To change the template for this generated type comment go to Window -
+ * Preferences - Java - Code Style - Code Templates
+ */
+class VariableRestrictionsHandler extends BaseAbstractHandler
+    implements
+    Handler {
+    VariableRestrictionsHandler(final XmlPackageReader xmlPackageReader) {
+        this.xmlPackageReader = xmlPackageReader;
+
+        if ( (this.validParents == null) && (this.validPeers == null) ) {
+            this.validParents = new HashSet();
+            this.validParents.add( FieldConstraintDescr.class );
+
+            this.validPeers = new HashSet();
+            this.validPeers.add( null );
+            this.validPeers.add( LiteralRestrictionDescr.class );
+            this.validPeers.add( ReturnValueRestrictionDescr.class );
+            this.validPeers.add( VariableRestrictionDescr.class );
+            this.allowNesting = false;
+        }
+    }
+
+    public Object start(final String uri,
+                        final String localName,
+                        final Attributes attrs) throws SAXException {
+        this.xmlPackageReader.startConfiguration( localName,
+                                             attrs );
+
+        final String evaluator = attrs.getValue( "evaluator" );
+        if ( evaluator == null || evaluator.trim().equals( "" ) ) {
+            throw new SAXParseException( "<bound-variable> requires an 'evaluator' attribute",
+                                         this.xmlPackageReader.getLocator() );
+        }
+
+        final String identifier = attrs.getValue( "identifier" );
+        if ( identifier == null || identifier.trim().equals( "" ) ) {
+            throw new SAXParseException( "<bound-variable>  requires an 'identifier' attribute",
+                                         this.xmlPackageReader.getLocator() );
+        }
+
+        final VariableRestrictionDescr variableDescr = new VariableRestrictionDescr( evaluator,
+                                                                                     identifier );
+
+        return variableDescr;
+    }
+
+    public Object end(final String uri,
+                      final String localName) throws SAXException {
+        final Configuration config = this.xmlPackageReader.endConfiguration();
+
+        final VariableRestrictionDescr variableDescr = (VariableRestrictionDescr) this.xmlPackageReader.getCurrent();
+
+        final LinkedList parents = this.xmlPackageReader.getParents();
+        final ListIterator it = parents.listIterator( parents.size() );
+        it.previous();
+        final FieldConstraintDescr fieldConstraintDescr = (FieldConstraintDescr) it.previous();
+
+        fieldConstraintDescr.addRestriction( variableDescr );
+
+        return null;
+    }
+
+    public Class generateNodeFor() {
+        return VariableRestrictionDescr.class;
+    }
+}
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/XmlDumper.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/XmlDumper.java	2006-08-02 21:58:31 UTC (rev 5420)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/XmlDumper.java	2006-08-03 00:14:06 UTC (rev 5421)
@@ -23,21 +23,22 @@
 
 import org.drools.lang.descr.AndDescr;
 import org.drools.lang.descr.AttributeDescr;
-import org.drools.lang.descr.VariableDescr;
 import org.drools.lang.descr.ColumnDescr;
 import org.drools.lang.descr.EvalDescr;
 import org.drools.lang.descr.ExistsDescr;
 import org.drools.lang.descr.FieldBindingDescr;
+import org.drools.lang.descr.FieldConstraintDescr;
 import org.drools.lang.descr.FunctionDescr;
-import org.drools.lang.descr.LiteralDescr;
+import org.drools.lang.descr.LiteralRestrictionDescr;
 import org.drools.lang.descr.NotDescr;
 import org.drools.lang.descr.OrDescr;
 import org.drools.lang.descr.PackageDescr;
 import org.drools.lang.descr.PackageDescrDumper;
 import org.drools.lang.descr.PredicateDescr;
 import org.drools.lang.descr.QueryDescr;
-import org.drools.lang.descr.ReturnValueDescr;
+import org.drools.lang.descr.ReturnValueRestrictionDescr;
 import org.drools.lang.descr.RuleDescr;
+import org.drools.lang.descr.VariableRestrictionDescr;
 import org.drools.util.ReflectiveVisitor;
 
 /**
@@ -72,9 +73,9 @@
         this.template = "<rule-attribute name=\"" + attributeDescr.getName() + "\" value=\"" + attributeDescr.getValue() + "\" />" + XmlDumper.eol;
     }
 
-    public void visitBoundVariableDescr(final VariableDescr descr) {
+    public void visitVariableRestrictionDescr(final VariableRestrictionDescr descr) {
         this.template = new String();
-        this.template = "<bound-variable field-name=\"" + descr.getFieldName() + "\" evaluator=\"" + getEvaluator( descr.getEvaluator() ) + "\" identifier=\"" + descr.getIdentifier() + "\" />" + XmlDumper.eol;
+        this.template = "<variable-restriction evaluator=\"" + getEvaluator( descr.getEvaluator() ) + "\" identifier=\"" + descr.getIdentifier() + "\" />" + XmlDumper.eol;
     }
 
     public void visitColumnDescr(final ColumnDescr descr) {
@@ -95,6 +96,12 @@
 
     }
 
+    public void visitFieldConstraintDescr(final FieldConstraintDescr descr) {
+        if ( !descr.getRestrictions().isEmpty() ) {
+            processFieldConstraint( descr.getRestrictions() );
+        } 
+    }      
+    
     public void visitEvalDescr(final EvalDescr descr) {
         this.template = new String();
         this.template = "<eval>" + descr.getText() + "</eval>" + XmlDumper.eol;
@@ -122,9 +129,9 @@
         this.template = "<function return-type=\"" + functionDescr.getReturnType() + "\" name=\"" + functionDescr.getName() + "\">" + XmlDumper.eol + parameterTemplate + "<body>" + XmlDumper.eol + functionDescr.getText() + XmlDumper.eol + "</body>" + XmlDumper.eol + "</function>" + XmlDumper.eol;
     }
 
-    public void visitLiteralDescr(final LiteralDescr descr) {
+    public void visitLiteralRestrictionDescr(final LiteralRestrictionDescr descr) {
         this.template = new String();
-        this.template = "<literal field-name=\"" + descr.getFieldName() + "\" evaluator=\"" + getEvaluator( descr.getEvaluator() ) + "\" value=\"" + descr.getText() + "\" />" + XmlDumper.eol;
+        this.template = "<literal-restriction evaluator=\"" + getEvaluator( descr.getEvaluator() ) + "\" value=\"" + descr.getText() + "\" />" + XmlDumper.eol;
     }
 
     public void visitNotDescr(final NotDescr descr) {
@@ -161,12 +168,11 @@
     public void visitPredicateDescr(final PredicateDescr descr) {
         this.template = new String();
         this.template = "<predicate field-name=\"" + descr.getFieldName() + "\" identifier=\"" + descr.getDeclaration() + "\" >" + descr.getText() + "</predicate>" + XmlDumper.eol;
-
     }
 
-    public void visitReturnValueDescr(final ReturnValueDescr descr) {
+    public void visitReturnValueRestrictionDescr(final ReturnValueRestrictionDescr descr) {
         this.template = new String();
-        this.template = "<return-value field-name=\"" + descr.getFieldName() + "\" evaluator=\"" + getEvaluator( descr.getEvaluator() ) + "\" >" + descr.getText() + "</return-value>" + XmlDumper.eol;
+        this.template = "<return-value-restriction evaluator=\"" + getEvaluator( descr.getEvaluator() ) + "\" >" + descr.getText() + "</return-value>" + XmlDumper.eol;
     }
 
     public void visitQueryDescr(final QueryDescr descr) {
@@ -200,6 +206,19 @@
 
         return ruleList + XmlDumper.eol;
     }
+    
+    private String processFieldConstraint(List list) {
+        String descrString = "";
+        for ( final Iterator it = list.iterator(); it.hasNext(); ) {
+            final Object temp = it.next();
+            descrString += "<field-restrictions name=\"" +((FieldConstraintDescr) temp).getFieldName() + "\"> ";
+            visit( temp );
+            descrString += "</field-restrictions>"; 
+            descrString += this.template;
+        }
+        return descrString.substring( 0,
+                                      descrString.length() - 2 );
+    }      
 
     private String processDescrList(final List descr) {
         String descrString = "";

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/XmlPackageReader.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/XmlPackageReader.java	2006-08-02 21:58:31 UTC (rev 5420)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/XmlPackageReader.java	2006-08-03 00:14:06 UTC (rev 5421)
@@ -102,9 +102,9 @@
 
     private boolean             inHandledRuleSubElement;
 
-    private final MessageFormat       message                       = new MessageFormat( "({0}: {1}, {2}): {3}" );
+    private final MessageFormat message                       = new MessageFormat( "({0}: {1}, {2}): {3}" );
 
-    private final Map                 namespaces                    = new HashMap();
+    private final Map           namespaces                    = new HashMap();
 
     EntityResolver              entityResolver;
 
@@ -155,16 +155,18 @@
                            new ColumnHandler( this ) );
 
         // Field Constraints
-        this.handlers.put( "literal",
-                           new LiteralHandler( this ) );
+        this.handlers.put( "field-constraint",
+                           new FieldConstraintHandler( this ) );
+        this.handlers.put( "literal-restriction",
+                           new LiteralRestrictionHandler( this ) );
+        this.handlers.put( "variable-restriction",
+                           new VariableRestrictionsHandler( this ) );        
         this.handlers.put( "predicate",
                            new PredicateHandler( this ) );
-        this.handlers.put( "return-value",
-                           new ReturnValueHandler( this ) );
+        this.handlers.put( "return-value-restriction",
+                           new ReturnValueRestrictionHandler( this ) );
         this.handlers.put( "field-binding",
                            new FieldBindingHandler( this ) );
-        this.handlers.put( "bound-variable",
-                           new BoundVariableHandler( this ) );
 
         initEntityResolver();
 
@@ -197,7 +199,7 @@
      * @return The rule-set.
      */
     public PackageDescr read(final Reader reader) throws SAXException,
-                                           IOException {
+                                                 IOException {
         return read( new InputSource( reader ) );
     }
 
@@ -210,7 +212,7 @@
      * @return The rule-set.
      */
     public PackageDescr read(final InputStream inputStream) throws SAXException,
-                                                     IOException {
+                                                           IOException {
         return read( new InputSource( inputStream ) );
     }
 
@@ -223,7 +225,7 @@
      * @return The rule-set.
      */
     public PackageDescr read(final InputSource in) throws SAXException,
-                                            IOException {
+                                                  IOException {
         SAXParser localParser = null;
         if ( this.parser == null ) {
             final SAXParserFactory factory = SAXParserFactory.newInstance();
@@ -355,8 +357,8 @@
                   handler );
 
         final Object node = handler.start( uri,
-                                     localName,
-                                     attrs );
+                                           localName,
+                                           attrs );
 
         if ( node != null ) {
             this.parents.add( node );
@@ -391,7 +393,7 @@
         this.current = getParent( handler.generateNodeFor() );
 
         final Object node = handler.end( uri,
-                                   localName );
+                                         localName );
 
         // next
         if ( node != null && !this.lastWasEndElement ) {
@@ -587,13 +589,13 @@
                                      final String systemId) throws SAXException {
         try {
             final InputSource inputSource = resolveSchema( publicId,
-                                                     systemId );
+                                                           systemId );
             if ( inputSource != null ) {
                 return inputSource;
             }
             if ( this.entityResolver != null ) {
                 return this.entityResolver.resolveEntity( publicId,
-                                                     systemId );
+                                                          systemId );
             }
         } catch ( final IOException ioe ) {
         }
@@ -605,7 +607,7 @@
         super.startPrefixMapping( prefix,
                                   uri );
         this.namespaces.put( prefix,
-                        uri );
+                             uri );
     }
 
     public void endPrefixMapping(final String prefix) throws SAXException {
@@ -633,7 +635,7 @@
 
     private InputSource resolveSchema(final String publicId,
                                       final String systemId) throws SAXException,
-                                                      IOException {
+                                                            IOException {
         // Schema files must end with xsd
         if ( !systemId.toLowerCase().endsWith( "xsd" ) ) {
             return null;

Modified: labs/jbossrules/trunk/drools-compiler/src/main/resources/META-INF/drools-3.0.xsd
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/resources/META-INF/drools-3.0.xsd	2006-08-02 21:58:31 UTC (rev 5420)
+++ labs/jbossrules/trunk/drools-compiler/src/main/resources/META-INF/drools-3.0.xsd	2006-08-03 00:14:06 UTC (rev 5421)
@@ -169,15 +169,24 @@
     <xs:complexType>
       <xs:choice maxOccurs="unbounded" minOccurs="0">
         <xs:element ref="drools:field-binding"/>        
-        <xs:element ref="drools:literal"/>                      
+        <xs:element ref="drools:field-constraint"/>                      
         <xs:element ref="drools:predicate"/>                
-        <xs:element ref="drools:return-value"/>                
-        <xs:element ref="drools:bound-variable"/>   
       </xs:choice>   
       <xs:attribute name="identifier" type="xs:string" use="optional"/>                
       <xs:attribute name="object-type" type="xs:string" use="required"/>   
     </xs:complexType>
   </xs:element>    
+
+  <xs:element name="field-constraint">
+    <xs:complexType>
+      <xs:choice maxOccurs="unbounded" minOccurs="0">  
+        <xs:element ref="drools:literal-restriction"/>                      
+        <xs:element ref="drools:variable-restriction"/>                
+        <xs:element ref="drools:return-value-restriction"/>                
+      </xs:choice>   
+      <xs:attribute name="field-name" type="xs:string" use="required"/>                
+    </xs:complexType>
+  </xs:element>    
   
   <xs:element name="field-binding">
     <xs:complexType>
@@ -186,41 +195,39 @@
     </xs:complexType>
   </xs:element>     
   
-  <xs:element name="literal">
+  <xs:element name="literal-restriction">
     <xs:complexType>
-      <xs:attribute name="field-name" type="xs:string" use="required"/>    
       <xs:attribute name="evaluator" type="xs:string" use="required"/>      
       <xs:attribute name="value" type="xs:string" use="required"/>            
     </xs:complexType>
   </xs:element>  
-
-  <xs:element name="predicate">
+  
+  <xs:element name="variable-restriction">
     <xs:complexType>
+      <xs:attribute name="evaluator" type="xs:string" use="required"/>      
+      <xs:attribute name="identifier" type="xs:string" use="required"/>            
+    </xs:complexType>
+  </xs:element>    
+  
+  <xs:element name="return-value-restriction">
+    <xs:complexType>
       <xs:simpleContent>
         <xs:extension base="xs:string">
-        <xs:attribute name="field-name" type="xs:string" use="required"/>    
-        <xs:attribute name="identifier" type="xs:string" use="required"/>  
+        <xs:attribute name="evaluator" type="xs:string" use="required"/>  
         </xs:extension>
       </xs:simpleContent>
     </xs:complexType>
-  </xs:element>  
+  </xs:element>   
   
-  <xs:element name="return-value">
+  <xs:element name="predicate">
     <xs:complexType>
       <xs:simpleContent>
         <xs:extension base="xs:string">
         <xs:attribute name="field-name" type="xs:string" use="required"/>    
-        <xs:attribute name="evaluator" type="xs:string" use="required"/>  
+        <xs:attribute name="identifier" type="xs:string" use="required"/>  
         </xs:extension>
       </xs:simpleContent>
     </xs:complexType>
-  </xs:element>   
-  
-  <xs:element name="bound-variable">
-    <xs:complexType>
-      <xs:attribute name="field-name" type="xs:string" use="required"/>    
-      <xs:attribute name="evaluator" type="xs:string" use="required"/>      
-      <xs:attribute name="identifier" type="xs:string" use="required"/>            
-    </xs:complexType>
   </xs:element>    
+    
 </xs:schema>

Copied: labs/jbossrules/trunk/drools-compiler/src/main/resources/drl.g (from rev 5295, labs/jbossrules/trunk/drools-compiler/src/main/resources/org/drools/lang/drl.g)

Deleted: labs/jbossrules/trunk/drools-compiler/src/main/resources/org/drools/lang/drl.g
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/resources/org/drools/lang/drl.g	2006-08-02 21:58:31 UTC (rev 5420)
+++ labs/jbossrules/trunk/drools-compiler/src/main/resources/org/drools/lang/drl.g	2006-08-03 00:14:06 UTC (rev 5421)
@@ -1,1136 +0,0 @@
-grammar RuleParser; 
-
- at parser::header {
-	package org.drools.lang;
-	import java.util.List;
-	import java.util.ArrayList;
-	import java.util.Iterator;
-	import java.util.StringTokenizer;
-	import org.drools.lang.descr.*;
-}
-
- at parser::members {
-	private ExpanderResolver expanderResolver;
-	private Expander expander;
-	private boolean expanderDebug = false;
-	private PackageDescr packageDescr;
-	private List errors = new ArrayList();
-	private String source = "unknown";
-	private int lineOffset = 0;
-	
-	private boolean parserDebug = false;
-	
-	public void setParserDebug(boolean parserDebug) {
-		this.parserDebug = parserDebug;
-	}
-	
-	public void debug(String message) {
-		if ( parserDebug ) 
-			System.err.println( "drl parser: " + message );
-	}
-	
-	public void setSource(String source) {
-		this.source = source;
-	}
-
-	/**
-	 * This may be set to enable debuggin of DSLs/expanders.
-	 * If set to true, expander stuff will be sent to the Std out.
-	 */	
-	public void setExpanderDebug(boolean status) {
-		expanderDebug = status;
-	}
-	public String getSource() {
-		return this.source;
-	}
-	
-	public PackageDescr getPackageDescr() {
-		return packageDescr;
-	}
-	
-	private int offset(int line) {
-		return line + lineOffset;
-	}
-	
-	/**
-	 * This will set the offset to record when reparsing. Normally is zero of course 
-	 */
-	public void setLineOffset(int i) {
-	 	this.lineOffset = i;
-	}
-	
-	public void setExpanderResolver(ExpanderResolver expanderResolver) {
-		this.expanderResolver = expanderResolver;
-	}
-	
-	public ExpanderResolver getExpanderResolver() {
-		return expanderResolver;
-	}
-	
-	/** Expand the LHS */
-	private String runWhenExpander(String text, int line) throws RecognitionException {
-		String expanded = text.trim();
-		if (expanded.startsWith(">")) {
-			expanded = expanded.substring(1);  //escape !!
-		} else {
-			try {
-				expanded = expander.expand( "when", text );			
-			} catch (Exception e) {
-				this.errors.add(new ExpanderException("Unable to expand: " + text + ". Due to " + e.getMessage(), line));
-				return "";
-			}
-		}
-		if (expanderDebug) {
-			System.out.println("Expanding LHS: " + text + " ----> " + expanded + " --> from line: " + line);
-		}
-		return expanded;	
-		
-	}
-
-        /** Reparse the results of the expansion */
-    	private void reparseLhs(String text, AndDescr descrs) throws RecognitionException {
-    		CharStream charStream = new ANTLRStringStream( text );
-    		RuleParserLexer lexer = new RuleParserLexer( charStream );
-    		TokenStream tokenStream = new CommonTokenStream( lexer );
-    		RuleParser parser = new RuleParser( tokenStream );
-    		parser.setLineOffset( descrs.getLine() );
-    		parser.normal_lhs_block(descrs);
-            
-                if (parser.hasErrors()) {
-    			this.errors.addAll(parser.getErrors());
-    		}
-		if (expanderDebug) {
-			System.out.println("Reparsing LHS: " + text + " --> successful:" + !parser.hasErrors());
-		}    		
-    		
-    	}
-	
-	/** Expand a line on the RHS */
-	private String runThenExpander(String text, int startLine) {
-		//System.err.println( "expand THEN [" + text + "]" );
-		StringTokenizer lines = new StringTokenizer( text, "\n\r" );
-
-		StringBuffer expanded = new StringBuffer();
-		
-		String eol = System.getProperty( "line.separator" );
-				
-		while ( lines.hasMoreTokens() ) {
-			startLine++;
-			String line = lines.nextToken();
-			line = line.trim();
-			if ( line.length() > 0 ) {
-				if ( line.startsWith( ">" ) ) {
-					expanded.append( line.substring( 1 ) );
-					expanded.append( eol );
-				} else {
-					try {
-						expanded.append( expander.expand( "then", line ) );
-						expanded.append( eol );
-					} catch (Exception e) {
-						this.errors.add(new ExpanderException("Unable to expand: " + line + ". Due to " + e.getMessage(), startLine));			
-					}
-				}
-			}
-		}
-		
-		if (expanderDebug) {
-			System.out.println("Expanding RHS: " + text + " ----> " + expanded.toString() + " --> from line starting: " + startLine);
-		}		
-		
-		return expanded.toString();
-	}
-	
-
-	
-	private String getString(Token token) {
-		String orig = token.getText();
-		return orig.substring( 1, orig.length() -1 );
-	}
-	
-	public void reportError(RecognitionException ex) {
-	        // if we've already reported an error and have not matched a token
-                // yet successfully, don't report any errors.
-                if ( errorRecovery ) {
-                        return;
-                }
-                errorRecovery = true;
-
-		ex.line = offset(ex.line); //add the offset if there is one
-		errors.add( ex ); 
-	}
-     	
-     	/** return the raw RecognitionException errors */
-     	public List getErrors() {
-     		return errors;
-     	}
-     	
-     	/** Return a list of pretty strings summarising the errors */
-     	public List getErrorMessages() {
-     		List messages = new ArrayList();
- 		for ( Iterator errorIter = errors.iterator() ; errorIter.hasNext() ; ) {
-     	     		messages.add( createErrorMessage( (RecognitionException) errorIter.next() ) );
-     	     	}
-     	     	return messages;
-     	}
-     	
-     	/** return true if any parser errors were accumulated */
-     	public boolean hasErrors() {
-  		return ! errors.isEmpty();
-     	}
-     	
-     	/** This will take a RecognitionException, and create a sensible error message out of it */
-     	public String createErrorMessage(RecognitionException e)
-        {
-		StringBuffer message = new StringBuffer();		
-                message.append( source + ":"+e.line+":"+e.charPositionInLine+" ");
-                if ( e instanceof MismatchedTokenException ) {
-                        MismatchedTokenException mte = (MismatchedTokenException)e;
-                        message.append("mismatched token: "+
-                                                           e.token+
-                                                           "; expecting type "+
-                                                           tokenNames[mte.expecting]);
-                }
-                else if ( e instanceof MismatchedTreeNodeException ) {
-                        MismatchedTreeNodeException mtne = (MismatchedTreeNodeException)e;
-                        message.append("mismatched tree node: "+
-                                                           mtne.foundNode+
-                                                           "; expecting type "+
-                                                           tokenNames[mtne.expecting]);
-                }
-                else if ( e instanceof NoViableAltException ) {
-                        NoViableAltException nvae = (NoViableAltException)e;
-			message.append( "Unexpected token '" + e.token.getText() + "'" );
-                        /*
-                        message.append("decision=<<"+nvae.grammarDecisionDescription+">>"+
-                                                           " state "+nvae.stateNumber+
-                                                           " (decision="+nvae.decisionNumber+
-                                                           ") no viable alt; token="+
-                                                           e.token);
-                                                           */
-                }
-                else if ( e instanceof EarlyExitException ) {
-                        EarlyExitException eee = (EarlyExitException)e;
-                        message.append("required (...)+ loop (decision="+
-                                                           eee.decisionNumber+
-                                                           ") did not match anything; token="+
-                                                           e.token);
-                }
-                else if ( e instanceof MismatchedSetException ) {
-                        MismatchedSetException mse = (MismatchedSetException)e;
-                        message.append("mismatched token '"+
-                                                           e.token+
-                                                           "' expecting set "+mse.expecting);
-                }
-                else if ( e instanceof MismatchedNotSetException ) {
-                        MismatchedNotSetException mse = (MismatchedNotSetException)e;
-                        message.append("mismatched token '"+
-                                                           e.token+
-                                                           "' expecting set "+mse.expecting);
-                }
-                else if ( e instanceof FailedPredicateException ) {
-                        FailedPredicateException fpe = (FailedPredicateException)e;
-                        message.append("rule "+fpe.ruleName+" failed predicate: {"+
-                                                           fpe.predicateText+"}?");
-                } else if (e instanceof GeneralParseException) {
-			message.append(" " + e.getMessage());
-		}
-               	return message.toString();
-        }   
-        
-        void checkTrailingSemicolon(String text, int line) {
-        	if (text.trim().endsWith( ";" ) ) {
-        		this.errors.add( new GeneralParseException( "Trailing semi-colon not allowed", offset(line) ) );
-        	}
-        }
-      
-}
-
- at lexer::header {
-	package org.drools.lang;
-}
-
-opt_eol	:
-		(';'|EOL)*	
-	;
-
-compilation_unit
-	:	opt_eol
-		prolog 
-		(	r=rule 	{this.packageDescr.addRule( r ); } 
-		| 	q=query	{this.packageDescr.addRule( q ); }
-		|	extra_statement 
-		)*
-	;
-	
-prolog
-	@init {
-		String packageName = "";
-	}
-	:	opt_eol
-		( name=package_statement { packageName = name; } )?
-		{ 
-			this.packageDescr = new PackageDescr( name ); 
-		}
-		(	extra_statement
-		|	expander
-		)*
-		
-		opt_eol
-	;
-	
-package_statement returns [String packageName]
-	@init{
-		packageName = null;
-	}
-	:	
-		'package' opt_eol name=dotted_name ';'? opt_eol
-		{
-			packageName = name;
-		}
-	;
-	
-import_statement
-	:	'import' opt_eol name=import_name ';'? opt_eol
-		{
-			if (packageDescr != null) 
-				packageDescr.addImport( name );
-		}	
-	;
-
-import_name returns [String name]
-	@init {
-		name = null;
-	}
-	:	
-		id=ID { name=id.getText(); } ( '.' id=ID { name = name + "." + id.getText(); } )* (star='.*' { name = name + star.getText(); })?
-	;
-expander
-	@init {
-		String config=null;
-	}
-	:	'expander' (name=dotted_name)? ';'? opt_eol
-		{
-			if (expanderResolver == null) 
-				throw new IllegalArgumentException("Unable to use expander. Make sure a expander or dsl config is being passed to the parser. [ExpanderResolver was not set].");
-			if ( expander != null )
-				throw new IllegalArgumentException( "Only one 'expander' statement per file is allowed" );
-			expander = expanderResolver.get( name, config );
-		}
-	;
-	
-global
-	@init {
-	}
-	:
-		'global' type=dotted_name id=ID ';'? opt_eol
-		{
-			packageDescr.addGlobal( id.getText(), type );
-		}
-	;
-	
-function
-	@init {
-		FunctionDescr f = null;
-	}
-	:
-		'function' opt_eol (retType=dotted_name)? opt_eol name=ID opt_eol
-		{
-			//System.err.println( "function :: " + name.getText() );
-			f = new FunctionDescr( name.getText(), retType );
-		} 
-		'(' opt_eol
-			(	(paramType=dotted_name)? opt_eol paramName=argument opt_eol
-				{
-					f.addParameter( paramType, paramName );
-				}
-				(	',' opt_eol (paramType=dotted_name)? opt_eol paramName=argument opt_eol 
-					{
-						f.addParameter( paramType, paramName );
-					}
-				)*
-			)?
-		')'
-		opt_eol
-		'{'
-			body=curly_chunk
-			{
-				f.setText( body );
-			}
-		'}'
-		{
-			packageDescr.addFunction( f );
-		}
-		opt_eol
-	;
-
-
-query returns [QueryDescr query]
-	@init {
-		query = null;
-	}
-	:
-		opt_eol
-		loc='query' queryName=word opt_eol 
-		{ 
-			query = new QueryDescr( queryName, null ); 
-			query.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
-			AndDescr lhs = new AndDescr(); query.setLhs( lhs ); 
-			lhs.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
-		}
-		(
-			{ expander != null }? expander_lhs_block[lhs]
-			| normal_lhs_block[lhs]
-		)
-					
-		'end' opt_eol
-	;
-
-rule returns [RuleDescr rule]
-	@init {
-		rule = null;
-		String consequence = "";
-	}
-	:
-		opt_eol
-		loc='rule' ruleName=word opt_eol 
-		{ 
-			debug( "start rule: " + ruleName );
-			rule = new RuleDescr( ruleName, null ); 
-			rule.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
-		}
-		(	rule_attributes[rule]
-		)?
-		opt_eol
-		((	loc='when' ':'? opt_eol
-			{ 
-				AndDescr lhs = new AndDescr(); rule.setLhs( lhs ); 
-				lhs.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
-			}
-			(
-				{ expander != null }? expander_lhs_block[lhs]
-				| normal_lhs_block[lhs]
-			)
-					
-		)?
-		( opt_eol loc='then' ':'?  opt_eol
-			( options{greedy=false;} : any=.
-				{
-					consequence = consequence + " " + any.getText();
-				}
-			)*
-			{
-				if ( expander != null ) {
-					String expanded = runThenExpander( consequence, offset(loc.getLine()) );
-					rule.setConsequence( expanded );
-				} else { 
-					rule.setConsequence( consequence ); 
-				}
-				rule.setConsequenceLocation(offset(loc.getLine()), loc.getCharPositionInLine());
-			})?
-		)?
-		'end' opt_eol
-		{
-			debug( "end rule: " + ruleName );
-		} 
-	;
-	
-extra_statement
-	:
-	(	import_statement
-	|	global
-	|	function
-	)
-	;
-
-rule_attributes[RuleDescr rule]
-	: 
-			'attributes'? ':'? opt_eol
-			(	','? a=rule_attribute opt_eol
-				{
-					rule.addAttribute( a );
-				}
-			)*
-	;
-	
-rule_attribute returns [AttributeDescr d]
-	@init {
-		d = null;
-	}
-	:
-			a=salience { d = a; }
-		|	a=no_loop  { d = a; }
-		|	a=agenda_group  { d = a; }		
-		|	a=duration  { d = a; }			
-		|	a=activation_group { d = a; }	
-		|	a=auto_focus { d = a; }	
-		
-	;
-	
-salience returns [AttributeDescr d ]
-	@init {
-		d = null;
-	}
-	:	
-		loc='salience' opt_eol i=INT ';'? opt_eol
-		{
-			d = new AttributeDescr( "salience", i.getText() );
-			d.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
-		}
-	;
-	
-no_loop returns [AttributeDescr d]
-	@init {
-		d = null;
-	}
-	:
-		(
-			loc='no-loop' opt_eol ';'? opt_eol
-			{
-				d = new AttributeDescr( "no-loop", "true" );
-				d.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
-			}
-		) 
-		|
-		(
-			loc='no-loop' t=BOOL opt_eol ';'? opt_eol
-			{
-				d = new AttributeDescr( "no-loop", t.getText() );
-				d.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
-			}
-		
-		)
-		
-	;
-	
-auto_focus returns [AttributeDescr d]
-	@init {
-		d = null;
-	}
-	:
-		(
-			loc='auto-focus' opt_eol ';'? opt_eol
-			{
-				d = new AttributeDescr( "auto-focus", "true" );
-				d.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
-			}
-		) 
-		|
-		(
-			loc='auto-focus' t=BOOL opt_eol ';'? opt_eol
-			{
-				d = new AttributeDescr( "auto-focus", t.getText() );
-				d.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
-			}
-		
-		)
-		
-	;	
-	
-activation_group returns [AttributeDescr d]
-	@init {
-		d = null;
-	}
-	:
-		loc='activation-group' opt_eol name=STRING ';'? opt_eol
-		{
-			d = new AttributeDescr( "activation-group", getString( name ) );
-			d.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
-		}
-	;
-
-agenda_group returns [AttributeDescr d]
-	@init {
-		d = null;
-	}
-	:
-		loc='agenda-group' opt_eol name=STRING ';'? opt_eol
-		{
-			d = new AttributeDescr( "agenda-group", getString( name ) );
-			d.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
-		}
-	;		
-
-
-duration returns [AttributeDescr d]
-	@init {
-		d = null;
-	}
-	:
-		loc='duration' opt_eol i=INT ';'? opt_eol
-		{
-			d = new AttributeDescr( "duration", i.getText() );
-			d.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
-		}
-	;		
-	
-
-normal_lhs_block[AndDescr descrs]
-	:
-		(	d=lhs opt_eol
-			{ descrs.addDescr( d ); }
-		)* opt_eol
-	;
-
-	
-
-	
-expander_lhs_block[AndDescr descrs]
-	@init {
-		String lhsBlock = null;
-		String eol = System.getProperty( "line.separator" );
-	}
-	:
-		(options{greedy=false;} : 
-			text=paren_chunk loc=EOL 
-			{
-				//only expand non null
-				if (text != null) {
-					if (lhsBlock == null) {					
-						lhsBlock = runWhenExpander( text, offset(loc.getLine()));
-					} else {
-						lhsBlock = lhsBlock + eol + runWhenExpander( text, offset(loc.getLine()));
-					}
-					text = null;
-				}
-			}
-			
-		)* 
-		
-		{
-			if (lhsBlock != null) {
-				reparseLhs(lhsBlock, descrs);
-			}
-		}
-
-	;
-	
-	
-	
-lhs returns [PatternDescr d]
-	@init {
-		d=null;
-	}
-	:	l=lhs_or { d = l; } 
-	;
-
-	
-lhs_column returns [PatternDescr d]
-	@init {
-		d=null;
-	}
-	:	f=fact_binding	{ d = f; }
-	|	f=fact		{ d = f; }
-	;
- 	
-fact_binding returns [PatternDescr d]
-	@init {
-		d=null;
-		boolean multi=false;
-	}
- 	:
- 		id=ID 
- 		
- 		opt_eol ':' opt_eol fe=fact_expression[id.getText()]
- 		{
- 			d=fe;
- 		}
-	;
- 
- fact_expression[String id] returns [PatternDescr pd]
- 	@init {
- 		pd = null;
- 		boolean multi = false;
- 	}
- 	:	'(' opt_eol fe=fact_expression[id]opt_eol ')' { pd=fe; }
- 	| 	f=fact opt_eol
- 		{
- 			((ColumnDescr)f).setIdentifier( id );
- 			pd = f;
- 		}
- 		(	('or'|'||') opt_eol
- 			{	if ( ! multi ) {
- 					PatternDescr first = pd;
- 					pd = new OrDescr();
- 					((OrDescr)pd).addDescr( first );
- 					multi=true;
- 				}
- 			}
- 			f=fact
- 			{
- 				((ColumnDescr)f).setIdentifier( id );
- 				((OrDescr)pd).addDescr( f );
- 			}
- 		)*	
-	;
- 
-fact returns [PatternDescr d] 
-	@init {
-		d=null;
-	}
- 	:	id=dotted_name 
- 		{ 
- 			d = new ColumnDescr( id ); 
- 		} opt_eol 
- 		loc='(' {
- 				d.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
- 			}opt_eol (	c=constraints
- 				{
-		 			for ( Iterator cIter = c.iterator() ; cIter.hasNext() ; ) {
- 						((ColumnDescr)d).addDescr( (PatternDescr) cIter.next() );
- 					}
- 				}
- 
- 				)? opt_eol endLoc=')' opt_eol
- 				{
- 					d.setEndLocation( offset(endLoc.getLine()), endLoc.getCharPositionInLine() );	
- 				}
- 	;
-	
-	
-constraints returns [List constraints]
-	@init {
-		constraints = new ArrayList();
-	}
-	:	opt_eol
-		(constraint[constraints]|predicate[constraints])
-		( opt_eol ',' opt_eol (constraint[constraints]|predicate[constraints]))*
-		opt_eol
-	;
-	
-constraint[List constraints]
-	@init {
-		PatternDescr d = null;
-	}
-	:	opt_eol
-		( fb=ID opt_eol ':' opt_eol )? 
-		f=ID	
-		{
-
-			if ( fb != null ) {
-				//System.err.println( "fb: " + fb.getText() );
-				//System.err.println( " f: " + f.getText() );
-				d = new FieldBindingDescr( f.getText(), fb.getText() );
-				//System.err.println( "fbd: " + d );
-				
-				d.setLocation( offset(f.getLine()), f.getCharPositionInLine() );
-				constraints.add( d );
-			} 
-			FieldConstraintDescr fc = new FieldConstraintDescr(f.getText());
-			fc.setLocation( offset(f.getLine()), f.getCharPositionInLine() );
-									
-			
-		}				
-			opt_eol (	op=operator opt_eol	
-					
-					(	bvc=ID
-						{
-							
-														
-							
-							VariableRestrictionDescr vd = new VariableRestrictionDescr(op, bvc.getText());
-							fc.addRestriction(vd);
-							constraints.add(fc);
-							
-						}
-					|
-						lc=enum_constraint 
-						{ 
-
-							LiteralRestrictionDescr lrd  = new LiteralRestrictionDescr(op, lc, true);
-							fc.addRestriction(lrd);
-							constraints.add(fc);
-							
-						}						
-					|
-						lc=literal_constraint 
-						{ 
-							
-							LiteralRestrictionDescr lrd  = new LiteralRestrictionDescr(op, lc);
-							fc.addRestriction(lrd);
-							constraints.add(fc);
-							
-						}
-					|	rvc=retval_constraint 
-						{ 
-							
-							
-
-							ReturnValueRestrictionDescr rvd = new ReturnValueRestrictionDescr(op, rvc);							
-							fc.addRestriction(rvd);
-							constraints.add(fc);
-							
-						} 
-					)
-					(
-						con=('&'|'|')
-						{
-							if (con.getText().equals("&") ) {								
-								fc.addRestriction(new RestrictionConnectiveDescr(RestrictionConnectiveDescr.AND));	
-							} else {
-								fc.addRestriction(new RestrictionConnectiveDescr(RestrictionConnectiveDescr.OR));	
-							}							
-						}
-
-						op=operator
-						(	bvc=ID
-							{
-								VariableRestrictionDescr vd = new VariableRestrictionDescr(op, bvc.getText());
-								fc.addRestriction(vd);
-							}
-						|
-							lc=enum_constraint 
-							{ 
-								LiteralRestrictionDescr lrd  = new LiteralRestrictionDescr(op, lc, true);
-								fc.addRestriction(lrd);
-								
-							}						
-						|
-							lc=literal_constraint 
-							{ 
-								LiteralRestrictionDescr lrd  = new LiteralRestrictionDescr(op, lc);
-								fc.addRestriction(lrd);
-								
-							}
-						|	rvc=retval_constraint 
-							{ 
-								ReturnValueRestrictionDescr rvd = new ReturnValueRestrictionDescr(op, rvc);							
-								fc.addRestriction(rvd);
-								
-							} 
-						)						
-						
-					)*
-				)?					
-		opt_eol
-	;
-		
-literal_constraint returns [String text]
-	@init {
-		text = null;
-	}
-	:	(	t=STRING { text = getString( t ); } //t.getText(); text=text.substring( 1, text.length() - 1 ); }
-		|	t=INT    { text = t.getText(); }
-		|	t=FLOAT	 { text = t.getText(); }
-		|	t=BOOL 	 { text = t.getText(); }
-		|	t='null' { text = null; }
-		)
-	;
-	
-enum_constraint returns [String text]
-	@init {
-		text = null;
-	}
-	:	(cls=ID '.' en=ID) { text = cls.getText() + "." + en.getText(); }
-	;	
-	
-retval_constraint returns [String text]
-	@init {
-		text = null;
-	}
-	:	
-		'('  c=paren_chunk  ')' { text = c; }
-	;
-
-predicate[List constraints]
-	:
-		decl=ID ':' field=ID '->' '(' text=paren_chunk ')'
-		{
-			PredicateDescr d = new PredicateDescr(field.getText(), decl.getText(), text );
-			constraints.add( d );
-		}
-	;
-	
-paren_chunk returns [String text]
-	@init {
-		text = null;
-	}
-	
-	:
-		 (	options{greedy=false;} : 
-			'(' c=paren_chunk ')' 	
-			{
-				if ( c == null ) {
-					c = "";
-				}
-				if ( text == null ) {
-					text = "( " + c + " )";
-				} else {
-					text = text + " ( " + c + " )";
-				}
-			} 
-		| any=. 
-			{
-				if ( text == null ) {
-					text = any.getText();
-				} else {
-					text = text + " " + any.getText(); 
-				} 
-			}
-		)* 
-	;
-	
-//NOTE: this is needed as there is a bug in antlr if you sometimes use the same sub rule in multiple places
-paren_chunk2 returns [String text]
-	@init {
-		text = null;
-	}
-	
-	:
-		 (	options{greedy=false;} : 
-			'(' c=paren_chunk2 ')' 	
-			{
-				if ( c == null ) {
-					c = "";
-				}
-				if ( text == null ) {
-					text = "( " + c + " )";
-				} else {
-					text = text + " ( " + c + " )";
-				}
-			} 
-		| any=. 
-			{
-				if ( text == null ) {
-					text = any.getText();
-				} else {
-					text = text + " " + any.getText(); 
-				} 
-			}
-		)* 
-	;
-	
-curly_chunk returns [String text]
-	@init {
-		text = null;
-	}
-	
-	:
-		(	options{greedy=false;} : 
-			'{' c=curly_chunk '}' 	
-			{
-				//System.err.println( "chunk [" + c + "]" );
-				if ( c == null ) {
-					c = "";
-				}
-				if ( text == null ) {
-					text = "{ " + c + " }";
-				} else {
-					text = text + " { " + c + " }";
-				}
-			} 
-		| any=. 
-			{
-				//System.err.println( "any [" + any.getText() + "]" );
-				if ( text == null ) {
-					text = any.getText();
-				} else {
-					text = text + " " + any.getText(); 
-				} 
-			}
-		)*
-	;	
-	
-lhs_or returns [PatternDescr d]
-	@init{
-		d = null;
-	}
-	:	
-		{ OrDescr or = null; }
-		left=lhs_and {d = left; }
-		( ('or'|'||') opt_eol
-			right=lhs_and 
-			{
-				if ( or == null ) {
-					or = new OrDescr();
-					or.addDescr( left );
-					d = or;
-				}
-				
-				or.addDescr( right );
-			}
-		)*
-	;
-	
-lhs_and returns [PatternDescr d]
-	@init{
-		d = null;
-	}
-	:
-		{ AndDescr and = null; }
-		left=lhs_unary { d = left; }
-		( ('and'|'&&') opt_eol
-			right=lhs_unary 
-			{
-				if ( and == null ) {
-					and = new AndDescr();
-					and.addDescr( left );
-					d = and;
-				}
-				
-				and.addDescr( right );
-			}
-		)* 
-	;
-	
-lhs_unary returns [PatternDescr d]
-	@init {
-		d = null;
-	}
-	:	(	u=lhs_exist
-		|	u=lhs_not
-		|	u=lhs_eval
-		|	u=lhs_column
-		|	'(' opt_eol u=lhs opt_eol ')'
-		) { d = u; }
-	;
-	
-lhs_exist returns [PatternDescr d]
-	@init {
-		d = null;
-	}
-	:	loc='exists' ('(' column=lhs_column ')' | column=lhs_column)
-		{ 
-			d = new ExistsDescr( (ColumnDescr) column ); 
-			d.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
-		}	
-	;
-	
-lhs_not	returns [NotDescr d]
-	@init {
-		d = null;
-	}
-	:	loc='not' ('(' column=lhs_column  ')' | column=lhs_column)
-		{
-			d = new NotDescr( (ColumnDescr) column ); 
-			d.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
-		}
-	;
-
-lhs_eval returns [PatternDescr d]
-	@init {
-		d = null;
-		String text = "";
-	}
-	:	'eval' loc='(' 
-			c=paren_chunk2
-		')' 
-		{ 
-			checkTrailingSemicolon( c, offset(loc.getLine()) );
-			d = new EvalDescr( c ); 
-		}
-	;
-	
-dotted_name returns [String name]
-	@init {
-		name = null;
-	}
-	:	
-		id=ID { name=id.getText(); } ( '.' id=ID { name = name + "." + id.getText(); } )* ( '[' ']' { name = name + "[]";})*
-	;
-	
-argument returns [String name]
-	@init {
-		name = null;
-	}
-	:
-		id=ID { name=id.getText(); } ( '[' ']' { name = name + "[]";})*
-	;
-
-	
-word returns [String word]
-	@init{
-		word = null;
-	}
-	:	id=ID      { word=id.getText(); }
-	|	'import'   { word="import"; }
-	|	'use'      { word="use"; }
-	|	'rule'     { word="rule"; }
-	|	'query'    { word="query"; }
-	|	'salience' { word="salience"; }
- 	|	'no-loop'  { word="no-loop"; }
-	|	'when'     { word="when"; }
-	|	'then'     { word="then"; }
-	|	'end'      { word="end"; }
-	|	str=STRING { word=getString(str);} //str.getText(); word=word.substring( 1, word.length()-1 ); }
-	;
-
-operator returns [String str] 	
-	@init {
-		str = null;
-	}
-	:
-
-		'==' {str= "==";}
-		|'=' {str="==";}
-		|'>' {str=">";}
-		|'>=' {str=">=";}		
-		|'<' {str="<";}
-		|'<=' {str="<=";}
-		|'!=' {str="!=";}
-		|'contains' {str="contains";}
-		|'matches' {str="matches";}
-		|'excludes' {str="excludes";}
-					
-						
-	;
-
-
-
-MISC 	:
-		'!' | '@' | '$' | '%' | '^' | '&' | '*' | '_' | '-' | '+'  | '?'
-		| '|' | ',' | '{' | '}' | '[' | ']' | '=' | '/' | '(' | ')' | '\'' | '\\'
-		| '||' | '&&' | '<<<' | '++' | '--' | '>>>' | '==' | '+=' | '=+' | '-=' | '=-' |'*=' | '=*' 
-		| '/=' | '=/' | '>>=' 
-		
-	;
-	
-WS      :       (	' '
-                |	'\t'
-                |	'\f'
-                )
-                { channel=99; }
-        ;
-        
-EOL 	:	     
-   		(       ( '\r\n' )=> '\r\n'  // Evil DOS
-                |       '\r'    // Macintosh
-                |       '\n'    // Unix (the right way)
-                )
-        ;  
-        
-INT	
-	:	('-')?('0'..'9')+
-	;
-
-FLOAT
-	:	('-')?('0'..'9')+ '.' ('0'..'9')+
-	;
-	
-STRING
-	:	('"' ( options{greedy=false;} : .)* '"' ) | ('\'' ( options{greedy=false;} : .)* '\'')
-	;
-	
-BOOL
-	:	('true'|'false') 
-	;	
-	
-ID	
-	:	('a'..'z'|'A'..'Z'|'_'|'$' | '\u00c0'..'\u00ff')('a'..'z'|'A'..'Z'|'_'|'0'..'9' | '\u00c0'..'\u00ff')* 
-	;
-		
-
-SH_STYLE_SINGLE_LINE_COMMENT	
-	:	'#' ( options{greedy=false;} : .)* EOL /* ('\r')? '\n'  */
-                { channel=99; }
-	;
-        
-        
-C_STYLE_SINGLE_LINE_COMMENT	
-	:	'//' ( options{greedy=false;} : .)* EOL // ('\r')? '\n' 
-                { channel=99; }
-	;
-
-MULTI_LINE_COMMENT
-	:	'/*' (options{greedy=false;} : .)* '*/'
-                { channel=99; }
-	;

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/compiler/PackageBuilderTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/compiler/PackageBuilderTest.java	2006-08-02 21:58:31 UTC (rev 5420)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/compiler/PackageBuilderTest.java	2006-08-03 00:14:06 UTC (rev 5421)
@@ -49,14 +49,16 @@
 import org.drools.lang.descr.EvalDescr;
 import org.drools.lang.descr.ExistsDescr;
 import org.drools.lang.descr.FieldBindingDescr;
-import org.drools.lang.descr.LiteralDescr;
+import org.drools.lang.descr.FieldConstraintDescr;
+import org.drools.lang.descr.LiteralRestrictionDescr;
 import org.drools.lang.descr.NotDescr;
 import org.drools.lang.descr.OrDescr;
 import org.drools.lang.descr.PackageDescr;
 import org.drools.lang.descr.PatternDescr;
 import org.drools.lang.descr.PredicateDescr;
-import org.drools.lang.descr.ReturnValueDescr;
+import org.drools.lang.descr.ReturnValueRestrictionDescr;
 import org.drools.lang.descr.RuleDescr;
+import org.drools.lang.descr.VariableRestrictionDescr;
 import org.drools.reteoo.ReteooRuleBase;
 import org.drools.rule.And;
 import org.drools.rule.Column;
@@ -103,9 +105,9 @@
         packageDescr.addGlobal( "map",
                                 "java.util.Map" );
 
-        final ReturnValueDescr returnValue = new ReturnValueDescr( "price",
-                                                                   "==",
-                                                                   "x" );
+        FieldConstraintDescr returnValue = new FieldConstraintDescr( "price" );
+        returnValue.addRestriction( new ReturnValueRestrictionDescr("==", "x") );                
+        
         column.addDescr( returnValue );
 
         // There is no m this should produce errors.
@@ -294,13 +296,12 @@
         final ColumnDescr column = new ColumnDescr( Cheese.class.getName(),
                                                     "stilton" );
         lhs.addDescr( column );
+        
+        FieldConstraintDescr literalDescr = new FieldConstraintDescr( "type" );
+        literalDescr.addRestriction( new VariableRestrictionDescr("==", "stilton") );        
 
-        final LiteralDescr listeralDescr = new LiteralDescr( "type",
-                                                             "==",
-                                                             "stilton" );
+        column.addDescr( literalDescr );
 
-        column.addDescr( listeralDescr );
-
         ruleDescr.setConsequence( "modify(stilton);" );
 
         builder.addPackage( packageDescr );
@@ -332,10 +333,10 @@
 
         packageDescr.addGlobal( "map",
                                 "java.util.Map" );
-
-        final ReturnValueDescr returnValue = new ReturnValueDescr( "price",
-                                                                   "==",
-                                                                   "new  Integer(( ( ( Integer )map.get(x) ).intValue() * y.intValue()))" );
+        
+        FieldConstraintDescr returnValue = new FieldConstraintDescr( "price" );
+        returnValue.addRestriction( new ReturnValueRestrictionDescr("==", "new  Integer(( ( ( Integer )map.get(x) ).intValue() * y.intValue()))") );  
+        
         column.addDescr( returnValue );
 
         ruleDescr.setConsequence( "modify(stilton);" );
@@ -611,97 +612,97 @@
 
     public void testNumbers() throws Exception {
         // test boolean
-        createLiteralRule( new LiteralDescr( "booleanPrimitive",
-                                             "==",
-                                             "true" ) );
+        FieldConstraintDescr literalDescr = new FieldConstraintDescr( "booleanPrimitive" );
+        literalDescr.addRestriction( new LiteralRestrictionDescr("==", "true") );            
+        createLiteralRule( literalDescr );
 
         // test boolean
-        createLiteralRule( new LiteralDescr( "booleanPrimitive",
-                                             "==",
-                                             "false" ) );
+        literalDescr = new FieldConstraintDescr( "booleanPrimitive" );
+        literalDescr.addRestriction( new LiteralRestrictionDescr("==", "false") );        
+        createLiteralRule( literalDescr );
 
         // test char
-        createLiteralRule( new LiteralDescr( "charPrimitive",
-                                             "==",
-                                             "a" ) );
+        literalDescr = new FieldConstraintDescr( "charPrimitive" );
+        literalDescr.addRestriction( new LiteralRestrictionDescr("==", "a") );        
+        createLiteralRule( literalDescr );
 
         // test byte
-        createLiteralRule( new LiteralDescr( "bytePrimitive",
-                                             "==",
-                                             "1" ) );
+        literalDescr = new FieldConstraintDescr( "bytePrimitive" );
+        literalDescr.addRestriction( new LiteralRestrictionDescr("==", "1") );            
+        createLiteralRule( literalDescr );
 
-        createLiteralRule( new LiteralDescr( "bytePrimitive",
-                                             "==",
-                                             "0" ) );
+        literalDescr = new FieldConstraintDescr( "bytePrimitive" );
+        literalDescr.addRestriction( new LiteralRestrictionDescr("==", "0") );         
+        createLiteralRule( literalDescr );
 
-        createLiteralRule( new LiteralDescr( "bytePrimitive",
-                                             "==",
-                                             "-1" ) );
+        literalDescr = new FieldConstraintDescr( "bytePrimitive" );
+        literalDescr.addRestriction( new LiteralRestrictionDescr("==", "-1") );         
+        createLiteralRule( literalDescr);
 
         // test short
-        createLiteralRule( new LiteralDescr( "shortPrimitive",
-                                             "==",
-                                             "1" ) );
+        literalDescr = new FieldConstraintDescr( "shortPrimitive" );
+        literalDescr.addRestriction( new LiteralRestrictionDescr("==", "1") );         
+        createLiteralRule( literalDescr );
 
-        createLiteralRule( new LiteralDescr( "shortPrimitive",
-                                             "==",
-                                             "0" ) );
+        literalDescr = new FieldConstraintDescr( "shortPrimitive" );
+        literalDescr.addRestriction( new LiteralRestrictionDescr("==", "0") ); 
+        createLiteralRule( literalDescr );
 
-        createLiteralRule( new LiteralDescr( "shortPrimitive",
-                                             "==",
-                                             "-1" ) );
+        literalDescr = new FieldConstraintDescr( "shortPrimitive" );
+        literalDescr.addRestriction( new LiteralRestrictionDescr("==", "-1") );         
+        createLiteralRule( literalDescr );
 
         // test int
-        createLiteralRule( new LiteralDescr( "intPrimitive",
-                                             "==",
-                                             "1" ) );
+        literalDescr = new FieldConstraintDescr( "intPrimitive" );
+        literalDescr.addRestriction( new LiteralRestrictionDescr("==", "1") );         
+        createLiteralRule( literalDescr );
 
-        createLiteralRule( new LiteralDescr( "intPrimitive",
-                                             "==",
-                                             "0" ) );
+        literalDescr = new FieldConstraintDescr( "intPrimitive" );
+        literalDescr.addRestriction( new LiteralRestrictionDescr("==", "0") ); 
+        createLiteralRule( literalDescr );
 
-        createLiteralRule( new LiteralDescr( "intPrimitive",
-                                             "==",
-                                             "-1" ) );
+        literalDescr = new FieldConstraintDescr( "intPrimitive" );
+        literalDescr.addRestriction( new LiteralRestrictionDescr("==", "-1") );         
+        createLiteralRule( literalDescr );
 
-        //        // test long
-        createLiteralRule( new LiteralDescr( "longPrimitive",
-                                             "==",
-                                             "1" ) );
+        // test long
+        literalDescr = new FieldConstraintDescr( "longPrimitive" );
+        literalDescr.addRestriction( new LiteralRestrictionDescr("==", "1") );         
+        createLiteralRule( literalDescr );
 
-        createLiteralRule( new LiteralDescr( "longPrimitive",
-                                             "==",
-                                             "0" ) );
+        literalDescr = new FieldConstraintDescr( "longPrimitive" );
+        literalDescr.addRestriction( new LiteralRestrictionDescr("==", "0") );          
+        createLiteralRule( literalDescr );
 
-        createLiteralRule( new LiteralDescr( "longPrimitive",
-                                             "==",
-                                             "-1" ) );
+        literalDescr = new FieldConstraintDescr( "longPrimitive" );
+        literalDescr.addRestriction( new LiteralRestrictionDescr("==", "0") );          
+        createLiteralRule( literalDescr );
 
         // test float
-        createLiteralRule( new LiteralDescr( "floatPrimitive",
-                                             "==",
-                                             "1.1" ) );
+        literalDescr = new FieldConstraintDescr( "floatPrimitive" );
+        literalDescr.addRestriction( new LiteralRestrictionDescr("==", "1.1") );          
+        createLiteralRule( literalDescr);
 
-        createLiteralRule( new LiteralDescr( "floatPrimitive",
-                                             "==",
-                                             "0" ) );
+        literalDescr = new FieldConstraintDescr( "floatPrimitive" );
+        literalDescr.addRestriction( new LiteralRestrictionDescr("==", "0") );        
+        createLiteralRule( literalDescr );
 
-        createLiteralRule( new LiteralDescr( "floatPrimitive",
-                                             "==",
-                                             "-1.1" ) );
+        literalDescr = new FieldConstraintDescr( "floatPrimitive" );
+        literalDescr.addRestriction( new LiteralRestrictionDescr("==", "-1.1") );        
+        createLiteralRule( literalDescr );
 
         // test double
-        createLiteralRule( new LiteralDescr( "doublePrimitive",
-                                             "==",
-                                             "1.1" ) );
+        literalDescr = new FieldConstraintDescr( "doublePrimitive" );
+        literalDescr.addRestriction( new LiteralRestrictionDescr("==", "1.1") );        
+        createLiteralRule( literalDescr );
 
-        createLiteralRule( new LiteralDescr( "doublePrimitive",
-                                             "==",
-                                             "0" ) );
+        literalDescr = new FieldConstraintDescr( "doublePrimitive" );
+        literalDescr.addRestriction( new LiteralRestrictionDescr("==", "0") );        
+        createLiteralRule( literalDescr );
 
-        createLiteralRule( new LiteralDescr( "doublePrimitive",
-                                             "==",
-                                             "-1.1" ) );
+        literalDescr = new FieldConstraintDescr( "floatPrimitive" );
+        literalDescr.addRestriction( new LiteralRestrictionDescr("==", "-1.1") );        
+        createLiteralRule( literalDescr);
     }
 
     public void testNull() {
@@ -717,9 +718,9 @@
         final ColumnDescr columnDescr = new ColumnDescr( Cheese.class.getName(),
                                                          "stilton" );
 
-        final LiteralDescr literalDescr = new LiteralDescr( "type",
-                                                            "==",
-                                                            null );
+        FieldConstraintDescr literalDescr = new FieldConstraintDescr( "type" );
+        literalDescr.addRestriction( new LiteralRestrictionDescr("==", null) );            
+        
         columnDescr.addDescr( literalDescr );
 
         ruleDescr.setConsequence( "" );
@@ -745,9 +746,8 @@
         ruleDescr.setLhs( lhs );
         ColumnDescr columnDescr = new ColumnDescr( Cheese.class.getName(),
                                                    "stilton" );
-        LiteralDescr literalDescr = new LiteralDescr( "type",
-                                                      "==",
-                                                      null );
+        FieldConstraintDescr literalDescr = new FieldConstraintDescr( "type" );
+        literalDescr.addRestriction( new LiteralRestrictionDescr("==", null) );    
         columnDescr.addDescr( literalDescr );
         ruleDescr.setConsequence( "" );
 
@@ -759,9 +759,8 @@
         ruleDescr.setLhs( lhs );
         columnDescr = new ColumnDescr( Cheese.class.getName(),
                                        "stilton" );
-        literalDescr = new LiteralDescr( "type",
-                                         "!=",
-                                         null );
+        literalDescr = new FieldConstraintDescr( "type" );
+        literalDescr.addRestriction( new LiteralRestrictionDescr("!=", null) );    
         columnDescr.addDescr( literalDescr );
         ruleDescr.setConsequence( "" );
 
@@ -773,9 +772,10 @@
         ruleDescr.setLhs( lhs );
         columnDescr = new ColumnDescr( Cheese.class.getName(),
                                        "stilton" );
-        literalDescr = new LiteralDescr( "type",
-                                         "!=",
-                                         null );
+        
+        literalDescr = new FieldConstraintDescr( "type" );
+        literalDescr.addRestriction( new LiteralRestrictionDescr("!=", null ) );            
+        
         columnDescr.addDescr( literalDescr );
         ruleDescr.setConsequence( "" );
 
@@ -807,12 +807,11 @@
         final FieldBindingDescr fieldBindingDescr = new FieldBindingDescr( "type",
                                                                            "$type" );        
         
-        final LiteralDescr listeralDescr = new LiteralDescr( "type",
-                                                             "==",
-                                                             "stilton" );
+        FieldConstraintDescr literalDescr = new FieldConstraintDescr( "type" );
+        literalDescr.addRestriction( new LiteralRestrictionDescr("==", "stilton") );            
 
         column1.addDescr( fieldBindingDescr );
-        column1.addDescr( listeralDescr );
+        column1.addDescr( literalDescr );
         
         final ColumnDescr column2 = new ColumnDescr( Cheese.class.getName() );
         lhs.addDescr( column2 );
@@ -890,10 +889,10 @@
 
         packageDescr.addGlobal( "map",
                                 "java.util.Map" );
-
-        final ReturnValueDescr returnValue = new ReturnValueDescr( "price",
-                                                                   "==",
-                                                                   expression );
+       
+        FieldConstraintDescr returnValue = new FieldConstraintDescr( "price" );
+        returnValue.addRestriction( new ReturnValueRestrictionDescr("==", expression) );
+        
         column.addDescr( returnValue );
 
         ruleDescr.setConsequence( "modify(stilton);" );
@@ -943,7 +942,7 @@
         ruleDescr.setConsequence( "" );
     }
 
-    private void createLiteralRule(final LiteralDescr literalDescr) {
+    private void createLiteralRule(final FieldConstraintDescr literalDescr) {
         final PackageBuilder builder = new PackageBuilder();
 
         final PackageDescr packageDescr = new PackageDescr( "p1" );
@@ -981,9 +980,9 @@
         final ColumnDescr columnDescr = new ColumnDescr( Cheese.class.getName(),
                                                          "stilton" );
 
-        final LiteralDescr literalDescr = new LiteralDescr( "type",
-                                                            "==",
-                                                            "stilton" );
+        FieldConstraintDescr literalDescr = new FieldConstraintDescr( "type" );
+        literalDescr.addRestriction( new LiteralRestrictionDescr("==", "stilton") );        
+        
         columnDescr.addDescr( literalDescr );
 
         ceDescr.addDescr( columnDescr );

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/LeapsTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/LeapsTest.java	2006-08-02 21:58:31 UTC (rev 5420)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/LeapsTest.java	2006-08-03 00:14:06 UTC (rev 5421)
@@ -297,6 +297,10 @@
     }
     
     
+    public void testActivationGroups() throws Exception {
+        // @todo for some reason this is b0rked?
+    }
+    
     /**
      * this test is replicated here due to the fact that leaps
      * does not create activations before fireAll.

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/lang/descr/AndDescrTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/lang/descr/AndDescrTest.java	2006-08-02 21:58:31 UTC (rev 5420)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/lang/descr/AndDescrTest.java	2006-08-03 00:14:06 UTC (rev 5421)
@@ -18,17 +18,17 @@
     public void testAddBoundCols() {
         final AndDescr and = new AndDescr();
         final ColumnDescr col1 = new ColumnDescr( "Foo" );
-        col1.setIdentifier( "foo" );
-        col1.addDescr( new VariableDescr( "foo",
-                                               "==",
-                                               "bar" ) );
+        col1.setIdentifier( "foo" );        
+        FieldConstraintDescr fieldConstraint1 = new FieldConstraintDescr("foo" );
+        fieldConstraint1.addRestriction( new VariableRestrictionDescr("==", "bar") );        
+        col1.addDescr( fieldConstraint1 );                
         and.addDescr( col1 );
 
         final ColumnDescr col2 = new ColumnDescr( "Foo" );
         col2.setIdentifier( "foo" );
-        col2.addDescr( new VariableDescr( "bar",
-                                               "==",
-                                               "baz" ) );
+        FieldConstraintDescr fieldConstraint2 = new FieldConstraintDescr("bar" );
+        fieldConstraint2.addRestriction( new VariableRestrictionDescr("==", "baz") );        
+        col2.addDescr( fieldConstraint2 );
         and.addDescr( col2 );
 
         and.addDescr( new NotDescr() );
@@ -53,9 +53,9 @@
         assertEquals( 2,
                       col1.getDescrs().size() );
         assertEquals( "bar",
-                      ((VariableDescr) col1.getDescrs().get( 0 )).getIdentifier() );
+                      ( (VariableRestrictionDescr)( (FieldConstraintDescr) col1.getDescrs().get( 0 )).getRestrictions().get( 0 )).getIdentifier() );                     
         assertEquals( "baz",
-                      ((VariableDescr) col1.getDescrs().get( 1 )).getIdentifier() );
+                      ( (VariableRestrictionDescr)( (FieldConstraintDescr) col1.getDescrs().get( 1 )).getRestrictions().get( 0 )).getIdentifier() );
     }
 
 }

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/xml/DumperTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/xml/DumperTest.java	2006-08-02 21:58:31 UTC (rev 5420)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/xml/DumperTest.java	2006-08-03 00:14:06 UTC (rev 5421)
@@ -1,7 +1,9 @@
 package org.drools.xml;
 
+import java.io.BufferedReader;
 import java.io.IOException;
 import java.io.InputStreamReader;
+import java.io.Reader;
 import java.io.StringReader;
 import java.util.ArrayList;
 import java.util.List;
@@ -91,14 +93,25 @@
         assertEquals( ruleOriginal.getConsequence(),
                       ruleDumped.getConsequence() );
 
+        // Now double check the contents are the same
+        BufferedReader reader = new BufferedReader( new InputStreamReader( getClass().getResourceAsStream( "test_Dump.drl" ) ) );
+        StringBuffer buffer = new StringBuffer();
+        String s = null;
+        while ( (s = reader.readLine()) != null ) {
+            buffer.append( s );
+        }
+
+        assertEqualsIgnoreWhitespace( buffer.toString(),
+                                      result );
+
     }
-        
+
     private void assertEqualsIgnoreWhitespace(final String expected,
                                               final String actual) {
         final String cleanExpected = expected.replaceAll( "\\s+",
-                                                    "" );
+                                                          "" );
         final String cleanActual = actual.replaceAll( "\\s+",
-                                                "" );
+                                                      "" );
 
         assertEquals( cleanExpected,
                       cleanActual );

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/xml/XmlPackageReaderTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/xml/XmlPackageReaderTest.java	2006-08-02 21:58:31 UTC (rev 5420)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/xml/XmlPackageReaderTest.java	2006-08-03 00:14:06 UTC (rev 5421)
@@ -8,20 +8,21 @@
 
 import org.drools.lang.descr.AndDescr;
 import org.drools.lang.descr.AttributeDescr;
-import org.drools.lang.descr.VariableDescr;
 import org.drools.lang.descr.ColumnDescr;
 import org.drools.lang.descr.EvalDescr;
 import org.drools.lang.descr.ExistsDescr;
 import org.drools.lang.descr.FieldBindingDescr;
+import org.drools.lang.descr.FieldConstraintDescr;
 import org.drools.lang.descr.FunctionDescr;
-import org.drools.lang.descr.LiteralDescr;
+import org.drools.lang.descr.LiteralRestrictionDescr;
 import org.drools.lang.descr.NotDescr;
 import org.drools.lang.descr.OrDescr;
 import org.drools.lang.descr.PackageDescr;
 import org.drools.lang.descr.PredicateDescr;
 import org.drools.lang.descr.QueryDescr;
-import org.drools.lang.descr.ReturnValueDescr;
+import org.drools.lang.descr.ReturnValueRestrictionDescr;
 import org.drools.lang.descr.RuleDescr;
+import org.drools.lang.descr.VariableRestrictionDescr;
 
 public class XmlPackageReaderTest extends TestCase {
     public void testParsePackageName() throws Exception {
@@ -241,44 +242,43 @@
                       column2.getIdentifier() );
 
         final ColumnDescr column3 = (ColumnDescr) lhsDescr.getDescrs().get( 4 );
-        final LiteralDescr literalDescr = (LiteralDescr) column3.getDescrs().get( 0 );
+        //final LiteralDescr literalDescr = (LiteralDescr) column3.getDescrs().get( 0 );
+        FieldConstraintDescr fieldConstraintDescr = (FieldConstraintDescr) column3.getDescrs().get( 0 );
+        final LiteralRestrictionDescr literalDescr = (  LiteralRestrictionDescr ) fieldConstraintDescr.getRestrictions().get( 0 );
         assertEquals( "field1",
-                      literalDescr.getFieldName() );
+                      fieldConstraintDescr.getFieldName() );
         assertEquals( "==",
                       literalDescr.getEvaluator() );
         assertEquals( "value1",
                       literalDescr.getText() );
 
+        final ReturnValueRestrictionDescr returnValueDescr = (ReturnValueRestrictionDescr) fieldConstraintDescr.getRestrictions().get( 1 );    
+        assertEquals( "==",
+                      returnValueDescr.getEvaluator() );
+        assertEquals( "1==1",
+                      returnValueDescr.getText() );
+        
+      final VariableRestrictionDescr variableDescr = (VariableRestrictionDescr) fieldConstraintDescr.getRestrictions().get( 2 ); 
+      assertEquals( "==",
+                    variableDescr.getEvaluator() );
+      assertEquals( "var1",
+                    variableDescr.getIdentifier() );        
+        
         final PredicateDescr predicateDescr = (PredicateDescr) column3.getDescrs().get( 1 );
         assertEquals( "field1",
                       predicateDescr.getFieldName() );
         assertEquals( "var1",
                       predicateDescr.getDeclaration() );
         assertEquals( "1==1",
-                      predicateDescr.getText() );
+                      predicateDescr.getText() );        
 
-        final ReturnValueDescr returnValueDescr = (ReturnValueDescr) column3.getDescrs().get( 2 );
-        assertEquals( "field1",
-                      returnValueDescr.getFieldName() );
-        assertEquals( "==",
-                      returnValueDescr.getEvaluator() );
-        assertEquals( "1==1",
-                      returnValueDescr.getText() );
 
-        final FieldBindingDescr fieldBindingDescr = (FieldBindingDescr) column3.getDescrs().get( 3 );
+        final FieldBindingDescr fieldBindingDescr = (FieldBindingDescr) column3.getDescrs().get( 2 );
         assertEquals( "field1",
                       fieldBindingDescr.getFieldName() );
         assertEquals( "var1",
                       fieldBindingDescr.getIdentifier() );
 
-        final VariableDescr variableDescr = (VariableDescr) column3.getDescrs().get( 4 );
-        assertEquals( "field1",
-                      variableDescr.getFieldName() );
-        assertEquals( "==",
-                      variableDescr.getEvaluator() );
-        assertEquals( "var1",
-                      variableDescr.getIdentifier() );
-
         final NotDescr notDescr = (NotDescr) lhsDescr.getDescrs().get( 5 );
         assertEquals( 1,
                       notDescr.getDescrs().size() );

Modified: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/reteoo/OneAndTwoOrs
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/reteoo/OneAndTwoOrs	2006-08-02 21:58:31 UTC (rev 5420)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/reteoo/OneAndTwoOrs	2006-08-03 00:14:06 UTC (rev 5421)
@@ -178,40 +178,51 @@
 b2xzLnJ1bGUuQ29sdW1ufzmwAkCvUeYCAAVJAAVpbmRleEkABm9mZnNldEwAC2NvbnN0cmFpbnRz
 cQB+ABtMAAtkZWNsYXJhdGlvbnQAHUxvcmcvZHJvb2xzL3J1bGUvRGVjbGFyYXRpb247TAAKb2Jq
 ZWN0VHlwZXQAG0xvcmcvZHJvb2xzL3NwaS9PYmplY3RUeXBlO3hwAAAAAAAAAABzcQB+AB0AAAAB
-dwQAAAABc3IAIW9yZy5kcm9vbHMucnVsZS5MaXRlcmFsQ29uc3RyYWludAOS+tbk+ZKzAgADTAAJ
-ZXZhbHVhdG9ydAAaTG9yZy9kcm9vbHMvc3BpL0V2YWx1YXRvcjtMAAlleHRyYWN0b3J0AB9Mb3Jn
-L2Ryb29scy9zcGkvRmllbGRFeHRyYWN0b3I7TAAFZmllbGR0ABtMb3JnL2Ryb29scy9zcGkvRmll
-bGRWYWx1ZTt4cHNyAD1vcmcuZHJvb2xzLmJhc2UuZXZhbHVhdG9ycy5TdHJpbmdGYWN0b3J5JFN0
-cmluZ0VxdWFsRXZhbHVhdG9ySU/lvdDlSJYCAAB4cgAdb3JnLmRyb29scy5iYXNlLkJhc2VFdmFs
-dWF0b3KuQXGsNOGNawIAAkkACG9wZXJhdG9ySQAEdHlwZXhwAAAAAQAAALRzcgAjb3JnLmRyb29s
-cy5iYXNlLkNsYXNzRmllbGRFeHRyYWN0b3IZ4kABiRDxowIAAkwABWNsYXp6dAARTGphdmEvbGFu
-Zy9DbGFzcztMAAlmaWVsZE5hbWVxAH4ADnhwdnIAEm9yZy5kcm9vbHMuTWVzc2FnZQAAAAAAAAAA
-AAAAeHB0AAhtZXNzYWdlMXNyABlvcmcuZHJvb2xzLmJhc2UuRmllbGRJbXBsrplN9KzddkQCAAFM
-AAV2YWx1ZXQAEkxqYXZhL2xhbmcvT2JqZWN0O3hwdAADT25leHBzcgAfb3JnLmRyb29scy5iYXNl
-LkNsYXNzT2JqZWN0VHlwZdzs2BfUlPv9AgACSQAJdmFsdWVUeXBlTAAPb2JqZWN0VHlwZUNsYXNz
-cQB+AC94cAAAANJxAH4AMnNxAH4AIQAAAAEAAAAAc3EAfgAdAAAAAXcEAAAAAXNxAH4AJnEAfgAt
-c3EAfgAucQB+ADJ0AAhtZXNzYWdlMnNxAH4ANHQAA1R3b3hwc3EAfgA4AAAA0nEAfgAyeHNyABJv
-cmcuZHJvb2xzLnJ1bGUuT3IVF4eAAV23IwIAAHhxAH4AGnNxAH4AHQAAAAJ3BAAAAApzcQB+ACEA
-AAACAAAAAHNxAH4AHQAAAAF3BAAAAAFzcQB+ACZxAH4ALXEAfgA9c3EAfgA0cQB+ADd4cHNxAH4A
-OAAAANJxAH4AMnNxAH4AIQAAAAP/////c3EAfgAdAAAAAXcEAAAAAXNxAH4AJnEAfgAtcQB+AD1z
-cQB+ADRxAH4AQHhwc3EAfgA4AAAA0nEAfgAyeHNxAH4AQnNxAH4AHQAAAAJ3BAAAAApzcQB+ACEA
-AAAE/////3NxAH4AHQAAAAF3BAAAAAFzcQB+ACZxAH4ALXNxAH4ALnEAfgAydAAIbWVzc2FnZTNz
-cQB+ADRxAH4AN3hwc3EAfgA4AAAA0nEAfgAyc3EAfgAhAAAABf////5zcQB+AB0AAAABdwQAAAAB
-c3EAfgAmcQB+AC1xAH4AVHNxAH4ANHQABVRocmVleHBzcQB+ADgAAADScQB+ADJ4eHQADUhlbGxv
-IFdvcmxkIDFwdAA4b3JnLmRyb29scy5yZXRlb28uUnVsZV9IZWxsb19Xb3JsZF8yXzBDb25zZXF1
-ZW5jZUludm9rZXJzcQB+AA0AAAAAAAAAAAIAAAAAAAFwcQB+ABRzcgA4b3JnLmRyb29scy5yZXRl
-b28uUnVsZV9IZWxsb19Xb3JsZF8yXzBDb25zZXF1ZW5jZUludm9rZXJuXqy++rNzagIAAHhwdXEA
-fgAKAAAAAHNxAH4AAD9AAAAAAAAMdwgAAAAQAAAAAHhwc3EAfgAZc3EAfgAdAAAABHcEAAAACnNx
-AH4AGXNxAH4AHQAAAAJ3BAAAAApzcQB+ACEAAAAAAAAAAHNxAH4AHQAAAAF3BAAAAAFzcQB+ACZx
-AH4ALXEAfgAwc3EAfgA0cQB+ADd4cHNxAH4AOAAAANJxAH4AMnNxAH4AIQAAAAEAAAAAc3EAfgAd
-AAAAAXcEAAAAAXNxAH4AJnEAfgAtcQB+AD1zcQB+ADRxAH4AQHhwc3EAfgA4AAAA0nEAfgAyeHNx
-AH4AQnNxAH4AHQAAAAJ3BAAAAApzcQB+ACEAAAACAAAAAHNxAH4AHQAAAAF3BAAAAAFzcQB+ACZx
-AH4ALXEAfgA9c3EAfgA0cQB+ADd4cHNxAH4AOAAAANJxAH4AMnNxAH4AIQAAAAP/////c3EAfgAd
-AAAAAXcEAAAAAXNxAH4AJnEAfgAtcQB+AD1zcQB+ADRxAH4AQHhwc3EAfgA4AAAA0nEAfgAyeHNx
-AH4AQnNxAH4AHQAAAAJ3BAAAAApzcQB+ACEAAAAE/////3NxAH4AHQAAAAF3BAAAAAFzcQB+ACZx
-AH4ALXEAfgBUc3EAfgA0cQB+ADd4cHNxAH4AOAAAANJxAH4AMnNxAH4AIQAAAAX////+c3EAfgAd
-AAAAAXcEAAAAAXNxAH4AJnEAfgAtcQB+AFRzcQB+ADRxAH4AXHhwc3EAfgA4AAAA0nEAfgAyeHEA
-fgAHeHQADUhlbGxvIFdvcmxkIDJweA==</byte-array>
+dwQAAAABc3IAIW9yZy5kcm9vbHMucnVsZS5MaXRlcmFsQ29uc3RyYWludAAAAAAAAAFAAgACTAAJ
+ZXh0cmFjdG9ydAAfTG9yZy9kcm9vbHMvc3BpL0ZpZWxkRXh0cmFjdG9yO0wAC3Jlc3RyaWN0aW9u
+dAAkTG9yZy9kcm9vbHMvcnVsZS9MaXRlcmFsUmVzdHJpY3Rpb247eHBzcgAjb3JnLmRyb29scy5i
+YXNlLkNsYXNzRmllbGRFeHRyYWN0b3IAAAAAAAABQAIAAkwABWNsYXp6dAARTGphdmEvbGFuZy9D
+bGFzcztMAAlmaWVsZE5hbWVxAH4ADnhwdnIAEm9yZy5kcm9vbHMuTWVzc2FnZQAAAAAAAAAAAAAA
+eHB0AAhtZXNzYWdlMXNyACJvcmcuZHJvb2xzLnJ1bGUuTGl0ZXJhbFJlc3RyaWN0aW9uAAAAAAAA
+AUACAAJMAAlldmFsdWF0b3J0ABpMb3JnL2Ryb29scy9zcGkvRXZhbHVhdG9yO0wABWZpZWxkdAAb
+TG9yZy9kcm9vbHMvc3BpL0ZpZWxkVmFsdWU7eHBzcgA9b3JnLmRyb29scy5iYXNlLmV2YWx1YXRv
+cnMuU3RyaW5nRmFjdG9yeSRTdHJpbmdFcXVhbEV2YWx1YXRvcgAAAAAAAAFAAgAAeHIAHW9yZy5k
+cm9vbHMuYmFzZS5CYXNlRXZhbHVhdG9yVSSLs2Wsrn8CAAJMAAhvcGVyYXRvcnQAJUxvcmcvZHJv
+b2xzL2Jhc2UvZXZhbHVhdG9ycy9PcGVyYXRvcjtMAAR0eXBldAAbTG9yZy9kcm9vbHMvYmFzZS9W
+YWx1ZVR5cGU7eHBzcgAjb3JnLmRyb29scy5iYXNlLmV2YWx1YXRvcnMuT3BlcmF0b3IAAAAAAAAB
+QAIAAUwACG9wZXJhdG9ycQB+AA54cHQAAj09c3IAGW9yZy5kcm9vbHMuYmFzZS5WYWx1ZVR5cGUA
+AAAAAAABQAIAA0wACWNsYXNzVHlwZXEAfgArTAAQZXZhbHVhdG9yRmFjdG9yeXQALUxvcmcvZHJv
+b2xzL2Jhc2UvZXZhbHVhdG9ycy9FdmFsdWF0b3JGYWN0b3J5O0wABG5hbWVxAH4ADnhwdnIAEGph
+dmEubGFuZy5TdHJpbmeg8KQ4ejuzQgIAAHhwc3IAKG9yZy5kcm9vbHMuYmFzZS5ldmFsdWF0b3Jz
+LlN0cmluZ0ZhY3RvcnnnjP+pwAUavgIAAHhwdAAGU3RyaW5nc3IAGW9yZy5kcm9vbHMuYmFzZS5G
+aWVsZEltcGwAAAAAAAABQAIAAUwABXZhbHVldAASTGphdmEvbGFuZy9PYmplY3Q7eHB0AANPbmV4
+cHNyAB9vcmcuZHJvb2xzLmJhc2UuQ2xhc3NPYmplY3RUeXBl3OzYF9SU+/0CAAJMAA9vYmplY3RU
+eXBlQ2xhc3NxAH4AK0wACXZhbHVlVHlwZXEAfgA3eHBxAH4ALnNxAH4APHZyABBqYXZhLmxhbmcu
+T2JqZWN0AAAAAAAAAAAAAAB4cHNyAChvcmcuZHJvb2xzLmJhc2UuZXZhbHVhdG9ycy5PYmplY3RG
+YWN0b3J5iWJzm94ZVjkCAAB4cHQABk9iamVjdHNxAH4AIQAAAAEAAAAAc3EAfgAdAAAAAXcEAAAA
+AXNxAH4AJnNxAH4AKnEAfgAudAAIbWVzc2FnZTJzcQB+ADBxAH4AOHNxAH4ARHQAA1R3b3hwc3EA
+fgBIcQB+AC5xAH4ASnhzcgASb3JnLmRyb29scy5ydWxlLk9yFReHgAFdtyMCAAB4cQB+ABpzcQB+
+AB0AAAACdwQAAAAKc3EAfgAhAAAAAgAAAABzcQB+AB0AAAABdwQAAAABc3EAfgAmcQB+AFNzcQB+
+ADBxAH4AOHNxAH4ARHEAfgBHeHBzcQB+AEhxAH4ALnEAfgBKc3EAfgAhAAAAA/////9zcQB+AB0A
+AAABdwQAAAABc3EAfgAmcQB+AFNzcQB+ADBxAH4AOHNxAH4ARHEAfgBXeHBzcQB+AEhxAH4ALnEA
+fgBKeHNxAH4AWXNxAH4AHQAAAAJ3BAAAAApzcQB+ACEAAAAE/////3NxAH4AHQAAAAF3BAAAAAFz
+cQB+ACZzcQB+ACpxAH4ALnQACG1lc3NhZ2Uzc3EAfgAwcQB+ADhzcQB+AERxAH4AR3hwc3EAfgBI
+cQB+AC5xAH4ASnNxAH4AIQAAAAX////+c3EAfgAdAAAAAXcEAAAAAXNxAH4AJnEAfgBtc3EAfgAw
+cQB+ADhzcQB+AER0AAVUaHJlZXhwc3EAfgBIcQB+AC5xAH4ASnh4dAANSGVsbG8gV29ybGQgMXB0
+ADhvcmcuZHJvb2xzLnJldGVvby5SdWxlX0hlbGxvX1dvcmxkXzJfMENvbnNlcXVlbmNlSW52b2tl
+cnNxAH4ADQAAAAAAAAAAAgAAAAAAAXBxAH4AFHNyADhvcmcuZHJvb2xzLnJldGVvby5SdWxlX0hl
+bGxvX1dvcmxkXzJfMENvbnNlcXVlbmNlSW52b2tlcm5erL76s3NqAgAAeHB1cQB+AAoAAAAAc3EA
+fgAAP0AAAAAAAAx3CAAAABAAAAAAeHBzcQB+ABlzcQB+AB0AAAAEdwQAAAAKc3EAfgAZc3EAfgAd
+AAAAAncEAAAACnNxAH4AIQAAAAAAAAAAc3EAfgAdAAAAAXcEAAAAAXNxAH4AJnEAfgAsc3EAfgAw
+cQB+ADhzcQB+AERxAH4AR3hwc3EAfgBIcQB+AC5xAH4ASnNxAH4AIQAAAAEAAAAAc3EAfgAdAAAA
+AXcEAAAAAXNxAH4AJnEAfgBTc3EAfgAwcQB+ADhzcQB+AERxAH4AV3hwc3EAfgBIcQB+AC5xAH4A
+SnhzcQB+AFlzcQB+AB0AAAACdwQAAAAKc3EAfgAhAAAAAgAAAABzcQB+AB0AAAABdwQAAAABc3EA
+fgAmcQB+AFNzcQB+ADBxAH4AOHNxAH4ARHEAfgBHeHBzcQB+AEhxAH4ALnEAfgBKc3EAfgAhAAAA
+A/////9zcQB+AB0AAAABdwQAAAABc3EAfgAmcQB+AFNzcQB+ADBxAH4AOHNxAH4ARHEAfgBXeHBz
+cQB+AEhxAH4ALnEAfgBKeHNxAH4AWXNxAH4AHQAAAAJ3BAAAAApzcQB+ACEAAAAE/////3NxAH4A
+HQAAAAF3BAAAAAFzcQB+ACZxAH4AbXNxAH4AMHEAfgA4c3EAfgBEcQB+AEd4cHNxAH4ASHEAfgAu
+cQB+AEpzcQB+ACEAAAAF/////nNxAH4AHQAAAAF3BAAAAAFzcQB+ACZxAH4AbXNxAH4AMHEAfgA4
+c3EAfgBEcQB+AHd4cHNxAH4ASHEAfgAucQB+AEp4cQB+AAd4dAANSGVsbG8gV29ybGQgMnB4</byte-array>
         </org.drools.rule.PackageCompilationData>
         <string>org.drools.reteoo</string>
         <list>
@@ -240,46 +251,58 @@
 AkCvUeYCAAVJAAVpbmRleEkABm9mZnNldEwAC2NvbnN0cmFpbnRzcQB+ABRMAAtkZWNsYXJhdGlv
 bnQAHUxvcmcvZHJvb2xzL3J1bGUvRGVjbGFyYXRpb247TAAKb2JqZWN0VHlwZXQAG0xvcmcvZHJv
 b2xzL3NwaS9PYmplY3RUeXBlO3hwAAAAAAAAAABzcQB+ABcAAAABdwQAAAABc3IAIW9yZy5kcm9v
-bHMucnVsZS5MaXRlcmFsQ29uc3RyYWludAOS+tbk+ZKzAgADTAAJZXZhbHVhdG9ydAAaTG9yZy9k
-cm9vbHMvc3BpL0V2YWx1YXRvcjtMAAlleHRyYWN0b3J0AB9Mb3JnL2Ryb29scy9zcGkvRmllbGRF
-eHRyYWN0b3I7TAAFZmllbGR0ABtMb3JnL2Ryb29scy9zcGkvRmllbGRWYWx1ZTt4cHNyAD1vcmcu
-ZHJvb2xzLmJhc2UuZXZhbHVhdG9ycy5TdHJpbmdGYWN0b3J5JFN0cmluZ0VxdWFsRXZhbHVhdG9y
-SU/lvdDlSJYCAAB4cgAdb3JnLmRyb29scy5iYXNlLkJhc2VFdmFsdWF0b3KuQXGsNOGNawIAAkkA
-CG9wZXJhdG9ySQAEdHlwZXhwAAAAAQAAALRzcgAjb3JnLmRyb29scy5iYXNlLkNsYXNzRmllbGRF
-eHRyYWN0b3IZ4kABiRDxowIAAkwABWNsYXp6dAARTGphdmEvbGFuZy9DbGFzcztMAAlmaWVsZE5h
-bWVxAH4ABXhwdnIAEm9yZy5kcm9vbHMuTWVzc2FnZQAAAAAAAAAAAAAAeHB0AAhtZXNzYWdlMXNy
-ABlvcmcuZHJvb2xzLmJhc2UuRmllbGRJbXBsrplN9KzddkQCAAFMAAV2YWx1ZXQAEkxqYXZhL2xh
-bmcvT2JqZWN0O3hwdAADT25leHBzcgAfb3JnLmRyb29scy5iYXNlLkNsYXNzT2JqZWN0VHlwZdzs
-2BfUlPv9AgACSQAJdmFsdWVUeXBlTAAPb2JqZWN0VHlwZUNsYXNzcQB+ACl4cAAAANJxAH4ALHNx
-AH4AGwAAAAEAAAAAc3EAfgAXAAAAAXcEAAAAAXNxAH4AIHEAfgAnc3EAfgAocQB+ACx0AAhtZXNz
-YWdlMnNxAH4ALnQAA1R3b3hwc3EAfgAyAAAA0nEAfgAseHNyABJvcmcuZHJvb2xzLnJ1bGUuT3IV
-F4eAAV23IwIAAHhxAH4AE3NxAH4AFwAAAAJ3BAAAAApzcQB+ABsAAAACAAAAAHNxAH4AFwAAAAF3
-BAAAAAFzcQB+ACBxAH4AJ3EAfgA3c3EAfgAucQB+ADF4cHNxAH4AMgAAANJxAH4ALHNxAH4AGwAA
-AAP/////c3EAfgAXAAAAAXcEAAAAAXNxAH4AIHEAfgAncQB+ADdzcQB+AC5xAH4AOnhwc3EAfgAy
-AAAA0nEAfgAseHNxAH4APHNxAH4AFwAAAAJ3BAAAAApzcQB+ABsAAAAE/////3NxAH4AFwAAAAF3
-BAAAAAFzcQB+ACBxAH4AJ3NxAH4AKHEAfgAsdAAIbWVzc2FnZTNzcQB+AC5xAH4AMXhwc3EAfgAy
-AAAA0nEAfgAsc3EAfgAbAAAABf////5zcQB+ABcAAAABdwQAAAABc3EAfgAgcQB+ACdxAH4ATnNx
-AH4ALnQABVRocmVleHBzcQB+ADIAAADScQB+ACx4eHEAfgADcHQADUhlbGxvIFdvcmxkIDJzcQB+
-AAQAAAAAAAAAAAIAAAAAAAFwcQB+AAxzcgA4b3JnLmRyb29scy5yZXRlb28uUnVsZV9IZWxsb19X
-b3JsZF8yXzBDb25zZXF1ZW5jZUludm9rZXJuXqy++rNzagIAAHhwdXEAfgAPAAAAAHNxAH4AAT9A
-AAAAAAAMdwgAAAAQAAAAAHhwc3EAfgASc3EAfgAXAAAABHcEAAAACnNxAH4AEnNxAH4AFwAAAAJ3
-BAAAAApzcQB+ABsAAAAAAAAAAHNxAH4AFwAAAAF3BAAAAAFzcQB+ACBxAH4AJ3EAfgAqc3EAfgAu
-cQB+ADF4cHNxAH4AMgAAANJxAH4ALHNxAH4AGwAAAAEAAAAAc3EAfgAXAAAAAXcEAAAAAXNxAH4A
-IHEAfgAncQB+ADdzcQB+AC5xAH4AOnhwc3EAfgAyAAAA0nEAfgAseHNxAH4APHNxAH4AFwAAAAJ3
-BAAAAApzcQB+ABsAAAACAAAAAHNxAH4AFwAAAAF3BAAAAAFzcQB+ACBxAH4AJ3EAfgA3c3EAfgAu
-cQB+ADF4cHNxAH4AMgAAANJxAH4ALHNxAH4AGwAAAAP/////c3EAfgAXAAAAAXcEAAAAAXNxAH4A
-IHEAfgAncQB+ADdzcQB+AC5xAH4AOnhwc3EAfgAyAAAA0nEAfgAseHNxAH4APHNxAH4AFwAAAAJ3
-BAAAAApzcQB+ABsAAAAE/////3NxAH4AFwAAAAF3BAAAAAFzcQB+ACBxAH4AJ3EAfgBOc3EAfgAu
-cQB+ADF4cHNxAH4AMgAAANJxAH4ALHNxAH4AGwAAAAX////+c3EAfgAXAAAAAXcEAAAAAXNxAH4A
-IHEAfgAncQB+AE5zcQB+AC5xAH4AVnhwc3EAfgAyAAAA0nEAfgAseHNyAB1vcmcuZHJvb2xzLnJ1
-bGUuRXZhbENvbmRpdGlvbj4q3Axyg48WAgACTAAKZXhwcmVzc2lvbnQAH0xvcmcvZHJvb2xzL3Nw
-aS9FdmFsRXhwcmVzc2lvbjtbABRyZXF1aXJlZERlY2xhcmF0aW9uc3EAfgAHeHEAfgAVc3IAMm9y
-Zy5kcm9vbHMucmV0ZW9vLlJ1bGVfSGVsbG9fV29ybGRfMl8wRXZhbDBJbnZva2Vybl6svvqzc2oC
-AAB4cHVxAH4ADwAAAAB4cQB+AFhweAA=</byte-array>
+bHMucnVsZS5MaXRlcmFsQ29uc3RyYWludAAAAAAAAAFAAgACTAAJZXh0cmFjdG9ydAAfTG9yZy9k
+cm9vbHMvc3BpL0ZpZWxkRXh0cmFjdG9yO0wAC3Jlc3RyaWN0aW9udAAkTG9yZy9kcm9vbHMvcnVs
+ZS9MaXRlcmFsUmVzdHJpY3Rpb247eHBzcgAjb3JnLmRyb29scy5iYXNlLkNsYXNzRmllbGRFeHRy
+YWN0b3IAAAAAAAABQAIAAkwABWNsYXp6dAARTGphdmEvbGFuZy9DbGFzcztMAAlmaWVsZE5hbWVx
+AH4ABXhwdnIAEm9yZy5kcm9vbHMuTWVzc2FnZQAAAAAAAAAAAAAAeHB0AAhtZXNzYWdlMXNyACJv
+cmcuZHJvb2xzLnJ1bGUuTGl0ZXJhbFJlc3RyaWN0aW9uAAAAAAAAAUACAAJMAAlldmFsdWF0b3J0
+ABpMb3JnL2Ryb29scy9zcGkvRXZhbHVhdG9yO0wABWZpZWxkdAAbTG9yZy9kcm9vbHMvc3BpL0Zp
+ZWxkVmFsdWU7eHBzcgA9b3JnLmRyb29scy5iYXNlLmV2YWx1YXRvcnMuU3RyaW5nRmFjdG9yeSRT
+dHJpbmdFcXVhbEV2YWx1YXRvcgAAAAAAAAFAAgAAeHIAHW9yZy5kcm9vbHMuYmFzZS5CYXNlRXZh
+bHVhdG9yVSSLs2Wsrn8CAAJMAAhvcGVyYXRvcnQAJUxvcmcvZHJvb2xzL2Jhc2UvZXZhbHVhdG9y
+cy9PcGVyYXRvcjtMAAR0eXBldAAbTG9yZy9kcm9vbHMvYmFzZS9WYWx1ZVR5cGU7eHBzcgAjb3Jn
+LmRyb29scy5iYXNlLmV2YWx1YXRvcnMuT3BlcmF0b3IAAAAAAAABQAIAAUwACG9wZXJhdG9ycQB+
+AAV4cHQAAj09c3IAGW9yZy5kcm9vbHMuYmFzZS5WYWx1ZVR5cGUAAAAAAAABQAIAA0wACWNsYXNz
+VHlwZXEAfgAlTAAQZXZhbHVhdG9yRmFjdG9yeXQALUxvcmcvZHJvb2xzL2Jhc2UvZXZhbHVhdG9y
+cy9FdmFsdWF0b3JGYWN0b3J5O0wABG5hbWVxAH4ABXhwdnIAEGphdmEubGFuZy5TdHJpbmeg8KQ4
+ejuzQgIAAHhwc3IAKG9yZy5kcm9vbHMuYmFzZS5ldmFsdWF0b3JzLlN0cmluZ0ZhY3RvcnnnjP+p
+wAUavgIAAHhwdAAGU3RyaW5nc3IAGW9yZy5kcm9vbHMuYmFzZS5GaWVsZEltcGwAAAAAAAABQAIA
+AUwABXZhbHVldAASTGphdmEvbGFuZy9PYmplY3Q7eHB0AANPbmV4cHNyAB9vcmcuZHJvb2xzLmJh
+c2UuQ2xhc3NPYmplY3RUeXBl3OzYF9SU+/0CAAJMAA9vYmplY3RUeXBlQ2xhc3NxAH4AJUwACXZh
+bHVlVHlwZXEAfgAxeHBxAH4AKHNxAH4ANnZyABBqYXZhLmxhbmcuT2JqZWN0AAAAAAAAAAAAAAB4
+cHNyAChvcmcuZHJvb2xzLmJhc2UuZXZhbHVhdG9ycy5PYmplY3RGYWN0b3J5iWJzm94ZVjkCAAB4
+cHQABk9iamVjdHNxAH4AGwAAAAEAAAAAc3EAfgAXAAAAAXcEAAAAAXNxAH4AIHNxAH4AJHEAfgAo
+dAAIbWVzc2FnZTJzcQB+ACpxAH4AMnNxAH4APnQAA1R3b3hwc3EAfgBCcQB+AChxAH4ARHhzcgAS
+b3JnLmRyb29scy5ydWxlLk9yFReHgAFdtyMCAAB4cQB+ABNzcQB+ABcAAAACdwQAAAAKc3EAfgAb
+AAAAAgAAAABzcQB+ABcAAAABdwQAAAABc3EAfgAgcQB+AE1zcQB+ACpxAH4AMnNxAH4APnEAfgBB
+eHBzcQB+AEJxAH4AKHEAfgBEc3EAfgAbAAAAA/////9zcQB+ABcAAAABdwQAAAABc3EAfgAgcQB+
+AE1zcQB+ACpxAH4AMnNxAH4APnEAfgBReHBzcQB+AEJxAH4AKHEAfgBEeHNxAH4AU3NxAH4AFwAA
+AAJ3BAAAAApzcQB+ABsAAAAE/////3NxAH4AFwAAAAF3BAAAAAFzcQB+ACBzcQB+ACRxAH4AKHQA
+CG1lc3NhZ2Uzc3EAfgAqcQB+ADJzcQB+AD5xAH4AQXhwc3EAfgBCcQB+AChxAH4ARHNxAH4AGwAA
+AAX////+c3EAfgAXAAAAAXcEAAAAAXNxAH4AIHEAfgBnc3EAfgAqcQB+ADJzcQB+AD50AAVUaHJl
+ZXhwc3EAfgBCcQB+AChxAH4ARHh4cQB+AANwdAANSGVsbG8gV29ybGQgMnNxAH4ABAAAAAAAAAAA
+AgAAAAAAAXBxAH4ADHNyADhvcmcuZHJvb2xzLnJldGVvby5SdWxlX0hlbGxvX1dvcmxkXzJfMENv
+bnNlcXVlbmNlSW52b2tlcm5erL76s3NqAgAAeHB1cQB+AA8AAAAAc3EAfgABP0AAAAAAAAx3CAAA
+ABAAAAAAeHBzcQB+ABJzcQB+ABcAAAAEdwQAAAAKc3EAfgASc3EAfgAXAAAAAncEAAAACnNxAH4A
+GwAAAAAAAAAAc3EAfgAXAAAAAXcEAAAAAXNxAH4AIHEAfgAmc3EAfgAqcQB+ADJzcQB+AD5xAH4A
+QXhwc3EAfgBCcQB+AChxAH4ARHNxAH4AGwAAAAEAAAAAc3EAfgAXAAAAAXcEAAAAAXNxAH4AIHEA
+fgBNc3EAfgAqcQB+ADJzcQB+AD5xAH4AUXhwc3EAfgBCcQB+AChxAH4ARHhzcQB+AFNzcQB+ABcA
+AAACdwQAAAAKc3EAfgAbAAAAAgAAAABzcQB+ABcAAAABdwQAAAABc3EAfgAgcQB+AE1zcQB+ACpx
+AH4AMnNxAH4APnEAfgBBeHBzcQB+AEJxAH4AKHEAfgBEc3EAfgAbAAAAA/////9zcQB+ABcAAAAB
+dwQAAAABc3EAfgAgcQB+AE1zcQB+ACpxAH4AMnNxAH4APnEAfgBReHBzcQB+AEJxAH4AKHEAfgBE
+eHNxAH4AU3NxAH4AFwAAAAJ3BAAAAApzcQB+ABsAAAAE/////3NxAH4AFwAAAAF3BAAAAAFzcQB+
+ACBxAH4AZ3NxAH4AKnEAfgAyc3EAfgA+cQB+AEF4cHNxAH4AQnEAfgAocQB+AERzcQB+ABsAAAAF
+/////nNxAH4AFwAAAAF3BAAAAAFzcQB+ACBxAH4AZ3NxAH4AKnEAfgAyc3EAfgA+cQB+AHF4cHNx
+AH4AQnEAfgAocQB+AER4c3IAHW9yZy5kcm9vbHMucnVsZS5FdmFsQ29uZGl0aW9uPircDHKDjxYC
+AAJMAApleHByZXNzaW9udAAfTG9yZy9kcm9vbHMvc3BpL0V2YWxFeHByZXNzaW9uO1sAFHJlcXVp
+cmVkRGVjbGFyYXRpb25zcQB+AAd4cQB+ABVzcgAyb3JnLmRyb29scy5yZXRlb28uUnVsZV9IZWxs
+b19Xb3JsZF8yXzBFdmFsMEludm9rZXJuXqy++rNzagIAAHhwdXEAfgAPAAAAAHhxAH4Ac3B4AA==
+</byte-array>
       </org.drools.rule.Package>
     </entry>
   </map>
-  <byte-array>rO0ABXQAJDk3YzVmMTEyLTg4MjctNDYxZS04NWY3LTIzMjQ5ZWNhMjgzOHNyAClvcmcuZHJvb2xz
+  <byte-array>rO0ABXQAJGIyMDZlMTYwLWMxMTYtNDVhNC1hMDVlLTQ3ZWM5YjIxN2YzZnNyAClvcmcuZHJvb2xz
 LnJldGVvby5SZXRlb29GYWN0SGFuZGxlRmFjdG9yeQAAAAAAAAEsAgAAeHIAK29yZy5kcm9vbHMu
 Y29tbW9uLkFic3RyYWN0RmFjdEhhbmRsZUZhY3RvcnlrwcaUre4SdAIAA0oAB2NvdW50ZXJKAAJp
 ZEwADmZhY3RIYW5kbGVQb29sdAAkTG9yZy9kcm9vbHMvdXRpbC9QcmltaXRpdmVMb25nU3RhY2s7
@@ -379,86 +402,97 @@
 cm9vbHMucnVsZS5Db2x1bW5/ObACQK9R5gIABUkABWluZGV4SQAGb2Zmc2V0TAALY29uc3RyYWlu
 dHNxAH4ALEwAC2RlY2xhcmF0aW9udAAdTG9yZy9kcm9vbHMvcnVsZS9EZWNsYXJhdGlvbjtMAApv
 YmplY3RUeXBlcQB+ACh4cAAAAAAAAAAAc3EAfgAlAAAAAXcEAAAAAXNyACFvcmcuZHJvb2xzLnJ1
-bGUuTGl0ZXJhbENvbnN0cmFpbnQDkvrW5PmSswIAA0wACWV2YWx1YXRvcnQAGkxvcmcvZHJvb2xz
-L3NwaS9FdmFsdWF0b3I7TAAJZXh0cmFjdG9ydAAfTG9yZy9kcm9vbHMvc3BpL0ZpZWxkRXh0cmFj
-dG9yO0wABWZpZWxkdAAbTG9yZy9kcm9vbHMvc3BpL0ZpZWxkVmFsdWU7eHBzcgA9b3JnLmRyb29s
-cy5iYXNlLmV2YWx1YXRvcnMuU3RyaW5nRmFjdG9yeSRTdHJpbmdFcXVhbEV2YWx1YXRvcklP5b3Q
-5UiWAgAAeHIAHW9yZy5kcm9vbHMuYmFzZS5CYXNlRXZhbHVhdG9yrkFxrDThjWsCAAJJAAhvcGVy
-YXRvckkABHR5cGV4cAAAAAEAAAC0c3IAI29yZy5kcm9vbHMuYmFzZS5DbGFzc0ZpZWxkRXh0cmFj
-dG9yGeJAAYkQ8aMCAAJMAAVjbGF6enQAEUxqYXZhL2xhbmcvQ2xhc3M7TAAJZmllbGROYW1lcQB+
-AEx4cHZyABJvcmcuZHJvb2xzLk1lc3NhZ2UAAAAAAAAAAAAAAHhwdAAIbWVzc2FnZTFzcgAZb3Jn
-LmRyb29scy5iYXNlLkZpZWxkSW1wbK6ZTfSs3XZEAgABTAAFdmFsdWV0ABJMamF2YS9sYW5nL09i
-amVjdDt4cHEAfgA0eHBzcgAfb3JnLmRyb29scy5iYXNlLkNsYXNzT2JqZWN0VHlwZdzs2BfUlPv9
-AgACSQAJdmFsdWVUeXBlTAAPb2JqZWN0VHlwZUNsYXNzcQB+AGx4cAAAANJxAH4Ab3NxAH4AXwAA
-AAEAAAAAc3EAfgAlAAAAAXcEAAAAAXNxAH4AY3EAfgBqc3EAfgBrcQB+AG90AAhtZXNzYWdlMnNx
-AH4AcXQAA1R3b3hwc3EAfgB0AAAA0nEAfgBveHNyABJvcmcuZHJvb2xzLnJ1bGUuT3IVF4eAAV23
-IwIAAHhxAH4AWXNxAH4AJQAAAAJ3BAAAAApzcQB+AF8AAAACAAAAAHNxAH4AJQAAAAF3BAAAAAFz
-cQB+AGNxAH4AanEAfgB5c3EAfgBxcQB+ADR4cHNxAH4AdAAAANJxAH4Ab3NxAH4AXwAAAAP/////
-c3EAfgAlAAAAAXcEAAAAAXNxAH4AY3EAfgBqcQB+AHlzcQB+AHFxAH4AfHhwc3EAfgB0AAAA0nEA
-fgBveHNxAH4AfnNxAH4AJQAAAAJ3BAAAAApzcQB+AF8AAAAE/////3NxAH4AJQAAAAF3BAAAAAFz
-cQB+AGNxAH4AanNxAH4Aa3EAfgBvdAAIbWVzc2FnZTNzcQB+AHFxAH4ANHhwc3EAfgB0AAAA0nEA
-fgBvc3EAfgBfAAAABf////5zcQB+ACUAAAABdwQAAAABc3EAfgBjcQB+AGpxAH4AkHNxAH4AcXQA
-BVRocmVleHBzcQB+AHQAAADScQB+AG94eHQADUhlbGxvIFdvcmxkIDFwcQB+AEZzcgAjb3JnLmRy
-b29scy5yZXRlb28uRXZhbENvbmRpdGlvbk5vZGUbkCfPlIvj4AIAAkwACWNvbmRpdGlvbnQAH0xv
-cmcvZHJvb2xzL3J1bGUvRXZhbENvbmRpdGlvbjtMAAt0dXBsZVNvdXJjZXEAfgBBeHEAfgA8AAEA
-AAATAAAAAHNxAH4AJQAAAAF3BAAAAAFzcQB+AEgAAAAAABQAAAAAc3EAfgBLAAAAAAAAAAACAAAA
-AAABcHEAfgBSc3IAOG9yZy5kcm9vbHMucmV0ZW9vLlJ1bGVfSGVsbG9fV29ybGRfMl8wQ29uc2Vx
-dWVuY2VJbnZva2Vybl6svvqzc2oCAAB4cHVxAH4AVQAAAABzcQB+AA0/QAAAAAAADHcIAAAAEAAA
-AAB4cHNxAH4AWHNxAH4AJQAAAAR3BAAAAApzcQB+AFhzcQB+ACUAAAACdwQAAAAKc3EAfgBfAAAA
-AAAAAABzcQB+ACUAAAABdwQAAAABc3EAfgBjcQB+AGpxAH4AbXNxAH4AcXEAfgA0eHBzcQB+AHQA
-AADScQB+AG9zcQB+AF8AAAABAAAAAHNxAH4AJQAAAAF3BAAAAAFzcQB+AGNxAH4AanEAfgB5c3EA
-fgBxcQB+AHx4cHNxAH4AdAAAANJxAH4Ab3hzcQB+AH5zcQB+ACUAAAACdwQAAAAKc3EAfgBfAAAA
-AgAAAABzcQB+ACUAAAABdwQAAAABc3EAfgBjcQB+AGpxAH4AeXNxAH4AcXEAfgA0eHBzcQB+AHQA
-AADScQB+AG9zcQB+AF8AAAAD/////3NxAH4AJQAAAAF3BAAAAAFzcQB+AGNxAH4AanEAfgB5c3EA
-fgBxcQB+AHx4cHNxAH4AdAAAANJxAH4Ab3hzcQB+AH5zcQB+ACUAAAACdwQAAAAKc3EAfgBfAAAA
-BP////9zcQB+ACUAAAABdwQAAAABc3EAfgBjcQB+AGpxAH4AkHNxAH4AcXEAfgA0eHBzcQB+AHQA
-AADScQB+AG9zcQB+AF8AAAAF/////nNxAH4AJQAAAAF3BAAAAAFzcQB+AGNxAH4AanEAfgCQc3EA
-fgBxcQB+AJh4cHNxAH4AdAAAANJxAH4Ab3hzcgAdb3JnLmRyb29scy5ydWxlLkV2YWxDb25kaXRp
-b24+KtwMcoOPFgIAAkwACmV4cHJlc3Npb250AB9Mb3JnL2Ryb29scy9zcGkvRXZhbEV4cHJlc3Np
-b247WwAUcmVxdWlyZWREZWNsYXJhdGlvbnNxAH4ATnhxAH4AWnNyADJvcmcuZHJvb2xzLnJldGVv
-by5SdWxlX0hlbGxvX1dvcmxkXzJfMEV2YWwwSW52b2tlcm5erL76s3NqAgAAeHB1cQB+AFUAAAAA
-eHQADUhlbGxvIFdvcmxkIDJwcQB+AJ14cQB+AM1xAH4ARnhzcgAgb3JnLmRyb29scy5jb21tb24u
-QmV0YU5vZGVCaW5kZXLZOk2QQfBaswIAAVsAC2NvbnN0cmFpbnRzdAAhW0xvcmcvZHJvb2xzL3Nw
-aS9GaWVsZENvbnN0cmFpbnQ7eHB1cgAhW0xvcmcuZHJvb2xzLnNwaS5GaWVsZENvbnN0cmFpbnQ7
-mvaX9rRKD8YCAAB4cAAAAAFzcgAtb3JnLmRyb29scy5jb21tb24uSW5zdGFuY2VOb3RFcXVhbHND
-b25zdHJhaW50u86LzZRlbJsCAAJJAAtvdGhlckNvbHVtblsADGRlY2xhcmF0aW9uc3EAfgBOeHAA
-AAACdXEAfgBVAAAAAHEAfgBEc3EAfgA1AAEAAAAIAAAAA3NxAH4AJAAAAAJ3BAAAAAJxAH4ARnNx
-AH4APwAAAAAADwAAAAFzcQB+ACUAAAACdwQAAAACc3EAfgBIAAAAAAAQAAAAAHEAfgBRcQB+ANxz
-cQB+AJsAAQAAABcAAAAAc3EAfgAlAAAAAXcEAAAAAXNxAH4ASAAAAAAAGAAAAABxAH4AoHEAfgDf
-eHEAfgDNcQB+ANx4c3EAfgDSdXEAfgDVAAAAAXNxAH4A1wAAAAJ1cQB+AFUAAAAAc3EAfgA/AAAA
-AAAOAAAAA3NxAH4AJQAAAAJ3BAAAAAJxAH4A3HNxAH4APwAAAAAAEQAAAAFzcQB+ACUAAAACdwQA
-AAACc3EAfgBIAAAAAAASAAAAAHEAfgBRcQB+AOhzcQB+AJsAAQAAABkAAAAAc3EAfgAlAAAAAXcE
-AAAAAXNxAH4ASAAAAAAAGgAAAABxAH4AoHEAfgDreHEAfgDNcQB+AOh4c3EAfgDSdXEAfgDVAAAA
-AXNxAH4A1wAAAAJ1cQB+AFUAAAAAcQB+AOZzcQB+ADUAAQAAAAsAAAADc3EAfgAkAAAAAncEAAAA
-AnNxAH4APwAAAAAADAAAAAFzcQB+ACUAAAACdwQAAAACc3EAfgBIAAAAAAANAAAAAHEAfgBRcQB+
-APRzcQB+AJsAAQAAABUAAAAAc3EAfgAlAAAAAXcEAAAAAXNxAH4ASAAAAAAAFgAAAABxAH4AoHEA
-fgD3eHEAfgDNcQB+APR4c3EAfgDSdXEAfgDVAAAAAXNxAH4A1wAAAAJ1cQB+AFUAAAAAcQB+AERx
-AH4A8nEAfgDoeHEAfgCWcQB+ACp4c3EAfgDSdXEAfgDVAAAAAXNxAH4A1wAAAAF1cQB+AFUAAAAA
-cQB+AEJzcQB+ADUAAQAAAAQAAAALc3EAfgAkAAAAAncEAAAAAnEAfgBCcQB+AOZ4cQB+AHhxAH4A
-KnEAfgDaeHEAfgCPcQB+ACpxAH4A9HhzcQB+ANJ1cQB+ANUAAAABc3EAfgDXAAAAAXVxAH4AVQAA
-AABxAH4AQnNxAH4ANQABAAAABgAAAANzcQB+ACQAAAABdwQAAAABcQB+AER4cQB+AINxAH4AKnEA
-fgDmeHNxAH4A0nVxAH4A1QAAAAFzcQB+ANcAAAAAdXEAfgBVAAAAAHEAfgA9cQB+AQJ4c3EAfgDS
-dXEAfgDVAAAAAHEAfgA4eHEAfgBncQB+ACp4cQB+AGdxAH4AMnNxAH4AMHNxAH4ADT9AAAAAAAAM
-dwgAAAAQAAAAAnEAfgCYcQB+APJxAH4ANHEAfgDaeHEAfgCPcQB+ARBzcQB+ADBzcQB+AA0/QAAA
-AAAADHcIAAAAEAAAAAJxAH4AfHEAfgECcQB+ADRxAH4BCHhxAH4AeHEAfgESeHNxAH4AJQAAAAV3
-BAAAAAdxAH4AOHEAfgECcQB+AQhxAH4A2nEAfgDyeHEAfgDyc3EAfgAlAAAAAHcEAAAAAXhxAH4A
-dXEAfgAjc3EAfgANP0AAAAAAAAx3CAAAABAAAAABcQB+AHVxAH4AKnhzcgAmb3JnLmRyb29scy5z
-cGkuQ2xhc3NPYmplY3RUeXBlUmVzb2x2ZXIChNj8cLGw6wIAAUwACm9iamVjdFR5cGV0AENMb3Jn
-L2Ryb29scy9zcGkvQ2xhc3NPYmplY3RUeXBlUmVzb2x2ZXIkTW9kaWZpZWFibGVDbGFzc09iamVj
-dFR5cGU7eHBzcgBBb3JnLmRyb29scy5zcGkuQ2xhc3NPYmplY3RUeXBlUmVzb2x2ZXIkTW9kaWZp
-ZWFibGVDbGFzc09iamVjdFR5cGVEpauUAjf7NQIAAHhxAH4AdAAAASxwc3IAH29yZy5kcm9vbHMu
-cmV0ZW9vLlJldGVvb0J1aWxkZXIYHVn7j8gD8AIACUkAF2N1cnJlbnRPZmZzZXRBZGp1c3RtZW50
-SQACaWRMAA1hdHRhY2hlZE5vZGVzcQB+ABBMAAxkZWNsYXJhdGlvbnNxAH4AEEwADG9iamVjdFNv
-dXJjZXEAfgA3TAAKb2JqZWN0VHlwZXEAfgAQTAAIcmVzb2x2ZXJxAH4AH0wABXJ1bGVzcQB+ABBM
-AAt0dXBsZVNvdXJjZXEAfgBBeHAAAAAAAAAAG3NxAH4ADT9AAAAAAAAYdwgAAAAgAAAAEnEAfgDf
-cQB+AN9xAH4AQnEAfgBCcQB+APJxAH4A8nEAfgCdcQB+AJ1xAH4A3HEAfgDccQB+ANpxAH4A2nEA
-fgD0cQB+APRxAH4A93EAfgD3cQB+AOhxAH4A6HEAfgA4cQB+ADhxAH4APXEAfgA9cQB+AQJxAH4B
-AnEAfgDmcQB+AOZxAH4A63EAfgDrcQB+AEZxAH4ARnEAfgBEcQB+AERxAH4AKnEAfgAqcQB+AQhx
-AH4BCHhzcQB+AA0/QAAAAAAADHcIAAAAEAAAAAB4cQB+APJzcgAXamF2YS51dGlsLkxpbmtlZEhh
-c2hNYXA0wE5cEGzA+wIAAVoAC2FjY2Vzc09yZGVyeHEAfgANP0AAAAAAAAx3CAAAABAAAAABcQB+
-AK1zcgARamF2YS5sYW5nLkludGVnZXIS4qCk94GHOAIAAUkABXZhbHVleHIAEGphdmEubGFuZy5O
-dW1iZXKGrJUdC5TgiwIAAHhwAAAAA3gAcQB+ARlzcQB+AA0/QAAAAAAADHcIAAAAEAAAAAJxAH4A
-UXVyAB1bTG9yZy5kcm9vbHMucmV0ZW9vLkJhc2VOb2RlOwvnyZNDnLPqAgAAeHAAAAAEcQB+AEpx
-AH4A9nEAfgDecQB+AOpxAH4AoHVxAH4BJgAAAARxAH4An3EAfgD5cQB+AOFxAH4A7XhxAH4A6w==
-</byte-array>
+bGUuTGl0ZXJhbENvbnN0cmFpbnQAAAAAAAABQAIAAkwACWV4dHJhY3RvcnQAH0xvcmcvZHJvb2xz
+L3NwaS9GaWVsZEV4dHJhY3RvcjtMAAtyZXN0cmljdGlvbnQAJExvcmcvZHJvb2xzL3J1bGUvTGl0
+ZXJhbFJlc3RyaWN0aW9uO3hwc3IAI29yZy5kcm9vbHMuYmFzZS5DbGFzc0ZpZWxkRXh0cmFjdG9y
+AAAAAAAAAUACAAJMAAVjbGF6enQAEUxqYXZhL2xhbmcvQ2xhc3M7TAAJZmllbGROYW1lcQB+AEx4
+cHZyABJvcmcuZHJvb2xzLk1lc3NhZ2UAAAAAAAAAAAAAAHhwdAAIbWVzc2FnZTFzcgAib3JnLmRy
+b29scy5ydWxlLkxpdGVyYWxSZXN0cmljdGlvbgAAAAAAAAFAAgACTAAJZXZhbHVhdG9ydAAaTG9y
+Zy9kcm9vbHMvc3BpL0V2YWx1YXRvcjtMAAVmaWVsZHQAG0xvcmcvZHJvb2xzL3NwaS9GaWVsZFZh
+bHVlO3hwc3IAPW9yZy5kcm9vbHMuYmFzZS5ldmFsdWF0b3JzLlN0cmluZ0ZhY3RvcnkkU3RyaW5n
+RXF1YWxFdmFsdWF0b3IAAAAAAAABQAIAAHhyAB1vcmcuZHJvb2xzLmJhc2UuQmFzZUV2YWx1YXRv
+clUki7NlrK5/AgACTAAIb3BlcmF0b3J0ACVMb3JnL2Ryb29scy9iYXNlL2V2YWx1YXRvcnMvT3Bl
+cmF0b3I7TAAEdHlwZXQAG0xvcmcvZHJvb2xzL2Jhc2UvVmFsdWVUeXBlO3hwc3IAI29yZy5kcm9v
+bHMuYmFzZS5ldmFsdWF0b3JzLk9wZXJhdG9yAAAAAAAAAUACAAFMAAhvcGVyYXRvcnEAfgBMeHB0
+AAI9PXNyABlvcmcuZHJvb2xzLmJhc2UuVmFsdWVUeXBlAAAAAAAAAUACAANMAAljbGFzc1R5cGVx
+AH4AaEwAEGV2YWx1YXRvckZhY3Rvcnl0AC1Mb3JnL2Ryb29scy9iYXNlL2V2YWx1YXRvcnMvRXZh
+bHVhdG9yRmFjdG9yeTtMAARuYW1lcQB+AEx4cHZyABBqYXZhLmxhbmcuU3RyaW5noPCkOHo7s0IC
+AAB4cHNyAChvcmcuZHJvb2xzLmJhc2UuZXZhbHVhdG9ycy5TdHJpbmdGYWN0b3J554z/qcAFGr4C
+AAB4cHQABlN0cmluZ3NyABlvcmcuZHJvb2xzLmJhc2UuRmllbGRJbXBsAAAAAAAAAUACAAFMAAV2
+YWx1ZXQAEkxqYXZhL2xhbmcvT2JqZWN0O3hwcQB+ADR4cHNyAB9vcmcuZHJvb2xzLmJhc2UuQ2xh
+c3NPYmplY3RUeXBl3OzYF9SU+/0CAAJMAA9vYmplY3RUeXBlQ2xhc3NxAH4AaEwACXZhbHVlVHlw
+ZXEAfgB0eHBxAH4Aa3NxAH4AeXZyABBqYXZhLmxhbmcuT2JqZWN0AAAAAAAAAAAAAAB4cHNyAChv
+cmcuZHJvb2xzLmJhc2UuZXZhbHVhdG9ycy5PYmplY3RGYWN0b3J5iWJzm94ZVjkCAAB4cHQABk9i
+amVjdHNxAH4AXwAAAAEAAAAAc3EAfgAlAAAAAXcEAAAAAXNxAH4AY3NxAH4AZ3EAfgBrdAAIbWVz
+c2FnZTJzcQB+AG1xAH4AdXNxAH4AgXQAA1R3b3hwc3EAfgCEcQB+AGtxAH4AhnhzcgASb3JnLmRy
+b29scy5ydWxlLk9yFReHgAFdtyMCAAB4cQB+AFlzcQB+ACUAAAACdwQAAAAKc3EAfgBfAAAAAgAA
+AABzcQB+ACUAAAABdwQAAAABc3EAfgBjcQB+AI9zcQB+AG1xAH4AdXNxAH4AgXEAfgA0eHBzcQB+
+AIRxAH4Aa3EAfgCGc3EAfgBfAAAAA/////9zcQB+ACUAAAABdwQAAAABc3EAfgBjcQB+AI9zcQB+
+AG1xAH4AdXNxAH4AgXEAfgCTeHBzcQB+AIRxAH4Aa3EAfgCGeHNxAH4AlXNxAH4AJQAAAAJ3BAAA
+AApzcQB+AF8AAAAE/////3NxAH4AJQAAAAF3BAAAAAFzcQB+AGNzcQB+AGdxAH4Aa3QACG1lc3Nh
+Z2Uzc3EAfgBtcQB+AHVzcQB+AIFxAH4ANHhwc3EAfgCEcQB+AGtxAH4AhnNxAH4AXwAAAAX////+
+c3EAfgAlAAAAAXcEAAAAAXNxAH4AY3EAfgCpc3EAfgBtcQB+AHVzcQB+AIF0AAVUaHJlZXhwc3EA
+fgCEcQB+AGtxAH4Ahnh4dAANSGVsbG8gV29ybGQgMXBxAH4ARnNyACNvcmcuZHJvb2xzLnJldGVv
+by5FdmFsQ29uZGl0aW9uTm9kZRuQJ8+Ui+PgAgACTAAJY29uZGl0aW9udAAfTG9yZy9kcm9vbHMv
+cnVsZS9FdmFsQ29uZGl0aW9uO0wAC3R1cGxlU291cmNlcQB+AEF4cQB+ADwAAQAAABMAAAAAc3EA
+fgAlAAAAAXcEAAAAAXNxAH4ASAAAAAAAFAAAAABzcQB+AEsAAAAAAAAAAAIAAAAAAAFwcQB+AFJz
+cgA4b3JnLmRyb29scy5yZXRlb28uUnVsZV9IZWxsb19Xb3JsZF8yXzBDb25zZXF1ZW5jZUludm9r
+ZXJuXqy++rNzagIAAHhwdXEAfgBVAAAAAHNxAH4ADT9AAAAAAAAMdwgAAAAQAAAAAHhwc3EAfgBY
+c3EAfgAlAAAABHcEAAAACnNxAH4AWHNxAH4AJQAAAAJ3BAAAAApzcQB+AF8AAAAAAAAAAHNxAH4A
+JQAAAAF3BAAAAAFzcQB+AGNxAH4AaXNxAH4AbXEAfgB1c3EAfgCBcQB+ADR4cHNxAH4AhHEAfgBr
+cQB+AIZzcQB+AF8AAAABAAAAAHNxAH4AJQAAAAF3BAAAAAFzcQB+AGNxAH4Aj3NxAH4AbXEAfgB1
+c3EAfgCBcQB+AJN4cHNxAH4AhHEAfgBrcQB+AIZ4c3EAfgCVc3EAfgAlAAAAAncEAAAACnNxAH4A
+XwAAAAIAAAAAc3EAfgAlAAAAAXcEAAAAAXNxAH4AY3EAfgCPc3EAfgBtcQB+AHVzcQB+AIFxAH4A
+NHhwc3EAfgCEcQB+AGtxAH4AhnNxAH4AXwAAAAP/////c3EAfgAlAAAAAXcEAAAAAXNxAH4AY3EA
+fgCPc3EAfgBtcQB+AHVzcQB+AIFxAH4Ak3hwc3EAfgCEcQB+AGtxAH4AhnhzcQB+AJVzcQB+ACUA
+AAACdwQAAAAKc3EAfgBfAAAABP////9zcQB+ACUAAAABdwQAAAABc3EAfgBjcQB+AKlzcQB+AG1x
+AH4AdXNxAH4AgXEAfgA0eHBzcQB+AIRxAH4Aa3EAfgCGc3EAfgBfAAAABf////5zcQB+ACUAAAAB
+dwQAAAABc3EAfgBjcQB+AKlzcQB+AG1xAH4AdXNxAH4AgXEAfgCzeHBzcQB+AIRxAH4Aa3EAfgCG
+eHNyAB1vcmcuZHJvb2xzLnJ1bGUuRXZhbENvbmRpdGlvbj4q3Axyg48WAgACTAAKZXhwcmVzc2lv
+bnQAH0xvcmcvZHJvb2xzL3NwaS9FdmFsRXhwcmVzc2lvbjtbABRyZXF1aXJlZERlY2xhcmF0aW9u
+c3EAfgBOeHEAfgBac3IAMm9yZy5kcm9vbHMucmV0ZW9vLlJ1bGVfSGVsbG9fV29ybGRfMl8wRXZh
+bDBJbnZva2Vybl6svvqzc2oCAAB4cHVxAH4AVQAAAAB4dAANSGVsbG8gV29ybGQgMnBxAH4AuHhx
+AH4A7nEAfgBGeHNyACBvcmcuZHJvb2xzLmNvbW1vbi5CZXRhTm9kZUJpbmRlctk6TZBB8FqzAgAB
+WwALY29uc3RyYWludHN0ACFbTG9yZy9kcm9vbHMvc3BpL0ZpZWxkQ29uc3RyYWludDt4cHVyACFb
+TG9yZy5kcm9vbHMuc3BpLkZpZWxkQ29uc3RyYWludDua9pf2tEoPxgIAAHhwAAAAAXNyAC1vcmcu
+ZHJvb2xzLmNvbW1vbi5JbnN0YW5jZU5vdEVxdWFsc0NvbnN0cmFpbnS7zovNlGVsmwIAAkkAC290
+aGVyQ29sdW1uWwAMZGVjbGFyYXRpb25zcQB+AE54cAAAAAJ1cQB+AFUAAAAAcQB+AERzcQB+ADUA
+AQAAAAgAAAADc3EAfgAkAAAAAncEAAAAAnEAfgBGc3EAfgA/AAAAAAAPAAAAAXNxAH4AJQAAAAJ3
+BAAAAAJzcQB+AEgAAAAAABAAAAAAcQB+AFFxAH4A/XNxAH4AtgABAAAAFwAAAABzcQB+ACUAAAAB
+dwQAAAABc3EAfgBIAAAAAAAYAAAAAHEAfgC7cQB+AQB4cQB+AO5xAH4A/XhzcQB+APN1cQB+APYA
+AAABc3EAfgD4AAAAAnVxAH4AVQAAAABzcQB+AD8AAAAAAA4AAAADc3EAfgAlAAAAAncEAAAAAnEA
+fgD9c3EAfgA/AAAAAAARAAAAAXNxAH4AJQAAAAJ3BAAAAAJzcQB+AEgAAAAAABIAAAAAcQB+AFFx
+AH4BCXNxAH4AtgABAAAAGQAAAABzcQB+ACUAAAABdwQAAAABc3EAfgBIAAAAAAAaAAAAAHEAfgC7
+cQB+AQx4cQB+AO5xAH4BCXhzcQB+APN1cQB+APYAAAABc3EAfgD4AAAAAnVxAH4AVQAAAABxAH4B
+B3NxAH4ANQABAAAACwAAAANzcQB+ACQAAAACdwQAAAACc3EAfgA/AAAAAAAMAAAAAXNxAH4AJQAA
+AAJ3BAAAAAJzcQB+AEgAAAAAAA0AAAAAcQB+AFFxAH4BFXNxAH4AtgABAAAAFQAAAABzcQB+ACUA
+AAABdwQAAAABc3EAfgBIAAAAAAAWAAAAAHEAfgC7cQB+ARh4cQB+AO5xAH4BFXhzcQB+APN1cQB+
+APYAAAABc3EAfgD4AAAAAnVxAH4AVQAAAABxAH4ARHEAfgETcQB+AQl4cQB+ALBxAH4AKnhzcQB+
+APN1cQB+APYAAAABc3EAfgD4AAAAAXVxAH4AVQAAAABxAH4AQnNxAH4ANQABAAAABAAAAAtzcQB+
+ACQAAAACdwQAAAACcQB+AEJxAH4BB3hxAH4AjnEAfgAqcQB+APt4cQB+AKhxAH4AKnEAfgEVeHNx
+AH4A83VxAH4A9gAAAAFzcQB+APgAAAABdXEAfgBVAAAAAHEAfgBCc3EAfgA1AAEAAAAGAAAAA3Nx
+AH4AJAAAAAF3BAAAAAFxAH4ARHhxAH4AmnEAfgAqcQB+AQd4c3EAfgDzdXEAfgD2AAAAAXNxAH4A
++AAAAAB1cQB+AFUAAAAAcQB+AD1xAH4BI3hzcQB+APN1cQB+APYAAAAAcQB+ADh4cQB+AGZxAH4A
+KnhxAH4AZnEAfgAyc3EAfgAwc3EAfgANP0AAAAAAAAx3CAAAABAAAAACcQB+AJNxAH4BI3EAfgA0
+cQB+ASl4cQB+AI5xAH4BMXNxAH4AMHNxAH4ADT9AAAAAAAAMdwgAAAAQAAAAAnEAfgCzcQB+ARNx
+AH4ANHEAfgD7eHEAfgCocQB+ATN4c3EAfgAlAAAABXcEAAAAB3EAfgA4cQB+ASNxAH4BKXEAfgD7
+cQB+ARN4cQB+ARNzcQB+ACUAAAAAdwQAAAABeHEAfgCFcQB+ACNzcQB+AA0/QAAAAAAADHcIAAAA
+EAAAAAFxAH4AhXEAfgAqeHNyACZvcmcuZHJvb2xzLnNwaS5DbGFzc09iamVjdFR5cGVSZXNvbHZl
+cgKE2PxwsbDrAgABTAAKb2JqZWN0VHlwZXQAQ0xvcmcvZHJvb2xzL3NwaS9DbGFzc09iamVjdFR5
+cGVSZXNvbHZlciRNb2RpZmllYWJsZUNsYXNzT2JqZWN0VHlwZTt4cHNyAEFvcmcuZHJvb2xzLnNw
+aS5DbGFzc09iamVjdFR5cGVSZXNvbHZlciRNb2RpZmllYWJsZUNsYXNzT2JqZWN0VHlwZUSlq5QC
+N/s1AgAAeHEAfgCEcHNxAH4AeXBwdAAEbnVsbHNyAB9vcmcuZHJvb2xzLnJldGVvby5SZXRlb29C
+dWlsZGVyGB1Z+4/IA/ACAAlJABdjdXJyZW50T2Zmc2V0QWRqdXN0bWVudEkAAmlkTAANYXR0YWNo
+ZWROb2Rlc3EAfgAQTAAMZGVjbGFyYXRpb25zcQB+ABBMAAxvYmplY3RTb3VyY2VxAH4AN0wACm9i
+amVjdFR5cGVxAH4AEEwACHJlc29sdmVycQB+AB9MAAVydWxlc3EAfgAQTAALdHVwbGVTb3VyY2Vx
+AH4AQXhwAAAAAAAAABtzcQB+AA0/QAAAAAAAGHcIAAAAIAAAABJxAH4BFXEAfgEVcQB+AP1xAH4A
+/XEAfgD7cQB+APtxAH4BGHEAfgEYcQB+AQlxAH4BCXEAfgEjcQB+ASNxAH4AQnEAfgBCcQB+ARNx
+AH4BE3EAfgBEcQB+AERxAH4AOHEAfgA4cQB+AD1xAH4APXEAfgEHcQB+AQdxAH4BAHEAfgEAcQB+
+ACpxAH4AKnEAfgEMcQB+AQxxAH4ARnEAfgBGcQB+ALhxAH4AuHEAfgEpcQB+ASl4c3EAfgANP0AA
+AAAAAAx3CAAAABAAAAAAeHEAfgETc3IAF2phdmEudXRpbC5MaW5rZWRIYXNoTWFwNMBOXBBswPsC
+AAFaAAthY2Nlc3NPcmRlcnhxAH4ADT9AAAAAAAAMdwgAAAAQAAAAAXEAfgDJc3IAEWphdmEubGFu
+Zy5JbnRlZ2VyEuKgpPeBhzgCAAFJAAV2YWx1ZXhyABBqYXZhLmxhbmcuTnVtYmVyhqyVHQuU4IsC
+AAB4cAAAAAN4AHEAfgE6c3EAfgANP0AAAAAAAAx3CAAAABAAAAACcQB+AFF1cgAdW0xvcmcuZHJv
+b2xzLnJldGVvby5CYXNlTm9kZTsL58mTQ5yz6gIAAHhwAAAABHEAfgBKcQB+ARdxAH4A/3EAfgEL
+cQB+ALt1cQB+AUkAAAAEcQB+ALpxAH4BGnEAfgECcQB+AQ54cQB+AQw=</byte-array>
 </org.drools.reteoo.ReteooRuleBase>
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/reteoo/OneAndTwoOrsPerson
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/reteoo/OneAndTwoOrsPerson	2006-08-02 21:58:31 UTC (rev 5420)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/reteoo/OneAndTwoOrsPerson	2006-08-03 00:14:06 UTC (rev 5421)
@@ -109,55 +109,69 @@
 AAVpbmRleEkABm9mZnNldEwAC2NvbnN0cmFpbnRzcQB+ABNMAAtkZWNsYXJhdGlvbnQAHUxvcmcv
 ZHJvb2xzL3J1bGUvRGVjbGFyYXRpb247TAAKb2JqZWN0VHlwZXQAG0xvcmcvZHJvb2xzL3NwaS9P
 YmplY3RUeXBlO3hwAAAAAAAAAABzcQB+ABYAAAABdwQAAAABc3IAIW9yZy5kcm9vbHMucnVsZS5M
-aXRlcmFsQ29uc3RyYWludAOS+tbk+ZKzAgADTAAJZXZhbHVhdG9ydAAaTG9yZy9kcm9vbHMvc3Bp
-L0V2YWx1YXRvcjtMAAlleHRyYWN0b3J0AB9Mb3JnL2Ryb29scy9zcGkvRmllbGRFeHRyYWN0b3I7
-TAAFZmllbGR0ABtMb3JnL2Ryb29scy9zcGkvRmllbGRWYWx1ZTt4cHNyAD1vcmcuZHJvb2xzLmJh
-c2UuZXZhbHVhdG9ycy5TdHJpbmdGYWN0b3J5JFN0cmluZ0VxdWFsRXZhbHVhdG9ySU/lvdDlSJYC
-AAB4cgAdb3JnLmRyb29scy5iYXNlLkJhc2VFdmFsdWF0b3KuQXGsNOGNawIAAkkACG9wZXJhdG9y
-SQAEdHlwZXhwAAAAAQAAALRzcgAjb3JnLmRyb29scy5iYXNlLkNsYXNzRmllbGRFeHRyYWN0b3IZ
-4kABiRDxowIAAkwABWNsYXp6dAARTGphdmEvbGFuZy9DbGFzcztMAAlmaWVsZE5hbWVxAH4ABHhw
-dnIAEm9yZy5kcm9vbHMuTWVzc2FnZQAAAAAAAAAAAAAAeHB0AAhtZXNzYWdlMXNyABlvcmcuZHJv
-b2xzLmJhc2UuRmllbGRJbXBsrplN9KzddkQCAAFMAAV2YWx1ZXQAEkxqYXZhL2xhbmcvT2JqZWN0
-O3hwdAADT25leHBzcgAfb3JnLmRyb29scy5iYXNlLkNsYXNzT2JqZWN0VHlwZdzs2BfUlPv9AgAC
-SQAJdmFsdWVUeXBlTAAPb2JqZWN0VHlwZUNsYXNzcQB+ACh4cAAAANJxAH4AK3NxAH4AGgAAAAEA
-AAAAc3EAfgAWAAAAAXcEAAAAAXNxAH4AH3EAfgAmc3EAfgAncQB+ACt0AAhtZXNzYWdlMnNxAH4A
-LXQAA1R3b3hwc3EAfgAxAAAA0nEAfgAreHNyABJvcmcuZHJvb2xzLnJ1bGUuT3IVF4eAAV23IwIA
-AHhxAH4AEnNxAH4AFgAAAAJ3BAAAAApzcQB+ABoAAAACAAAAAHNxAH4AFgAAAAF3BAAAAAFzcQB+
-AB9xAH4AJnEAfgA2c3EAfgAtcQB+ADB4cHNxAH4AMQAAANJxAH4AK3NxAH4AEXNxAH4AFgAAAAJ3
-BAAAAApzcQB+ABoAAAADAAAAAHNxAH4AFgAAAAF3BAAAAAFzcQB+AB9xAH4AJnNxAH4AJ3ZyABFv
-cmcuZHJvb2xzLkNoZWVzZe+FAhE7Rf31AgACSQAFcHJpY2VMAAR0eXBlcQB+AAR4cHQABHR5cGVz
-cQB+AC10AAdzdGlsdG9ueHBzcQB+ADEAAADScQB+AEpzcQB+ABoAAAAEAAAAAHNxAH4AFgAAAAF3
-BAAAAAFzcQB+AB9xAH4AJnEAfgBIc3EAfgAtdAAEYnJpZXhwc3EAfgAxAAAA0nEAfgBKeHhzcQB+
-ADtzcQB+ABYAAAACdwQAAAAKc3EAfgAaAAAABQAAAABzcQB+ABYAAAABdwQAAAABc3EAfgAfcQB+
-ACZzcQB+ACdxAH4AK3QACG1lc3NhZ2Uzc3EAfgAtcQB+ADB4cHNxAH4AMQAAANJxAH4AK3NxAH4A
-GgAAAAb/////c3EAfgAWAAAAAXcEAAAAAXNxAH4AH3EAfgAmcQB+AFpzcQB+AC10AAVUaHJlZXhw
-c3EAfgAxAAAA0nEAfgAreHh0AA1IZWxsbyBXb3JsZCAxcHQAOG9yZy5kcm9vbHMucmV0ZW9vLlJ1
-bGVfSGVsbG9fV29ybGRfMl8wQ29uc2VxdWVuY2VJbnZva2Vyc3EAfgADAAAAAAAAAAACAAAAAAAB
-cHEAfgALc3IAOG9yZy5kcm9vbHMucmV0ZW9vLlJ1bGVfSGVsbG9fV29ybGRfMl8wQ29uc2VxdWVu
-Y2VJbnZva2Vybl6svvqzc2oCAAB4cHVxAH4ADgAAAAFzcgAbb3JnLmRyb29scy5ydWxlLkRlY2xh
-cmF0aW9uA3M8AfIg69YCAANJAAZjb2x1bW5MAAlleHRyYWN0b3J0ABpMb3JnL2Ryb29scy9zcGkv
-RXh0cmFjdG9yO0wACmlkZW50aWZpZXJxAH4ABHhwAAAAAHEAfgApdAAJJG1lc3NhZ2Uxc3EAfgAA
-P0AAAAAAAAx3CAAAABAAAAABcQB+AG1xAH4AbHhwc3EAfgARc3EAfgAWAAAABHcEAAAACnNxAH4A
-EXNxAH4AFgAAAAJ3BAAAAApzcQB+ABoAAAAAAAAAAHNxAH4AFgAAAAJ3BAAAAAJxAH4AbHNxAH4A
-H3EAfgAmcQB+AClzcQB+AC1xAH4AMHhwc3EAfgAxAAAA0nEAfgArc3EAfgAaAAAAAQAAAABzcQB+
-ABYAAAABdwQAAAABc3EAfgAfcQB+ACZxAH4ANnNxAH4ALXEAfgA5eHBzcQB+ADEAAADScQB+ACt4
-c3EAfgA7c3EAfgAWAAAAAncEAAAACnNxAH4AGgAAAAIAAAAAc3EAfgAWAAAAAXcEAAAAAXNxAH4A
-H3EAfgAmcQB+ADZzcQB+AC1xAH4AMHhwc3EAfgAxAAAA0nEAfgArc3EAfgARc3EAfgAWAAAAAncE
-AAAACnNxAH4AGgAAAAMAAAAAc3EAfgAWAAAAAXcEAAAAAXNxAH4AH3EAfgAmcQB+AEhzcQB+AC1x
-AH4ATXhwc3EAfgAxAAAA0nEAfgBKc3EAfgAaAAAABAAAAABzcQB+ABYAAAABdwQAAAABc3EAfgAf
-cQB+ACZxAH4ASHNxAH4ALXEAfgBTeHBzcQB+ADEAAADScQB+AEp4eHNxAH4AO3NxAH4AFgAAAAJ3
-BAAAAApzcQB+ABoAAAAFAAAAAHNxAH4AFgAAAAF3BAAAAAFzcQB+AB9xAH4AJnEAfgBac3EAfgAt
-cQB+ADB4cHNxAH4AMQAAANJxAH4AK3NxAH4AGgAAAAb/////c3EAfgAWAAAAAXcEAAAAAXNxAH4A
-H3EAfgAmcQB+AFpzcQB+AC1xAH4AYnhwc3EAfgAxAAAA0nEAfgAreHNxAH4AO3NxAH4AFgAAAAJ3
-BAAAAApzcQB+ABoAAAAH/////3NxAH4AFgAAAAF3BAAAAAFzcQB+AB9xAH4AJnNxAH4AJ3ZyABFv
-cmcuZHJvb2xzLlBlcnNvbiSkLwIXn7hmAgAISQADYWdlWgAFYWxpdmVDAANzZXhMAApiaWdEZWNp
-bWFsdAAWTGphdmEvbWF0aC9CaWdEZWNpbWFsO0wACmJpZ0ludGVnZXJ0ABZMamF2YS9tYXRoL0Jp
-Z0ludGVnZXI7TAAFbGlrZXNxAH4ABEwABG5hbWVxAH4ABEwABnN0YXR1c3EAfgAEeHB0AARuYW1l
-c3EAfgAtdAAEbWFya3hwc3EAfgAxAAAA0nEAfgClc3EAfgAaAAAACP////5zcQB+ABYAAAABdwQA
-AAABc3IAJ29yZy5kcm9vbHMucnVsZS5Cb3VuZFZhcmlhYmxlQ29uc3RyYWludHD61IBf/tZXAgAF
-SQAGY29sdW1uTAALZGVjbGFyYXRpb25xAH4AG0wACWV2YWx1YXRvcnEAfgAgTAAOZmllbGRFeHRy
-YWN0b3JxAH4AIVsAFHJlcXVpcmVkRGVjbGFyYXRpb25zcQB+AAZ4cAAAAABxAH4AbHEAfgAmcQB+
-AKF1cQB+AA4AAAABcQB+AGx4cHNxAH4AMQAAANJxAH4ApXh4dAANSGVsbG8gV29ybGQgMnB4</byte-array>
+aXRlcmFsQ29uc3RyYWludAAAAAAAAAFAAgACTAAJZXh0cmFjdG9ydAAfTG9yZy9kcm9vbHMvc3Bp
+L0ZpZWxkRXh0cmFjdG9yO0wAC3Jlc3RyaWN0aW9udAAkTG9yZy9kcm9vbHMvcnVsZS9MaXRlcmFs
+UmVzdHJpY3Rpb247eHBzcgAjb3JnLmRyb29scy5iYXNlLkNsYXNzRmllbGRFeHRyYWN0b3IAAAAA
+AAABQAIAAkwABWNsYXp6dAARTGphdmEvbGFuZy9DbGFzcztMAAlmaWVsZE5hbWVxAH4ABHhwdnIA
+Em9yZy5kcm9vbHMuTWVzc2FnZQAAAAAAAAAAAAAAeHB0AAhtZXNzYWdlMXNyACJvcmcuZHJvb2xz
+LnJ1bGUuTGl0ZXJhbFJlc3RyaWN0aW9uAAAAAAAAAUACAAJMAAlldmFsdWF0b3J0ABpMb3JnL2Ry
+b29scy9zcGkvRXZhbHVhdG9yO0wABWZpZWxkdAAbTG9yZy9kcm9vbHMvc3BpL0ZpZWxkVmFsdWU7
+eHBzcgA9b3JnLmRyb29scy5iYXNlLmV2YWx1YXRvcnMuU3RyaW5nRmFjdG9yeSRTdHJpbmdFcXVh
+bEV2YWx1YXRvcgAAAAAAAAFAAgAAeHIAHW9yZy5kcm9vbHMuYmFzZS5CYXNlRXZhbHVhdG9yVSSL
+s2Wsrn8CAAJMAAhvcGVyYXRvcnQAJUxvcmcvZHJvb2xzL2Jhc2UvZXZhbHVhdG9ycy9PcGVyYXRv
+cjtMAAR0eXBldAAbTG9yZy9kcm9vbHMvYmFzZS9WYWx1ZVR5cGU7eHBzcgAjb3JnLmRyb29scy5i
+YXNlLmV2YWx1YXRvcnMuT3BlcmF0b3IAAAAAAAABQAIAAUwACG9wZXJhdG9ycQB+AAR4cHQAAj09
+c3IAGW9yZy5kcm9vbHMuYmFzZS5WYWx1ZVR5cGUAAAAAAAABQAIAA0wACWNsYXNzVHlwZXEAfgAk
+TAAQZXZhbHVhdG9yRmFjdG9yeXQALUxvcmcvZHJvb2xzL2Jhc2UvZXZhbHVhdG9ycy9FdmFsdWF0
+b3JGYWN0b3J5O0wABG5hbWVxAH4ABHhwdnIAEGphdmEubGFuZy5TdHJpbmeg8KQ4ejuzQgIAAHhw
+c3IAKG9yZy5kcm9vbHMuYmFzZS5ldmFsdWF0b3JzLlN0cmluZ0ZhY3RvcnnnjP+pwAUavgIAAHhw
+dAAGU3RyaW5nc3IAGW9yZy5kcm9vbHMuYmFzZS5GaWVsZEltcGwAAAAAAAABQAIAAUwABXZhbHVl
+dAASTGphdmEvbGFuZy9PYmplY3Q7eHB0AANPbmV4cHNyAB9vcmcuZHJvb2xzLmJhc2UuQ2xhc3NP
+YmplY3RUeXBl3OzYF9SU+/0CAAJMAA9vYmplY3RUeXBlQ2xhc3NxAH4AJEwACXZhbHVlVHlwZXEA
+fgAweHBxAH4AJ3NxAH4ANXZyABBqYXZhLmxhbmcuT2JqZWN0AAAAAAAAAAAAAAB4cHNyAChvcmcu
+ZHJvb2xzLmJhc2UuZXZhbHVhdG9ycy5PYmplY3RGYWN0b3J5iWJzm94ZVjkCAAB4cHQABk9iamVj
+dHNxAH4AGgAAAAEAAAAAc3EAfgAWAAAAAXcEAAAAAXNxAH4AH3NxAH4AI3EAfgAndAAIbWVzc2Fn
+ZTJzcQB+AClxAH4AMXNxAH4APXQAA1R3b3hwc3EAfgBBcQB+ACdxAH4AQ3hzcgASb3JnLmRyb29s
+cy5ydWxlLk9yFReHgAFdtyMCAAB4cQB+ABJzcQB+ABYAAAACdwQAAAAKc3EAfgAaAAAAAgAAAABz
+cQB+ABYAAAABdwQAAAABc3EAfgAfcQB+AExzcQB+AClxAH4AMXNxAH4APXEAfgBAeHBzcQB+AEFx
+AH4AJ3EAfgBDc3EAfgARc3EAfgAWAAAAAncEAAAACnNxAH4AGgAAAAMAAAAAc3EAfgAWAAAAAXcE
+AAAAAXNxAH4AH3NxAH4AI3ZyABFvcmcuZHJvb2xzLkNoZWVzZe+FAhE7Rf31AgACSQAFcHJpY2VM
+AAR0eXBlcQB+AAR4cHQABHR5cGVzcQB+AClxAH4AMXNxAH4APXQAB3N0aWx0b254cHNxAH4AQXEA
+fgBicQB+AENzcQB+ABoAAAAEAAAAAHNxAH4AFgAAAAF3BAAAAAFzcQB+AB9xAH4AYHNxAH4AKXEA
+fgAxc3EAfgA9dAAEYnJpZXhwc3EAfgBBcQB+AGJxAH4AQ3h4c3EAfgBSc3EAfgAWAAAAAncEAAAA
+CnNxAH4AGgAAAAUAAAAAc3EAfgAWAAAAAXcEAAAAAXNxAH4AH3NxAH4AI3EAfgAndAAIbWVzc2Fn
+ZTNzcQB+AClxAH4AMXNxAH4APXEAfgBAeHBzcQB+AEFxAH4AJ3EAfgBDc3EAfgAaAAAABv////9z
+cQB+ABYAAAABdwQAAAABc3EAfgAfcQB+AHRzcQB+AClxAH4AMXNxAH4APXQABVRocmVleHBzcQB+
+AEFxAH4AJ3EAfgBDeHh0AA1IZWxsbyBXb3JsZCAxcHQAOG9yZy5kcm9vbHMucmV0ZW9vLlJ1bGVf
+SGVsbG9fV29ybGRfMl8wQ29uc2VxdWVuY2VJbnZva2Vyc3EAfgADAAAAAAAAAAACAAAAAAABcHEA
+fgALc3IAOG9yZy5kcm9vbHMucmV0ZW9vLlJ1bGVfSGVsbG9fV29ybGRfMl8wQ29uc2VxdWVuY2VJ
+bnZva2Vybl6svvqzc2oCAAB4cHVxAH4ADgAAAAFzcgAbb3JnLmRyb29scy5ydWxlLkRlY2xhcmF0
+aW9uA3M8AfIg69YCAANJAAZjb2x1bW5MAAlleHRyYWN0b3J0ABpMb3JnL2Ryb29scy9zcGkvRXh0
+cmFjdG9yO0wACmlkZW50aWZpZXJxAH4ABHhwAAAAAHEAfgAldAAJJG1lc3NhZ2Uxc3EAfgAAP0AA
+AAAAAAx3CAAAABAAAAABcQB+AIlxAH4AiHhwc3EAfgARc3EAfgAWAAAABHcEAAAACnNxAH4AEXNx
+AH4AFgAAAAJ3BAAAAApzcQB+ABoAAAAAAAAAAHNxAH4AFgAAAAJ3BAAAAAJxAH4AiHNxAH4AH3EA
+fgAlc3EAfgApcQB+ADFzcQB+AD1xAH4AQHhwc3EAfgBBcQB+ACdxAH4AQ3NxAH4AGgAAAAEAAAAA
+c3EAfgAWAAAAAXcEAAAAAXNxAH4AH3EAfgBMc3EAfgApcQB+ADFzcQB+AD1xAH4AUHhwc3EAfgBB
+cQB+ACdxAH4AQ3hzcQB+AFJzcQB+ABYAAAACdwQAAAAKc3EAfgAaAAAAAgAAAABzcQB+ABYAAAAB
+dwQAAAABc3EAfgAfcQB+AExzcQB+AClxAH4AMXNxAH4APXEAfgBAeHBzcQB+AEFxAH4AJ3EAfgBD
+c3EAfgARc3EAfgAWAAAAAncEAAAACnNxAH4AGgAAAAMAAAAAc3EAfgAWAAAAAXcEAAAAAXNxAH4A
+H3EAfgBgc3EAfgApcQB+ADFzcQB+AD1xAH4AZnhwc3EAfgBBcQB+AGJxAH4AQ3NxAH4AGgAAAAQA
+AAAAc3EAfgAWAAAAAXcEAAAAAXNxAH4AH3EAfgBgc3EAfgApcQB+ADFzcQB+AD1xAH4AbXhwc3EA
+fgBBcQB+AGJxAH4AQ3h4c3EAfgBSc3EAfgAWAAAAAncEAAAACnNxAH4AGgAAAAUAAAAAc3EAfgAW
+AAAAAXcEAAAAAXNxAH4AH3EAfgB0c3EAfgApcQB+ADFzcQB+AD1xAH4AQHhwc3EAfgBBcQB+ACdx
+AH4AQ3NxAH4AGgAAAAb/////c3EAfgAWAAAAAXcEAAAAAXNxAH4AH3EAfgB0c3EAfgApcQB+ADFz
+cQB+AD1xAH4Afnhwc3EAfgBBcQB+ACdxAH4AQ3hzcQB+AFJzcQB+ABYAAAACdwQAAAAKc3EAfgAa
+AAAAB/////9zcQB+ABYAAAABdwQAAAABc3EAfgAfc3EAfgAjdnIAEW9yZy5kcm9vbHMuUGVyc29u
+JKQvAhefuGYCAAlJAANhZ2VaAAVhbGl2ZUMAA3NleEwACmJpZ0RlY2ltYWx0ABZMamF2YS9tYXRo
+L0JpZ0RlY2ltYWw7TAAKYmlnSW50ZWdlcnQAFkxqYXZhL21hdGgvQmlnSW50ZWdlcjtMAARoYWly
+cQB+AARMAAVsaWtlc3EAfgAETAAEbmFtZXEAfgAETAAGc3RhdHVzcQB+AAR4cHQABG5hbWVzcQB+
+AClxAH4AMXNxAH4APXQABG1hcmt4cHNxAH4AQXEAfgDIcQB+AENzcQB+ABoAAAAI/////nNxAH4A
+FgAAAAF3BAAAAAFzcgAib3JnLmRyb29scy5ydWxlLlZhcmlhYmxlQ29uc3RyYWludAAAAAAAAAFA
+AgACTAAOZmllbGRFeHRyYWN0b3JxAH4AIEwAC3Jlc3RyaWN0aW9udAAlTG9yZy9kcm9vbHMvcnVs
+ZS9WYXJpYWJsZVJlc3RyaWN0aW9uO3hwcQB+AMRzcgAjb3JnLmRyb29scy5ydWxlLlZhcmlhYmxl
+UmVzdHJpY3Rpb24AAAAAAAABQAIABEkABmNvbHVtbkwAC2RlY2xhcmF0aW9ucQB+ABtMAAlldmFs
+dWF0b3JxAH4AKlsAFHJlcXVpcmVkRGVjbGFyYXRpb25zcQB+AAZ4cAAAAABxAH4AiHEAfgAxdXEA
+fgAOAAAAAXEAfgCIeHBzcQB+AEFxAH4AyHEAfgBDeHh0AA1IZWxsbyBXb3JsZCAycHg=</byte-array>
         </org.drools.rule.PackageCompilationData>
         <string>org.drools.reteoo</string>
         <list>
@@ -188,59 +202,72 @@
 AkCvUeYCAAVJAAVpbmRleEkABm9mZnNldEwAC2NvbnN0cmFpbnRzcQB+ABRMAAtkZWNsYXJhdGlv
 bnQAHUxvcmcvZHJvb2xzL3J1bGUvRGVjbGFyYXRpb247TAAKb2JqZWN0VHlwZXQAG0xvcmcvZHJv
 b2xzL3NwaS9PYmplY3RUeXBlO3hwAAAAAAAAAABzcQB+ABcAAAABdwQAAAABc3IAIW9yZy5kcm9v
-bHMucnVsZS5MaXRlcmFsQ29uc3RyYWludAOS+tbk+ZKzAgADTAAJZXZhbHVhdG9ydAAaTG9yZy9k
-cm9vbHMvc3BpL0V2YWx1YXRvcjtMAAlleHRyYWN0b3J0AB9Mb3JnL2Ryb29scy9zcGkvRmllbGRF
-eHRyYWN0b3I7TAAFZmllbGR0ABtMb3JnL2Ryb29scy9zcGkvRmllbGRWYWx1ZTt4cHNyAD1vcmcu
-ZHJvb2xzLmJhc2UuZXZhbHVhdG9ycy5TdHJpbmdGYWN0b3J5JFN0cmluZ0VxdWFsRXZhbHVhdG9y
-SU/lvdDlSJYCAAB4cgAdb3JnLmRyb29scy5iYXNlLkJhc2VFdmFsdWF0b3KuQXGsNOGNawIAAkkA
-CG9wZXJhdG9ySQAEdHlwZXhwAAAAAQAAALRzcgAjb3JnLmRyb29scy5iYXNlLkNsYXNzRmllbGRF
-eHRyYWN0b3IZ4kABiRDxowIAAkwABWNsYXp6dAARTGphdmEvbGFuZy9DbGFzcztMAAlmaWVsZE5h
-bWVxAH4ABXhwdnIAEm9yZy5kcm9vbHMuTWVzc2FnZQAAAAAAAAAAAAAAeHB0AAhtZXNzYWdlMXNy
-ABlvcmcuZHJvb2xzLmJhc2UuRmllbGRJbXBsrplN9KzddkQCAAFMAAV2YWx1ZXQAEkxqYXZhL2xh
-bmcvT2JqZWN0O3hwdAADT25leHBzcgAfb3JnLmRyb29scy5iYXNlLkNsYXNzT2JqZWN0VHlwZdzs
-2BfUlPv9AgACSQAJdmFsdWVUeXBlTAAPb2JqZWN0VHlwZUNsYXNzcQB+ACl4cAAAANJxAH4ALHNx
-AH4AGwAAAAEAAAAAc3EAfgAXAAAAAXcEAAAAAXNxAH4AIHEAfgAnc3EAfgAocQB+ACx0AAhtZXNz
-YWdlMnNxAH4ALnQAA1R3b3hwc3EAfgAyAAAA0nEAfgAseHNyABJvcmcuZHJvb2xzLnJ1bGUuT3IV
-F4eAAV23IwIAAHhxAH4AE3NxAH4AFwAAAAJ3BAAAAApzcQB+ABsAAAACAAAAAHNxAH4AFwAAAAF3
-BAAAAAFzcQB+ACBxAH4AJ3EAfgA3c3EAfgAucQB+ADF4cHNxAH4AMgAAANJxAH4ALHNxAH4AEnNx
-AH4AFwAAAAJ3BAAAAApzcQB+ABsAAAADAAAAAHNxAH4AFwAAAAF3BAAAAAFzcQB+ACBxAH4AJ3Nx
-AH4AKHZyABFvcmcuZHJvb2xzLkNoZWVzZe+FAhE7Rf31AgACSQAFcHJpY2VMAAR0eXBlcQB+AAV4
-cHQABHR5cGVzcQB+AC50AAdzdGlsdG9ueHBzcQB+ADIAAADScQB+AEtzcQB+ABsAAAAEAAAAAHNx
-AH4AFwAAAAF3BAAAAAFzcQB+ACBxAH4AJ3EAfgBJc3EAfgAudAAEYnJpZXhwc3EAfgAyAAAA0nEA
-fgBLeHhzcQB+ADxzcQB+ABcAAAACdwQAAAAKc3EAfgAbAAAABQAAAABzcQB+ABcAAAABdwQAAAAB
-c3EAfgAgcQB+ACdzcQB+AChxAH4ALHQACG1lc3NhZ2Uzc3EAfgAucQB+ADF4cHNxAH4AMgAAANJx
-AH4ALHNxAH4AGwAAAAb/////c3EAfgAXAAAAAXcEAAAAAXNxAH4AIHEAfgAncQB+AFtzcQB+AC50
-AAVUaHJlZXhwc3EAfgAyAAAA0nEAfgAseHhxAH4AA3B0AA1IZWxsbyBXb3JsZCAyc3EAfgAEAAAA
-AAAAAAACAAAAAAABcHEAfgAMc3IAOG9yZy5kcm9vbHMucmV0ZW9vLlJ1bGVfSGVsbG9fV29ybGRf
-Ml8wQ29uc2VxdWVuY2VJbnZva2Vybl6svvqzc2oCAAB4cHVxAH4ADwAAAAFzcgAbb3JnLmRyb29s
-cy5ydWxlLkRlY2xhcmF0aW9uA3M8AfIg69YCAANJAAZjb2x1bW5MAAlleHRyYWN0b3J0ABpMb3Jn
-L2Ryb29scy9zcGkvRXh0cmFjdG9yO0wACmlkZW50aWZpZXJxAH4ABXhwAAAAAHEAfgAqdAAJJG1l
-c3NhZ2Uxc3EAfgABP0AAAAAAAAx3CAAAABAAAAABcQB+AG1xAH4AbHhwc3EAfgASc3EAfgAXAAAA
-BHcEAAAACnNxAH4AEnNxAH4AFwAAAAJ3BAAAAApzcQB+ABsAAAAAAAAAAHNxAH4AFwAAAAJ3BAAA
-AAJxAH4AbHNxAH4AIHEAfgAncQB+ACpzcQB+AC5xAH4AMXhwc3EAfgAyAAAA0nEAfgAsc3EAfgAb
-AAAAAQAAAABzcQB+ABcAAAABdwQAAAABc3EAfgAgcQB+ACdxAH4AN3NxAH4ALnEAfgA6eHBzcQB+
-ADIAAADScQB+ACx4c3EAfgA8c3EAfgAXAAAAAncEAAAACnNxAH4AGwAAAAIAAAAAc3EAfgAXAAAA
-AXcEAAAAAXNxAH4AIHEAfgAncQB+ADdzcQB+AC5xAH4AMXhwc3EAfgAyAAAA0nEAfgAsc3EAfgAS
-c3EAfgAXAAAAAncEAAAACnNxAH4AGwAAAAMAAAAAc3EAfgAXAAAAAXcEAAAAAXNxAH4AIHEAfgAn
-cQB+AElzcQB+AC5xAH4ATnhwc3EAfgAyAAAA0nEAfgBLc3EAfgAbAAAABAAAAABzcQB+ABcAAAAB
-dwQAAAABc3EAfgAgcQB+ACdxAH4ASXNxAH4ALnEAfgBUeHBzcQB+ADIAAADScQB+AEt4eHNxAH4A
-PHNxAH4AFwAAAAJ3BAAAAApzcQB+ABsAAAAFAAAAAHNxAH4AFwAAAAF3BAAAAAFzcQB+ACBxAH4A
-J3EAfgBbc3EAfgAucQB+ADF4cHNxAH4AMgAAANJxAH4ALHNxAH4AGwAAAAb/////c3EAfgAXAAAA
-AXcEAAAAAXNxAH4AIHEAfgAncQB+AFtzcQB+AC5xAH4AY3hwc3EAfgAyAAAA0nEAfgAseHNxAH4A
-PHNxAH4AFwAAAAJ3BAAAAApzcQB+ABsAAAAH/////3NxAH4AFwAAAAF3BAAAAAFzcQB+ACBxAH4A
-J3NxAH4AKHZyABFvcmcuZHJvb2xzLlBlcnNvbiSkLwIXn7hmAgAISQADYWdlWgAFYWxpdmVDAANz
-ZXhMAApiaWdEZWNpbWFsdAAWTGphdmEvbWF0aC9CaWdEZWNpbWFsO0wACmJpZ0ludGVnZXJ0ABZM
-amF2YS9tYXRoL0JpZ0ludGVnZXI7TAAFbGlrZXNxAH4ABUwABG5hbWVxAH4ABUwABnN0YXR1c3EA
-fgAFeHB0AARuYW1lc3EAfgAudAAEbWFya3hwc3EAfgAyAAAA0nEAfgClc3EAfgAbAAAACP////5z
-cQB+ABcAAAABdwQAAAABc3IAJ29yZy5kcm9vbHMucnVsZS5Cb3VuZFZhcmlhYmxlQ29uc3RyYWlu
-dHD61IBf/tZXAgAFSQAGY29sdW1uTAALZGVjbGFyYXRpb25xAH4AHEwACWV2YWx1YXRvcnEAfgAh
-TAAOZmllbGRFeHRyYWN0b3JxAH4AIlsAFHJlcXVpcmVkRGVjbGFyYXRpb25zcQB+AAd4cAAAAABx
-AH4AbHEAfgAncQB+AKF1cQB+AA8AAAABcQB+AGx4cHNxAH4AMgAAANJxAH4ApXh4cQB+AGVweAA=
-</byte-array>
+bHMucnVsZS5MaXRlcmFsQ29uc3RyYWludAAAAAAAAAFAAgACTAAJZXh0cmFjdG9ydAAfTG9yZy9k
+cm9vbHMvc3BpL0ZpZWxkRXh0cmFjdG9yO0wAC3Jlc3RyaWN0aW9udAAkTG9yZy9kcm9vbHMvcnVs
+ZS9MaXRlcmFsUmVzdHJpY3Rpb247eHBzcgAjb3JnLmRyb29scy5iYXNlLkNsYXNzRmllbGRFeHRy
+YWN0b3IAAAAAAAABQAIAAkwABWNsYXp6dAARTGphdmEvbGFuZy9DbGFzcztMAAlmaWVsZE5hbWVx
+AH4ABXhwdnIAEm9yZy5kcm9vbHMuTWVzc2FnZQAAAAAAAAAAAAAAeHB0AAhtZXNzYWdlMXNyACJv
+cmcuZHJvb2xzLnJ1bGUuTGl0ZXJhbFJlc3RyaWN0aW9uAAAAAAAAAUACAAJMAAlldmFsdWF0b3J0
+ABpMb3JnL2Ryb29scy9zcGkvRXZhbHVhdG9yO0wABWZpZWxkdAAbTG9yZy9kcm9vbHMvc3BpL0Zp
+ZWxkVmFsdWU7eHBzcgA9b3JnLmRyb29scy5iYXNlLmV2YWx1YXRvcnMuU3RyaW5nRmFjdG9yeSRT
+dHJpbmdFcXVhbEV2YWx1YXRvcgAAAAAAAAFAAgAAeHIAHW9yZy5kcm9vbHMuYmFzZS5CYXNlRXZh
+bHVhdG9yVSSLs2Wsrn8CAAJMAAhvcGVyYXRvcnQAJUxvcmcvZHJvb2xzL2Jhc2UvZXZhbHVhdG9y
+cy9PcGVyYXRvcjtMAAR0eXBldAAbTG9yZy9kcm9vbHMvYmFzZS9WYWx1ZVR5cGU7eHBzcgAjb3Jn
+LmRyb29scy5iYXNlLmV2YWx1YXRvcnMuT3BlcmF0b3IAAAAAAAABQAIAAUwACG9wZXJhdG9ycQB+
+AAV4cHQAAj09c3IAGW9yZy5kcm9vbHMuYmFzZS5WYWx1ZVR5cGUAAAAAAAABQAIAA0wACWNsYXNz
+VHlwZXEAfgAlTAAQZXZhbHVhdG9yRmFjdG9yeXQALUxvcmcvZHJvb2xzL2Jhc2UvZXZhbHVhdG9y
+cy9FdmFsdWF0b3JGYWN0b3J5O0wABG5hbWVxAH4ABXhwdnIAEGphdmEubGFuZy5TdHJpbmeg8KQ4
+ejuzQgIAAHhwc3IAKG9yZy5kcm9vbHMuYmFzZS5ldmFsdWF0b3JzLlN0cmluZ0ZhY3RvcnnnjP+p
+wAUavgIAAHhwdAAGU3RyaW5nc3IAGW9yZy5kcm9vbHMuYmFzZS5GaWVsZEltcGwAAAAAAAABQAIA
+AUwABXZhbHVldAASTGphdmEvbGFuZy9PYmplY3Q7eHB0AANPbmV4cHNyAB9vcmcuZHJvb2xzLmJh
+c2UuQ2xhc3NPYmplY3RUeXBl3OzYF9SU+/0CAAJMAA9vYmplY3RUeXBlQ2xhc3NxAH4AJUwACXZh
+bHVlVHlwZXEAfgAxeHBxAH4AKHNxAH4ANnZyABBqYXZhLmxhbmcuT2JqZWN0AAAAAAAAAAAAAAB4
+cHNyAChvcmcuZHJvb2xzLmJhc2UuZXZhbHVhdG9ycy5PYmplY3RGYWN0b3J5iWJzm94ZVjkCAAB4
+cHQABk9iamVjdHNxAH4AGwAAAAEAAAAAc3EAfgAXAAAAAXcEAAAAAXNxAH4AIHNxAH4AJHEAfgAo
+dAAIbWVzc2FnZTJzcQB+ACpxAH4AMnNxAH4APnQAA1R3b3hwc3EAfgBCcQB+AChxAH4ARHhzcgAS
+b3JnLmRyb29scy5ydWxlLk9yFReHgAFdtyMCAAB4cQB+ABNzcQB+ABcAAAACdwQAAAAKc3EAfgAb
+AAAAAgAAAABzcQB+ABcAAAABdwQAAAABc3EAfgAgcQB+AE1zcQB+ACpxAH4AMnNxAH4APnEAfgBB
+eHBzcQB+AEJxAH4AKHEAfgBEc3EAfgASc3EAfgAXAAAAAncEAAAACnNxAH4AGwAAAAMAAAAAc3EA
+fgAXAAAAAXcEAAAAAXNxAH4AIHNxAH4AJHZyABFvcmcuZHJvb2xzLkNoZWVzZe+FAhE7Rf31AgAC
+SQAFcHJpY2VMAAR0eXBlcQB+AAV4cHQABHR5cGVzcQB+ACpxAH4AMnNxAH4APnQAB3N0aWx0b254
+cHNxAH4AQnEAfgBjcQB+AERzcQB+ABsAAAAEAAAAAHNxAH4AFwAAAAF3BAAAAAFzcQB+ACBxAH4A
+YXNxAH4AKnEAfgAyc3EAfgA+dAAEYnJpZXhwc3EAfgBCcQB+AGNxAH4ARHh4c3EAfgBTc3EAfgAX
+AAAAAncEAAAACnNxAH4AGwAAAAUAAAAAc3EAfgAXAAAAAXcEAAAAAXNxAH4AIHNxAH4AJHEAfgAo
+dAAIbWVzc2FnZTNzcQB+ACpxAH4AMnNxAH4APnEAfgBBeHBzcQB+AEJxAH4AKHEAfgBEc3EAfgAb
+AAAABv////9zcQB+ABcAAAABdwQAAAABc3EAfgAgcQB+AHVzcQB+ACpxAH4AMnNxAH4APnQABVRo
+cmVleHBzcQB+AEJxAH4AKHEAfgBEeHhxAH4AA3B0AA1IZWxsbyBXb3JsZCAyc3EAfgAEAAAAAAAA
+AAACAAAAAAABcHEAfgAMc3IAOG9yZy5kcm9vbHMucmV0ZW9vLlJ1bGVfSGVsbG9fV29ybGRfMl8w
+Q29uc2VxdWVuY2VJbnZva2Vybl6svvqzc2oCAAB4cHVxAH4ADwAAAAFzcgAbb3JnLmRyb29scy5y
+dWxlLkRlY2xhcmF0aW9uA3M8AfIg69YCAANJAAZjb2x1bW5MAAlleHRyYWN0b3J0ABpMb3JnL2Ry
+b29scy9zcGkvRXh0cmFjdG9yO0wACmlkZW50aWZpZXJxAH4ABXhwAAAAAHEAfgAmdAAJJG1lc3Nh
+Z2Uxc3EAfgABP0AAAAAAAAx3CAAAABAAAAABcQB+AIlxAH4AiHhwc3EAfgASc3EAfgAXAAAABHcE
+AAAACnNxAH4AEnNxAH4AFwAAAAJ3BAAAAApzcQB+ABsAAAAAAAAAAHNxAH4AFwAAAAJ3BAAAAAJx
+AH4AiHNxAH4AIHEAfgAmc3EAfgAqcQB+ADJzcQB+AD5xAH4AQXhwc3EAfgBCcQB+AChxAH4ARHNx
+AH4AGwAAAAEAAAAAc3EAfgAXAAAAAXcEAAAAAXNxAH4AIHEAfgBNc3EAfgAqcQB+ADJzcQB+AD5x
+AH4AUXhwc3EAfgBCcQB+AChxAH4ARHhzcQB+AFNzcQB+ABcAAAACdwQAAAAKc3EAfgAbAAAAAgAA
+AABzcQB+ABcAAAABdwQAAAABc3EAfgAgcQB+AE1zcQB+ACpxAH4AMnNxAH4APnEAfgBBeHBzcQB+
+AEJxAH4AKHEAfgBEc3EAfgASc3EAfgAXAAAAAncEAAAACnNxAH4AGwAAAAMAAAAAc3EAfgAXAAAA
+AXcEAAAAAXNxAH4AIHEAfgBhc3EAfgAqcQB+ADJzcQB+AD5xAH4AZ3hwc3EAfgBCcQB+AGNxAH4A
+RHNxAH4AGwAAAAQAAAAAc3EAfgAXAAAAAXcEAAAAAXNxAH4AIHEAfgBhc3EAfgAqcQB+ADJzcQB+
+AD5xAH4Abnhwc3EAfgBCcQB+AGNxAH4ARHh4c3EAfgBTc3EAfgAXAAAAAncEAAAACnNxAH4AGwAA
+AAUAAAAAc3EAfgAXAAAAAXcEAAAAAXNxAH4AIHEAfgB1c3EAfgAqcQB+ADJzcQB+AD5xAH4AQXhw
+c3EAfgBCcQB+AChxAH4ARHNxAH4AGwAAAAb/////c3EAfgAXAAAAAXcEAAAAAXNxAH4AIHEAfgB1
+c3EAfgAqcQB+ADJzcQB+AD5xAH4Af3hwc3EAfgBCcQB+AChxAH4ARHhzcQB+AFNzcQB+ABcAAAAC
+dwQAAAAKc3EAfgAbAAAAB/////9zcQB+ABcAAAABdwQAAAABc3EAfgAgc3EAfgAkdnIAEW9yZy5k
+cm9vbHMuUGVyc29uJKQvAhefuGYCAAlJAANhZ2VaAAVhbGl2ZUMAA3NleEwACmJpZ0RlY2ltYWx0
+ABZMamF2YS9tYXRoL0JpZ0RlY2ltYWw7TAAKYmlnSW50ZWdlcnQAFkxqYXZhL21hdGgvQmlnSW50
+ZWdlcjtMAARoYWlycQB+AAVMAAVsaWtlc3EAfgAFTAAEbmFtZXEAfgAFTAAGc3RhdHVzcQB+AAV4
+cHQABG5hbWVzcQB+ACpxAH4AMnNxAH4APnQABG1hcmt4cHNxAH4AQnEAfgDIcQB+AERzcQB+ABsA
+AAAI/////nNxAH4AFwAAAAF3BAAAAAFzcgAib3JnLmRyb29scy5ydWxlLlZhcmlhYmxlQ29uc3Ry
+YWludAAAAAAAAAFAAgACTAAOZmllbGRFeHRyYWN0b3JxAH4AIUwAC3Jlc3RyaWN0aW9udAAlTG9y
+Zy9kcm9vbHMvcnVsZS9WYXJpYWJsZVJlc3RyaWN0aW9uO3hwcQB+AMRzcgAjb3JnLmRyb29scy5y
+dWxlLlZhcmlhYmxlUmVzdHJpY3Rpb24AAAAAAAABQAIABEkABmNvbHVtbkwAC2RlY2xhcmF0aW9u
+cQB+ABxMAAlldmFsdWF0b3JxAH4AK1sAFHJlcXVpcmVkRGVjbGFyYXRpb25zcQB+AAd4cAAAAABx
+AH4AiHEAfgAydXEAfgAPAAAAAXEAfgCIeHBzcQB+AEJxAH4AyHEAfgBEeHhxAH4AgXB4AA==</byte-array>
       </org.drools.rule.Package>
     </entry>
   </map>
-  <byte-array>rO0ABXQAJDA2YmQ1MjkyLTJmZWItNDc2OC1iZDZkLWM1MDI1NTY5OWU4N3NyAClvcmcuZHJvb2xz
+  <byte-array>rO0ABXQAJDlmZjlhZWYyLTg0OTgtNDU3Yi1hNTE2LWI2OWJiOTkzNzczNnNyAClvcmcuZHJvb2xz
 LnJldGVvby5SZXRlb29GYWN0SGFuZGxlRmFjdG9yeQAAAAAAAAEsAgAAeHIAK29yZy5kcm9vbHMu
 Y29tbW9uLkFic3RyYWN0RmFjdEhhbmRsZUZhY3RvcnlrwcaUre4SdAIAA0oAB2NvdW50ZXJKAAJp
 ZEwADmZhY3RIYW5kbGVQb29sdAAkTG9yZy9kcm9vbHMvdXRpbC9QcmltaXRpdmVMb25nU3RhY2s7
@@ -332,7 +359,7 @@
 agIAAHhwdXIAHltMb3JnLmRyb29scy5ydWxlLkRlY2xhcmF0aW9uO/Wnzws0aCnjAgAAeHAAAAAB
 c3IAG29yZy5kcm9vbHMucnVsZS5EZWNsYXJhdGlvbgNzPAHyIOvWAgADSQAGY29sdW1uTAAJZXh0
 cmFjdG9ydAAaTG9yZy9kcm9vbHMvc3BpL0V4dHJhY3RvcjtMAAppZGVudGlmaWVycQB+AEV4cAAA
-AABzcgAjb3JnLmRyb29scy5iYXNlLkNsYXNzRmllbGRFeHRyYWN0b3IZ4kABiRDxowIAAkwABWNs
+AABzcgAjb3JnLmRyb29scy5iYXNlLkNsYXNzRmllbGRFeHRyYWN0b3IAAAAAAAABQAIAAkwABWNs
 YXp6dAARTGphdmEvbGFuZy9DbGFzcztMAAlmaWVsZE5hbWVxAH4ARXhwdnIAEm9yZy5kcm9vbHMu
 TWVzc2FnZQAAAAAAAAAAAAAAeHB0AAhtZXNzYWdlMXQACSRtZXNzYWdlMXNxAH4ADT9AAAAAAAAM
 dwgAAAAQAAAAAXEAfgBZcQB+AFJ4cHNyABNvcmcuZHJvb2xzLnJ1bGUuQW5k/PjnIvCmw3YCAAB4
@@ -342,113 +369,128 @@
 bW5/ObACQK9R5gIABUkABWluZGV4SQAGb2Zmc2V0TAALY29uc3RyYWludHNxAH4ALEwAC2RlY2xh
 cmF0aW9udAAdTG9yZy9kcm9vbHMvcnVsZS9EZWNsYXJhdGlvbjtMAApvYmplY3RUeXBlcQB+ACh4
 cAAAAAAAAAAAc3EAfgAlAAAAAncEAAAAAnEAfgBSc3IAIW9yZy5kcm9vbHMucnVsZS5MaXRlcmFs
-Q29uc3RyYWludAOS+tbk+ZKzAgADTAAJZXZhbHVhdG9ydAAaTG9yZy9kcm9vbHMvc3BpL0V2YWx1
-YXRvcjtMAAlleHRyYWN0b3J0AB9Mb3JnL2Ryb29scy9zcGkvRmllbGRFeHRyYWN0b3I7TAAFZmll
-bGR0ABtMb3JnL2Ryb29scy9zcGkvRmllbGRWYWx1ZTt4cHNyAD1vcmcuZHJvb2xzLmJhc2UuZXZh
-bHVhdG9ycy5TdHJpbmdGYWN0b3J5JFN0cmluZ0VxdWFsRXZhbHVhdG9ySU/lvdDlSJYCAAB4cgAd
-b3JnLmRyb29scy5iYXNlLkJhc2VFdmFsdWF0b3KuQXGsNOGNawIAAkkACG9wZXJhdG9ySQAEdHlw
-ZXhwAAAAAQAAALRxAH4AVXNyABlvcmcuZHJvb2xzLmJhc2UuRmllbGRJbXBsrplN9KzddkQCAAFM
-AAV2YWx1ZXQAEkxqYXZhL2xhbmcvT2JqZWN0O3hwdAADT25leHBzcgAfb3JnLmRyb29scy5iYXNl
-LkNsYXNzT2JqZWN0VHlwZdzs2BfUlPv9AgACSQAJdmFsdWVUeXBlTAAPb2JqZWN0VHlwZUNsYXNz
-cQB+AFR4cAAAANJxAH4AV3NxAH4AYgAAAAEAAAAAc3EAfgAlAAAAAXcEAAAAAXNxAH4AZnEAfgBt
-c3EAfgBTcQB+AFd0AAhtZXNzYWdlMnNxAH4AbnQAA1R3b3hwc3EAfgByAAAA0nEAfgBXeHNyABJv
-cmcuZHJvb2xzLnJ1bGUuT3IVF4eAAV23IwIAAHhxAH4AXHNxAH4AJQAAAAJ3BAAAAApzcQB+AGIA
-AAACAAAAAHNxAH4AJQAAAAF3BAAAAAFzcQB+AGZxAH4AbXEAfgB3c3EAfgBucQB+AHF4cHNxAH4A
-cgAAANJxAH4AV3NxAH4AW3NxAH4AJQAAAAJ3BAAAAApzcQB+AGIAAAADAAAAAHNxAH4AJQAAAAF3
-BAAAAAFzcQB+AGZxAH4AbXNxAH4AU3ZyABFvcmcuZHJvb2xzLkNoZWVzZe+FAhE7Rf31AgACSQAF
-cHJpY2VMAAR0eXBlcQB+AEV4cHQABHR5cGVzcQB+AG50AAdzdGlsdG9ueHBzcQB+AHIAAADScQB+
-AItzcQB+AGIAAAAEAAAAAHNxAH4AJQAAAAF3BAAAAAFzcQB+AGZxAH4AbXEAfgCJc3EAfgBudAAE
-YnJpZXhwc3EAfgByAAAA0nEAfgCLeHhzcQB+AHxzcQB+ACUAAAACdwQAAAAKc3EAfgBiAAAABQAA
-AABzcQB+ACUAAAABdwQAAAABc3EAfgBmcQB+AG1zcQB+AFNxAH4AV3QACG1lc3NhZ2Uzc3EAfgBu
-cQB+AHF4cHNxAH4AcgAAANJxAH4AV3NxAH4AYgAAAAb/////c3EAfgAlAAAAAXcEAAAAAXNxAH4A
-ZnEAfgBtcQB+AJtzcQB+AG50AAVUaHJlZXhwc3EAfgByAAAA0nEAfgBXeHNxAH4AfHNxAH4AJQAA
-AAJ3BAAAAApzcQB+AGIAAAAH/////3NxAH4AJQAAAAF3BAAAAAFzcQB+AGZxAH4AbXNxAH4AU3Zy
-ABFvcmcuZHJvb2xzLlBlcnNvbiSkLwIXn7hmAgAISQADYWdlWgAFYWxpdmVDAANzZXhMAApiaWdE
-ZWNpbWFsdAAWTGphdmEvbWF0aC9CaWdEZWNpbWFsO0wACmJpZ0ludGVnZXJ0ABZMamF2YS9tYXRo
-L0JpZ0ludGVnZXI7TAAFbGlrZXNxAH4ARUwABG5hbWVxAH4ARUwABnN0YXR1c3EAfgBFeHB0AARu
-YW1lc3EAfgBucQB+ADR4cHNxAH4AcgAAANJxAH4ArnNxAH4AYgAAAAj////+c3EAfgAlAAAAAXcE
-AAAAAXNyACdvcmcuZHJvb2xzLnJ1bGUuQm91bmRWYXJpYWJsZUNvbnN0cmFpbnRw+tSAX/7WVwIA
-BUkABmNvbHVtbkwAC2RlY2xhcmF0aW9ucQB+AGNMAAlldmFsdWF0b3JxAH4AZ0wADmZpZWxkRXh0
-cmFjdG9ycQB+AGhbABRyZXF1aXJlZERlY2xhcmF0aW9uc3EAfgBHeHAAAAAAcQB+AFJxAH4AbXEA
-fgCqdXEAfgBOAAAAAXEAfgBSeHBzcQB+AHIAAADScQB+AK54eHQADUhlbGxvIFdvcmxkIDJwcQB+
-AD94c3IAIG9yZy5kcm9vbHMuY29tbW9uLkJldGFOb2RlQmluZGVy2TpNkEHwWrMCAAFbAAtjb25z
-dHJhaW50c3QAIVtMb3JnL2Ryb29scy9zcGkvRmllbGRDb25zdHJhaW50O3hwdXIAIVtMb3JnLmRy
-b29scy5zcGkuRmllbGRDb25zdHJhaW50O5r2l/a0Sg/GAgAAeHAAAAAAc3EAfgA6AAAAAAAJAAAA
-AnNxAH4AJQAAAAN3BAAAAARzcQB+AEEAAAAAAAoAAAAAc3EAfgBEAAAAAAAAAAABAAAAAAABcHEA
-fgBLc3IAOG9yZy5kcm9vbHMucmV0ZW9vLlJ1bGVfSGVsbG9fV29ybGRfMV8wQ29uc2VxdWVuY2VJ
-bnZva2Vybl6svvqzc2oCAAB4cHVxAH4ATgAAAABzcQB+AA0/QAAAAAAADHcIAAAAEAAAAAB4cHNx
-AH4AW3NxAH4AJQAAAAN3BAAAAApzcQB+AFtzcQB+ACUAAAACdwQAAAAKc3EAfgBiAAAAAAAAAABz
-cQB+ACUAAAABdwQAAAABc3EAfgBmcQB+AG1xAH4AVXNxAH4AbnEAfgBxeHBzcQB+AHIAAADScQB+
-AFdzcQB+AGIAAAABAAAAAHNxAH4AJQAAAAF3BAAAAAFzcQB+AGZxAH4AbXEAfgB3c3EAfgBucQB+
-AHp4cHNxAH4AcgAAANJxAH4AV3hzcQB+AHxzcQB+ACUAAAACdwQAAAAKc3EAfgBiAAAAAgAAAABz
-cQB+ACUAAAABdwQAAAABc3EAfgBmcQB+AG1xAH4Ad3NxAH4AbnEAfgBxeHBzcQB+AHIAAADScQB+
-AFdzcQB+AFtzcQB+ACUAAAACdwQAAAAKc3EAfgBiAAAAAwAAAABzcQB+ACUAAAABdwQAAAABc3EA
-fgBmcQB+AG1xAH4AiXNxAH4AbnEAfgCOeHBzcQB+AHIAAADScQB+AItzcQB+AGIAAAAEAAAAAHNx
-AH4AJQAAAAF3BAAAAAFzcQB+AGZxAH4AbXEAfgCJc3EAfgBucQB+AJR4cHNxAH4AcgAAANJxAH4A
-i3h4c3EAfgB8c3EAfgAlAAAAAncEAAAACnNxAH4AYgAAAAUAAAAAc3EAfgAlAAAAAXcEAAAAAXNx
-AH4AZnEAfgBtcQB+AJtzcQB+AG5xAH4AcXhwc3EAfgByAAAA0nEAfgBXc3EAfgBiAAAABv////9z
-cQB+ACUAAAABdwQAAAABc3EAfgBmcQB+AG1xAH4Am3NxAH4AbnEAfgCjeHBzcQB+AHIAAADScQB+
-AFd4eHQADUhlbGxvIFdvcmxkIDFwcQB+AL5xAH4AP3NxAH4AOgAAAAAAGwAAAABzcQB+ACUAAAAB
-dwQAAAABc3EAfgBBAAAAAAAcAAAAAHEAfgBKcQB+APR4c3EAfgC5dXEAfgC8AAAAAXEAfgC1cQB+
-AL5xAH4AKnhzcQB+ALl1cQB+ALwAAAABc3IALW9yZy5kcm9vbHMuY29tbW9uLkluc3RhbmNlTm90
-RXF1YWxzQ29uc3RyYWludLvOi82UZWybAgACSQALb3RoZXJDb2x1bW5bAAxkZWNsYXJhdGlvbnNx
-AH4AR3hwAAAAAnVxAH4ATgAAAABzcQB+ADoAAAAAAAcAAAAFc3EAfgAlAAAAAncEAAAAAnEAfgC+
-c3EAfgA6AAAAAAAMAAAAAnNxAH4AJQAAAAN3BAAAAARzcQB+AEEAAAAAAA0AAAAAcQB+AMFxAH4B
-AHNxAH4AOgAAAAAAHQAAAABzcQB+ACUAAAABdwQAAAABc3EAfgBBAAAAAAAeAAAAAHEAfgBKcQB+
-AQN4c3EAfgC5cQB+AL1xAH4BAHEAfgA4c3EAfgA6AAAAAAAfAAAAAHNxAH4AJQAAAAF3BAAAAAFz
-cQB+AEEAAAAAACAAAAAAcQB+AEpxAH4BB3hzcQB+ALl1cQB+ALwAAAABcQB+ALVxAH4BAHEAfgAq
-eHNxAH4AuXVxAH4AvAAAAAFzcQB+APsAAAACdXEAfgBOAAAAAHEAfgD+c3EAfgA1AAEAAAALAAAA
-BXNxAH4AJAAAAAJ3BAAAAAJxAH4BAHNxAH4AOgAAAAAAFQAAAAJzcQB+ACUAAAADdwQAAAAEc3EA
-fgBBAAAAAAAWAAAAAHEAfgDBcQB+ARJzcQB+ADoAAAAAACUAAAAAc3EAfgAlAAAAAXcEAAAAAXNx
-AH4AQQAAAAAAJgAAAABxAH4ASnEAfgEVeHNxAH4AuXEAfgC9cQB+ARJxAH4AOHNxAH4AOgAAAAAA
-JwAAAABzcQB+ACUAAAABdwQAAAABc3EAfgBBAAAAAAAoAAAAAHEAfgBKcQB+ARl4c3EAfgC5dXEA
-fgC8AAAAAXEAfgC1cQB+ARJxAH4AKnhzcQB+ALl1cQB+ALwAAAABc3EAfgD7AAAAAXVxAH4ATgAA
-AABzcQB+ADoAAAAAABIAAAAFc3EAfgAlAAAAAncEAAAAAnNxAH4AOgAAAAAAEwAAAAJzcQB+ACUA
-AAADdwQAAAAEc3EAfgBBAAAAAAAUAAAAAHEAfgDBcQB+ASRzcQB+ADoAAAAAACEAAAAAc3EAfgAl
-AAAAAXcEAAAAAXNxAH4AQQAAAAAAIgAAAABxAH4ASnEAfgEneHNxAH4AuXEAfgC9cQB+ASRxAH4A
-OHNxAH4AOgAAAAAAIwAAAABzcQB+ACUAAAABdwQAAAABc3EAfgBBAAAAAAAkAAAAAHEAfgBKcQB+
-ASt4c3EAfgC5dXEAfgC8AAAAAXEAfgC1cQB+ASRxAH4AKnhzcQB+ALl1cQB+ALwAAAABc3EAfgD7
-AAAAAXVxAH4ATgAAAABxAH4BInNxAH4ANQABAAAACAAAAAVzcQB+ACQAAAACdwQAAAACcQB+AL5x
-AH4BJHhxAH4A63NxAH4AJwABAAAAAQAAAClzcQB+ACtzcQB+AA0/QAAAAAAADHcIAAAAEAAAAANz
-cQB+ADBzcQB+AA0/QAAAAAAADHcIAAAAEAAAAAFxAH4AcXNxAH4ANQABAAAAAgAAAAtzcQB+ACQA
-AAABdwQAAAABc3IAJm9yZy5kcm9vbHMucmV0ZW9vLkxlZnRJbnB1dEFkYXB0ZXJOb2RlZmG5vwo6
-UjQCAAJMAAZiaW5kZXJxAH4APEwADG9iamVjdFNvdXJjZXEAfgA3eHEAfgA+AAEAAAADAAAAC3Nx
-AH4AJQAAAAF3BAAAAAFzcQB+ADoAAAAAAAUAAAALc3EAfgAlAAAAAncEAAAAAnEAfgD+c3EAfgA6
-AAAAAAAQAAAABXNxAH4AJQAAAAF3BAAAAAFxAH4BInhzcQB+ALlxAH4AvXEAfgFAc3EAfgA1AAEA
-AAAPAAAABXNxAH4AJAAAAAF3BAAAAAFxAH4BQnhxAH4A33NxAH4AJwABAAAADgAAAAtzcQB+ACtz
-cQB+AA0/QAAAAAAADHcIAAAAEAAAAAFzcQB+ADBzcQB+AA0/QAAAAAAADHcIAAAAEAAAAAJxAH4A
-lHNxAH4ANQABAAAAEQAAAAVzcQB+ACQAAAABdwQAAAABcQB+ASJ4cQB+AORxAH4BR3EAfgCOcQB+
-AUV4cQB+AN9xAH4BSnhzcQB+ACUAAAACdwQAAAACcQB+AUVxAH4BTHhxAH4BTHNxAH4AJQAAAAB3
-BAAAAAF4cQB+AOFxAH4AI3hzcQB+ALl1cQB+ALwAAAABc3EAfgD7AAAAAHVxAH4ATgAAAABxAH4B
-PnNxAH4ANQABAAAABAAAAAtzcQB+ACQAAAABdwQAAAABcQB+AUB4cQB+ANFxAH4BNnhzcQB+ALlx
-AH4AvXEAfgE7eHEAfgDMcQB+ATZ4cQB+AMxxAH4BOXNxAH4AMHNxAH4ADT9AAAAAAAAMdwgAAAAQ
-AAAAAnEAfgCjcQB+ARBxAH4AcXEAfgE0eHEAfgDrcQB+AVdzcQB+ADBzcQB+AA0/QAAAAAAADHcI
-AAAAEAAAAAJxAH4AenEAfgFUcQB+AHFzcQB+ADUAAQAAAAYAAAAFc3EAfgAkAAAAAXcEAAAAAXEA
-fgD+eHEAfgDYcQB+ATZ4cQB+ANFxAH4BWXhzcQB+ACUAAAAFdwQAAAAHcQB+ATtxAH4BVHEAfgFb
-cQB+ATRxAH4BEHhxAH4BEHNxAH4AJQAAAAB3BAAAAAF4cQB+AM5xAH4AI3EAfgESeHNxAH4AuXVx
-AH4AvAAAAAFzcQB+APsAAAADdXEAfgBOAAAAAHEAfgFCcQB+AUxxAH4BEHhxAH4A8HEAfgE2eHNx
-AH4AuXVxAH4AvAAAAAFzcQB+APsAAAABdXEAfgBOAAAAAHEAfgFAcQB+AVtxAH4BNHEAfgA4cQB+
-AQNxAH4BJ3EAfgEVeHEAfgCpcQB+ACp4cQB+AKlxAH4AMnhzcQB+ACUAAAABdwQAAAABcQB+ADh4
-cQB+ARlzcQB+ACUAAAAEdwQAAAAEcQB+APRxAH4BB3EAfgErcQB+ARl4cQB+ALFxAH4AI3NxAH4A
-DT9AAAAAAAAMdwgAAAAQAAAAA3EAfgCxcQB+ACpxAH4AznEAfgE2cQB+AOFxAH4BR3hzcgAmb3Jn
-LmRyb29scy5zcGkuQ2xhc3NPYmplY3RUeXBlUmVzb2x2ZXIChNj8cLGw6wIAAUwACm9iamVjdFR5
-cGV0AENMb3JnL2Ryb29scy9zcGkvQ2xhc3NPYmplY3RUeXBlUmVzb2x2ZXIkTW9kaWZpZWFibGVD
-bGFzc09iamVjdFR5cGU7eHBzcgBBb3JnLmRyb29scy5zcGkuQ2xhc3NPYmplY3RUeXBlUmVzb2x2
-ZXIkTW9kaWZpZWFibGVDbGFzc09iamVjdFR5cGVEpauUAjf7NQIAAHhxAH4AcgAAASxwc3IAH29y
-Zy5kcm9vbHMucmV0ZW9vLlJldGVvb0J1aWxkZXIYHVn7j8gD8AIACUkAF2N1cnJlbnRPZmZzZXRB
-ZGp1c3RtZW50SQACaWRMAA1hdHRhY2hlZE5vZGVzcQB+ABBMAAxkZWNsYXJhdGlvbnNxAH4AEEwA
-DG9iamVjdFNvdXJjZXEAfgA3TAAKb2JqZWN0VHlwZXEAfgAQTAAIcmVzb2x2ZXJxAH4AH0wABXJ1
-bGVzcQB+ABBMAAt0dXBsZVNvdXJjZXEAfgA9eHAAAAAAAAAAKXNxAH4ADT9AAAAAAAAwdwgAAABA
-AAAAHHEAfgEHcQB+AQdxAH4BJHEAfgEkcQB+ACpxAH4AKnEAfgFAcQB+AUBxAH4BFXEAfgEVcQB+
-AStxAH4BK3EAfgFFcQB+AUVxAH4BA3EAfgEDcQB+ASdxAH4BJ3EAfgFMcQB+AUxxAH4BNnEAfgE2
-cQB+APRxAH4A9HEAfgFCcQB+AUJxAH4BGXEAfgEZcQB+ARBxAH4BEHEAfgEicQB+ASJxAH4BNHEA
-fgE0cQB+AQBxAH4BAHEAfgFUcQB+AVRxAH4BPnEAfgE+cQB+ATtxAH4BO3EAfgC+cQB+AL5xAH4B
-EnEAfgEScQB+AD9xAH4AP3EAfgD+cQB+AP5xAH4BW3EAfgFbcQB+ADhxAH4AOHEAfgFHcQB+AUd4
-c3EAfgANP0AAAAAAAAx3CAAAABAAAAABcQB+AFlxAH4AUnhxAH4AKnNyABdqYXZhLnV0aWwuTGlu
-a2VkSGFzaE1hcDTATlwQbMD7AgABWgALYWNjZXNzT3JkZXJ4cQB+AA0/QAAAAAAADHcIAAAAEAAA
-AANxAH4Ac3NyABFqYXZhLmxhbmcuSW50ZWdlchLioKT3gYc4AgABSQAFdmFsdWV4cgAQamF2YS5s
-YW5nLk51bWJlcoaslR0LlOCLAgAAeHAAAAAFcQB+AI9zcQB+AXUAAAAEcQB+ALdzcQB+AXUAAAAG
-eABxAH4BbHNxAH4ADT9AAAAAAAAMdwgAAAAQAAAAAnEAfgDBdXIAHVtMb3JnLmRyb29scy5yZXRl
-b28uQmFzZU5vZGU7C+fJk0Ocs+oCAAB4cAAAAARxAH4AwHEAfgECcQB+ASZxAH4BFHEAfgBKdXEA
-fgF7AAAACHEAfgBDcQB+APZxAH4BBXEAfgEJcQB+ASlxAH4BLXEAfgEXcQB+ARt4cQB+ARk=</byte-array>
+Q29uc3RyYWludAAAAAAAAAFAAgACTAAJZXh0cmFjdG9ydAAfTG9yZy9kcm9vbHMvc3BpL0ZpZWxk
+RXh0cmFjdG9yO0wAC3Jlc3RyaWN0aW9udAAkTG9yZy9kcm9vbHMvcnVsZS9MaXRlcmFsUmVzdHJp
+Y3Rpb247eHBxAH4AVXNyACJvcmcuZHJvb2xzLnJ1bGUuTGl0ZXJhbFJlc3RyaWN0aW9uAAAAAAAA
+AUACAAJMAAlldmFsdWF0b3J0ABpMb3JnL2Ryb29scy9zcGkvRXZhbHVhdG9yO0wABWZpZWxkdAAb
+TG9yZy9kcm9vbHMvc3BpL0ZpZWxkVmFsdWU7eHBzcgA9b3JnLmRyb29scy5iYXNlLmV2YWx1YXRv
+cnMuU3RyaW5nRmFjdG9yeSRTdHJpbmdFcXVhbEV2YWx1YXRvcgAAAAAAAAFAAgAAeHIAHW9yZy5k
+cm9vbHMuYmFzZS5CYXNlRXZhbHVhdG9yVSSLs2Wsrn8CAAJMAAhvcGVyYXRvcnQAJUxvcmcvZHJv
+b2xzL2Jhc2UvZXZhbHVhdG9ycy9PcGVyYXRvcjtMAAR0eXBldAAbTG9yZy9kcm9vbHMvYmFzZS9W
+YWx1ZVR5cGU7eHBzcgAjb3JnLmRyb29scy5iYXNlLmV2YWx1YXRvcnMuT3BlcmF0b3IAAAAAAAAB
+QAIAAUwACG9wZXJhdG9ycQB+AEV4cHQAAj09c3IAGW9yZy5kcm9vbHMuYmFzZS5WYWx1ZVR5cGUA
+AAAAAAABQAIAA0wACWNsYXNzVHlwZXEAfgBUTAAQZXZhbHVhdG9yRmFjdG9yeXQALUxvcmcvZHJv
+b2xzL2Jhc2UvZXZhbHVhdG9ycy9FdmFsdWF0b3JGYWN0b3J5O0wABG5hbWVxAH4ARXhwdnIAEGph
+dmEubGFuZy5TdHJpbmeg8KQ4ejuzQgIAAHhwc3IAKG9yZy5kcm9vbHMuYmFzZS5ldmFsdWF0b3Jz
+LlN0cmluZ0ZhY3RvcnnnjP+pwAUavgIAAHhwdAAGU3RyaW5nc3IAGW9yZy5kcm9vbHMuYmFzZS5G
+aWVsZEltcGwAAAAAAAABQAIAAUwABXZhbHVldAASTGphdmEvbGFuZy9PYmplY3Q7eHB0AANPbmV4
+cHNyAB9vcmcuZHJvb2xzLmJhc2UuQ2xhc3NPYmplY3RUeXBl3OzYF9SU+/0CAAJMAA9vYmplY3RU
+eXBlQ2xhc3NxAH4AVEwACXZhbHVlVHlwZXEAfgBxeHBxAH4AV3NxAH4AdnZyABBqYXZhLmxhbmcu
+T2JqZWN0AAAAAAAAAAAAAAB4cHNyAChvcmcuZHJvb2xzLmJhc2UuZXZhbHVhdG9ycy5PYmplY3RG
+YWN0b3J5iWJzm94ZVjkCAAB4cHQABk9iamVjdHNxAH4AYgAAAAEAAAAAc3EAfgAlAAAAAXcEAAAA
+AXNxAH4AZnNxAH4AU3EAfgBXdAAIbWVzc2FnZTJzcQB+AGpxAH4AcnNxAH4AfnQAA1R3b3hwc3EA
+fgCCcQB+AFdxAH4AhHhzcgASb3JnLmRyb29scy5ydWxlLk9yFReHgAFdtyMCAAB4cQB+AFxzcQB+
+ACUAAAACdwQAAAAKc3EAfgBiAAAAAgAAAABzcQB+ACUAAAABdwQAAAABc3EAfgBmcQB+AI1zcQB+
+AGpxAH4AcnNxAH4AfnEAfgCBeHBzcQB+AIJxAH4AV3EAfgCEc3EAfgBbc3EAfgAlAAAAAncEAAAA
+CnNxAH4AYgAAAAMAAAAAc3EAfgAlAAAAAXcEAAAAAXNxAH4AZnNxAH4AU3ZyABFvcmcuZHJvb2xz
+LkNoZWVzZe+FAhE7Rf31AgACSQAFcHJpY2VMAAR0eXBlcQB+AEV4cHQABHR5cGVzcQB+AGpxAH4A
+cnNxAH4AfnQAB3N0aWx0b254cHNxAH4AgnEAfgCjcQB+AIRzcQB+AGIAAAAEAAAAAHNxAH4AJQAA
+AAF3BAAAAAFzcQB+AGZxAH4AoXNxAH4AanEAfgByc3EAfgB+dAAEYnJpZXhwc3EAfgCCcQB+AKNx
+AH4AhHh4c3EAfgCTc3EAfgAlAAAAAncEAAAACnNxAH4AYgAAAAUAAAAAc3EAfgAlAAAAAXcEAAAA
+AXNxAH4AZnNxAH4AU3EAfgBXdAAIbWVzc2FnZTNzcQB+AGpxAH4AcnNxAH4AfnEAfgCBeHBzcQB+
+AIJxAH4AV3EAfgCEc3EAfgBiAAAABv////9zcQB+ACUAAAABdwQAAAABc3EAfgBmcQB+ALVzcQB+
+AGpxAH4AcnNxAH4AfnQABVRocmVleHBzcQB+AIJxAH4AV3EAfgCEeHNxAH4Ak3NxAH4AJQAAAAJ3
+BAAAAApzcQB+AGIAAAAH/////3NxAH4AJQAAAAF3BAAAAAFzcQB+AGZzcQB+AFN2cgARb3JnLmRy
+b29scy5QZXJzb24kpC8CF5+4ZgIACUkAA2FnZVoABWFsaXZlQwADc2V4TAAKYmlnRGVjaW1hbHQA
+FkxqYXZhL21hdGgvQmlnRGVjaW1hbDtMAApiaWdJbnRlZ2VydAAWTGphdmEvbWF0aC9CaWdJbnRl
+Z2VyO0wABGhhaXJxAH4ARUwABWxpa2VzcQB+AEVMAARuYW1lcQB+AEVMAAZzdGF0dXNxAH4ARXhw
+dAAEbmFtZXNxAH4AanEAfgByc3EAfgB+cQB+ADR4cHNxAH4AgnEAfgDKcQB+AIRzcQB+AGIAAAAI
+/////nNxAH4AJQAAAAF3BAAAAAFzcgAib3JnLmRyb29scy5ydWxlLlZhcmlhYmxlQ29uc3RyYWlu
+dAAAAAAAAAFAAgACTAAOZmllbGRFeHRyYWN0b3JxAH4AZ0wAC3Jlc3RyaWN0aW9udAAlTG9yZy9k
+cm9vbHMvcnVsZS9WYXJpYWJsZVJlc3RyaWN0aW9uO3hwcQB+AMZzcgAjb3JnLmRyb29scy5ydWxl
+LlZhcmlhYmxlUmVzdHJpY3Rpb24AAAAAAAABQAIABEkABmNvbHVtbkwAC2RlY2xhcmF0aW9ucQB+
+AGNMAAlldmFsdWF0b3JxAH4Aa1sAFHJlcXVpcmVkRGVjbGFyYXRpb25zcQB+AEd4cAAAAABxAH4A
+UnEAfgBydXEAfgBOAAAAAXEAfgBSeHBzcQB+AIJxAH4AynEAfgCEeHh0AA1IZWxsbyBXb3JsZCAy
+cHEAfgA/eHNyACBvcmcuZHJvb2xzLmNvbW1vbi5CZXRhTm9kZUJpbmRlctk6TZBB8FqzAgABWwAL
+Y29uc3RyYWludHN0ACFbTG9yZy9kcm9vbHMvc3BpL0ZpZWxkQ29uc3RyYWludDt4cHVyACFbTG9y
+Zy5kcm9vbHMuc3BpLkZpZWxkQ29uc3RyYWludDua9pf2tEoPxgIAAHhwAAAAAHNxAH4AOgAAAAAA
+CQAAAAJzcQB+ACUAAAADdwQAAAAEc3EAfgBBAAAAAAAKAAAAAHNxAH4ARAAAAAAAAAAAAQAAAAAA
+AXBxAH4AS3NyADhvcmcuZHJvb2xzLnJldGVvby5SdWxlX0hlbGxvX1dvcmxkXzFfMENvbnNlcXVl
+bmNlSW52b2tlcm5erL76s3NqAgAAeHB1cQB+AE4AAAAAc3EAfgANP0AAAAAAAAx3CAAAABAAAAAA
+eHBzcQB+AFtzcQB+ACUAAAADdwQAAAAKc3EAfgBbc3EAfgAlAAAAAncEAAAACnNxAH4AYgAAAAAA
+AAAAc3EAfgAlAAAAAXcEAAAAAXNxAH4AZnEAfgBVc3EAfgBqcQB+AHJzcQB+AH5xAH4AgXhwc3EA
+fgCCcQB+AFdxAH4AhHNxAH4AYgAAAAEAAAAAc3EAfgAlAAAAAXcEAAAAAXNxAH4AZnEAfgCNc3EA
+fgBqcQB+AHJzcQB+AH5xAH4AkXhwc3EAfgCCcQB+AFdxAH4AhHhzcQB+AJNzcQB+ACUAAAACdwQA
+AAAKc3EAfgBiAAAAAgAAAABzcQB+ACUAAAABdwQAAAABc3EAfgBmcQB+AI1zcQB+AGpxAH4AcnNx
+AH4AfnEAfgCBeHBzcQB+AIJxAH4AV3EAfgCEc3EAfgBbc3EAfgAlAAAAAncEAAAACnNxAH4AYgAA
+AAMAAAAAc3EAfgAlAAAAAXcEAAAAAXNxAH4AZnEAfgChc3EAfgBqcQB+AHJzcQB+AH5xAH4Ap3hw
+c3EAfgCCcQB+AKNxAH4AhHNxAH4AYgAAAAQAAAAAc3EAfgAlAAAAAXcEAAAAAXNxAH4AZnEAfgCh
+c3EAfgBqcQB+AHJzcQB+AH5xAH4Arnhwc3EAfgCCcQB+AKNxAH4AhHh4c3EAfgCTc3EAfgAlAAAA
+AncEAAAACnNxAH4AYgAAAAUAAAAAc3EAfgAlAAAAAXcEAAAAAXNxAH4AZnEAfgC1c3EAfgBqcQB+
+AHJzcQB+AH5xAH4AgXhwc3EAfgCCcQB+AFdxAH4AhHNxAH4AYgAAAAb/////c3EAfgAlAAAAAXcE
+AAAAAXNxAH4AZnEAfgC1c3EAfgBqcQB+AHJzcQB+AH5xAH4Av3hwc3EAfgCCcQB+AFdxAH4AhHh4
+dAANSGVsbG8gV29ybGQgMXBxAH4A3nEAfgA/c3EAfgA6AAAAAAAbAAAAAHNxAH4AJQAAAAF3BAAA
+AAFzcQB+AEEAAAAAABwAAAAAcQB+AEpxAH4BG3hzcQB+ANl1cQB+ANwAAAABcQB+ANNxAH4A3nEA
+fgAqeHNxAH4A2XVxAH4A3AAAAAFzcgAtb3JnLmRyb29scy5jb21tb24uSW5zdGFuY2VOb3RFcXVh
+bHNDb25zdHJhaW50u86LzZRlbJsCAAJJAAtvdGhlckNvbHVtblsADGRlY2xhcmF0aW9uc3EAfgBH
+eHAAAAACdXEAfgBOAAAAAHNxAH4AOgAAAAAABwAAAAVzcQB+ACUAAAACdwQAAAACcQB+AN5zcQB+
+ADoAAAAAAAwAAAACc3EAfgAlAAAAA3cEAAAABHNxAH4AQQAAAAAADQAAAABxAH4A4XEAfgEnc3EA
+fgA6AAAAAAAdAAAAAHNxAH4AJQAAAAF3BAAAAAFzcQB+AEEAAAAAAB4AAAAAcQB+AEpxAH4BKnhz
+cQB+ANlxAH4A3XEAfgEncQB+ADhzcQB+ADoAAAAAAB8AAAAAc3EAfgAlAAAAAXcEAAAAAXNxAH4A
+QQAAAAAAIAAAAABxAH4ASnEAfgEueHNxAH4A2XVxAH4A3AAAAAFxAH4A03EAfgEncQB+ACp4c3EA
+fgDZdXEAfgDcAAAAAXNxAH4BIgAAAAJ1cQB+AE4AAAAAcQB+ASVzcQB+ADUAAQAAAAsAAAAFc3EA
+fgAkAAAAAncEAAAAAnEAfgEnc3EAfgA6AAAAAAAVAAAAAnNxAH4AJQAAAAN3BAAAAARzcQB+AEEA
+AAAAABYAAAAAcQB+AOFxAH4BOXNxAH4AOgAAAAAAJQAAAABzcQB+ACUAAAABdwQAAAABc3EAfgBB
+AAAAAAAmAAAAAHEAfgBKcQB+ATx4c3EAfgDZcQB+AN1xAH4BOXEAfgA4c3EAfgA6AAAAAAAnAAAA
+AHNxAH4AJQAAAAF3BAAAAAFzcQB+AEEAAAAAACgAAAAAcQB+AEpxAH4BQHhzcQB+ANl1cQB+ANwA
+AAABcQB+ANNxAH4BOXEAfgAqeHNxAH4A2XVxAH4A3AAAAAFzcQB+ASIAAAABdXEAfgBOAAAAAHNx
+AH4AOgAAAAAAEgAAAAVzcQB+ACUAAAACdwQAAAACc3EAfgA6AAAAAAATAAAAAnNxAH4AJQAAAAN3
+BAAAAARzcQB+AEEAAAAAABQAAAAAcQB+AOFxAH4BS3NxAH4AOgAAAAAAIQAAAABzcQB+ACUAAAAB
+dwQAAAABc3EAfgBBAAAAAAAiAAAAAHEAfgBKcQB+AU54c3EAfgDZcQB+AN1xAH4BS3EAfgA4c3EA
+fgA6AAAAAAAjAAAAAHNxAH4AJQAAAAF3BAAAAAFzcQB+AEEAAAAAACQAAAAAcQB+AEpxAH4BUnhz
+cQB+ANl1cQB+ANwAAAABcQB+ANNxAH4BS3EAfgAqeHNxAH4A2XVxAH4A3AAAAAFzcQB+ASIAAAAB
+dXEAfgBOAAAAAHEAfgFJc3EAfgA1AAEAAAAIAAAABXNxAH4AJAAAAAJ3BAAAAAJxAH4A3nEAfgFL
+eHEAfgEQc3EAfgAnAAEAAAABAAAAKXNxAH4AK3NxAH4ADT9AAAAAAAAMdwgAAAAQAAAAA3NxAH4A
+MHNxAH4ADT9AAAAAAAAMdwgAAAAQAAAAAXEAfgCBc3EAfgA1AAEAAAACAAAAC3NxAH4AJAAAAAF3
+BAAAAAFzcgAmb3JnLmRyb29scy5yZXRlb28uTGVmdElucHV0QWRhcHRlck5vZGVmYbm/CjpSNAIA
+AkwABmJpbmRlcnEAfgA8TAAMb2JqZWN0U291cmNlcQB+ADd4cQB+AD4AAQAAAAMAAAALc3EAfgAl
+AAAAAXcEAAAAAXNxAH4AOgAAAAAABQAAAAtzcQB+ACUAAAACdwQAAAACcQB+ASVzcQB+ADoAAAAA
+ABAAAAAFc3EAfgAlAAAAAXcEAAAAAXEAfgFJeHNxAH4A2XEAfgDdcQB+AWdzcQB+ADUAAQAAAA8A
+AAAFc3EAfgAkAAAAAXcEAAAAAXEAfgFpeHEAfgECc3EAfgAnAAEAAAAOAAAAC3NxAH4AK3NxAH4A
+DT9AAAAAAAAMdwgAAAAQAAAAAXNxAH4AMHNxAH4ADT9AAAAAAAAMdwgAAAAQAAAAAnEAfgCuc3EA
+fgA1AAEAAAARAAAABXNxAH4AJAAAAAF3BAAAAAFxAH4BSXhxAH4BCHEAfgFucQB+AKdxAH4BbHhx
+AH4BAnEAfgFxeHNxAH4AJQAAAAJ3BAAAAAJxAH4BbHEAfgFzeHEAfgFzc3EAfgAlAAAAAHcEAAAA
+AXhxAH4BBXEAfgAjeHNxAH4A2XVxAH4A3AAAAAFzcQB+ASIAAAAAdXEAfgBOAAAAAHEAfgFlc3EA
+fgA1AAEAAAAEAAAAC3NxAH4AJAAAAAF3BAAAAAFxAH4BZ3hxAH4A8nEAfgFdeHNxAH4A2XEAfgDd
+cQB+AWJ4cQB+AOxxAH4BXXhxAH4A7HEAfgFgc3EAfgAwc3EAfgANP0AAAAAAAAx3CAAAABAAAAAC
+cQB+AJFxAH4Be3EAfgCBc3EAfgA1AAEAAAAGAAAABXNxAH4AJAAAAAF3BAAAAAFxAH4BJXhxAH4A
++nEAfgFdeHEAfgDycQB+AX5zcQB+ADBzcQB+AA0/QAAAAAAADHcIAAAAEAAAAAJxAH4Av3EAfgE3
+cQB+AIFxAH4BW3hxAH4BEHEAfgGCeHNxAH4AJQAAAAV3BAAAAAdxAH4BYnEAfgF7cQB+AYBxAH4B
+W3EAfgE3eHEAfgE3c3EAfgAlAAAAAHcEAAAAAXhxAH4A73EAfgAjcQB+ATl4c3EAfgDZdXEAfgDc
+AAAAAXNxAH4BIgAAAAN1cQB+AE4AAAAAcQB+AWlxAH4Bc3EAfgE3eHEAfgEWcQB+AV14c3EAfgDZ
+dXEAfgDcAAAAAXNxAH4BIgAAAAF1cQB+AE4AAAAAcQB+AWdxAH4BgHEAfgFbcQB+ADhxAH4BKnEA
+fgFOcQB+ATx4cQB+AMVxAH4AKnhxAH4AxXEAfgAyeHNxAH4AJQAAAAF3BAAAAAFxAH4AOHhxAH4B
+QHNxAH4AJQAAAAR3BAAAAARxAH4BG3EAfgEucQB+AVJxAH4BQHhxAH4AznEAfgAjc3EAfgANP0AA
+AAAAAAx3CAAAABAAAAADcQB+AM5xAH4AKnEAfgDvcQB+AV1xAH4BBXEAfgFueHNyACZvcmcuZHJv
+b2xzLnNwaS5DbGFzc09iamVjdFR5cGVSZXNvbHZlcgKE2PxwsbDrAgABTAAKb2JqZWN0VHlwZXQA
+Q0xvcmcvZHJvb2xzL3NwaS9DbGFzc09iamVjdFR5cGVSZXNvbHZlciRNb2RpZmllYWJsZUNsYXNz
+T2JqZWN0VHlwZTt4cHNyAEFvcmcuZHJvb2xzLnNwaS5DbGFzc09iamVjdFR5cGVSZXNvbHZlciRN
+b2RpZmllYWJsZUNsYXNzT2JqZWN0VHlwZUSlq5QCN/s1AgAAeHEAfgCCcHNxAH4AdnBwdAAEbnVs
+bHNyAB9vcmcuZHJvb2xzLnJldGVvby5SZXRlb29CdWlsZGVyGB1Z+4/IA/ACAAlJABdjdXJyZW50
+T2Zmc2V0QWRqdXN0bWVudEkAAmlkTAANYXR0YWNoZWROb2Rlc3EAfgAQTAAMZGVjbGFyYXRpb25z
+cQB+ABBMAAxvYmplY3RTb3VyY2VxAH4AN0wACm9iamVjdFR5cGVxAH4AEEwACHJlc29sdmVycQB+
+AB9MAAVydWxlc3EAfgAQTAALdHVwbGVTb3VyY2VxAH4APXhwAAAAAAAAAClzcQB+AA0/QAAAAAAA
+MHcIAAAAQAAAABxxAH4AKnEAfgAqcQB+AS5xAH4BLnEAfgFscQB+AWxxAH4BZ3EAfgFncQB+AXtx
+AH4Be3EAfgFzcQB+AXNxAH4BZXEAfgFlcQB+AWJxAH4BYnEAfgFpcQB+AWlxAH4BUnEAfgFScQB+
+AUBxAH4BQHEAfgFdcQB+AV1xAH4BOXEAfgE5cQB+AN5xAH4A3nEAfgGAcQB+AYBxAH4BKnEAfgEq
+cQB+AW5xAH4BbnEAfgEncQB+ASdxAH4BSXEAfgFJcQB+AVtxAH4BW3EAfgFOcQB+AU5xAH4BPHEA
+fgE8cQB+ATdxAH4BN3EAfgElcQB+ASVxAH4AP3EAfgA/cQB+AUtxAH4BS3EAfgEbcQB+ARtxAH4A
+OHEAfgA4eHNxAH4ADT9AAAAAAAAMdwgAAAAQAAAAAXEAfgBZcQB+AFJ4cQB+ACpzcgAXamF2YS51
+dGlsLkxpbmtlZEhhc2hNYXA0wE5cEGzA+wIAAVoAC2FjY2Vzc09yZGVyeHEAfgANP0AAAAAAAAx3
+CAAAABAAAAADcQB+AINzcgARamF2YS5sYW5nLkludGVnZXIS4qCk94GHOAIAAUkABXZhbHVleHIA
+EGphdmEubGFuZy5OdW1iZXKGrJUdC5TgiwIAAHhwAAAABXEAfgCoc3EAfgGeAAAABHEAfgDXc3EA
+fgGeAAAABngAcQB+AZNzcQB+AA0/QAAAAAAADHcIAAAAEAAAAAJxAH4A4XVyAB1bTG9yZy5kcm9v
+bHMucmV0ZW9vLkJhc2VOb2RlOwvnyZNDnLPqAgAAeHAAAAAEcQB+AOBxAH4BKXEAfgFNcQB+ATtx
+AH4ASnVxAH4BpAAAAAhxAH4AQ3EAfgEdcQB+ASxxAH4BMHEAfgFQcQB+AVRxAH4BPnEAfgFCeHEA
+fgFA</byte-array>
 </org.drools.reteoo.ReteooRuleBase>
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/reteoo/ThreeColumnsWithConstraints
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/reteoo/ThreeColumnsWithConstraints	2006-08-02 21:58:31 UTC (rev 5420)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/reteoo/ThreeColumnsWithConstraints	2006-08-03 00:14:06 UTC (rev 5421)
@@ -270,7 +270,7 @@
 b29scy9ydWxlL0RlY2xhcmF0aW9uO3hwc3IAG29yZy5kcm9vbHMucnVsZS5EZWNsYXJhdGlvbgNz
 PAHyIOvWAgADSQAGY29sdW1uTAAJZXh0cmFjdG9ydAAaTG9yZy9kcm9vbHMvc3BpL0V4dHJhY3Rv
 cjtMAAppZGVudGlmaWVydAASTGphdmEvbGFuZy9TdHJpbmc7eHAAAAABc3IAI29yZy5kcm9vbHMu
-YmFzZS5DbGFzc0ZpZWxkRXh0cmFjdG9yGeJAAYkQ8aMCAAJMAAVjbGF6enQAEUxqYXZhL2xhbmcv
+YmFzZS5DbGFzc0ZpZWxkRXh0cmFjdG9yAAAAAAAAAUACAAJMAAVjbGF6enQAEUxqYXZhL2xhbmcv
 Q2xhc3M7TAAJZmllbGROYW1lcQB+AAp4cHZyABFvcmcuZHJvb2xzLkNoZWVzZe+FAhE7Rf31AgAC
 SQAFcHJpY2VMAAR0eXBlcQB+AAp4cHQABXByaWNldAAHJHByaWNlMnNyAExvcmcuZHJvb2xzLmNv
 bXBpbGVyLlJ1bGVfdGhyZWVfY29sdW1uc193aXRoX2NvbnN0cmFpbnRzXzFfMFByZWRpY2F0ZTBJ
@@ -292,45 +292,57 @@
 a2Vybl6svvqzc2oCAAB4cHVxAH4AFQAAAAVxAH4AF3NxAH4ACAAAAAFzcgAeb3JnLmRyb29scy5z
 cGkuQ29sdW1uRXh0cmFjdG9yfa0D3zT82ZwCAAFMAApvYmplY3RUeXBldAAbTG9yZy9kcm9vbHMv
 c3BpL09iamVjdFR5cGU7eHBzcgAfb3JnLmRyb29scy5iYXNlLkNsYXNzT2JqZWN0VHlwZdzs2BfU
-lPv9AgACSQAJdmFsdWVUeXBlTAAPb2JqZWN0VHlwZUNsYXNzcQB+AA14cAAAANJxAH4AEHQACCRj
-aGVlc2Uyc3EAfgAIAAAAAHNxAH4ADHEAfgAQdAAEdHlwZXQABSR0eXBlcQB+AAtzcQB+AAgAAAAA
-c3EAfgAuc3EAfgAxAAAA0nEAfgAQdAAIJGNoZWVzZTFzcQB+AAA/QAAAAAAADHcIAAAAEAAAAAVx
-AH4AGHEAfgAXcQB+ADNxAH4ALXEAfgA3cQB+ADRxAH4AEnEAfgALcQB+ADtxAH4AOHhwc3IAE29y
-Zy5kcm9vbHMucnVsZS5BbmT8+Oci8KbDdgIAAHhyABxvcmcuZHJvb2xzLnJ1bGUuR3JvdXBFbGVt
-ZW50xtyTv2+16VgCAAFMAAhjaGlsZHJlbnQAEExqYXZhL3V0aWwvTGlzdDt4cgAib3JnLmRyb29s
-cy5ydWxlLkNvbmRpdGlvbmFsRWxlbWVudMYMc+lm86I2AgAAeHBzcgATamF2YS51dGlsLkFycmF5
-TGlzdHiB0h2Zx2GdAwABSQAEc2l6ZXhwAAAAA3cEAAAACnNyABZvcmcuZHJvb2xzLnJ1bGUuQ29s
-dW1ufzmwAkCvUeYCAAVJAAVpbmRleEkABm9mZnNldEwAC2NvbnN0cmFpbnRzcQB+AD9MAAtkZWNs
-YXJhdGlvbnEAfgAETAAKb2JqZWN0VHlwZXEAfgAveHAAAAAAAAAAAHNxAH4AQgAAAAN3BAAAAARx
-AH4ANHNyACFvcmcuZHJvb2xzLnJ1bGUuTGl0ZXJhbENvbnN0cmFpbnQDkvrW5PmSswIAA0wACWV2
-YWx1YXRvcnQAGkxvcmcvZHJvb2xzL3NwaS9FdmFsdWF0b3I7TAAJZXh0cmFjdG9ydAAfTG9yZy9k
-cm9vbHMvc3BpL0ZpZWxkRXh0cmFjdG9yO0wABWZpZWxkdAAbTG9yZy9kcm9vbHMvc3BpL0ZpZWxk
-VmFsdWU7eHBzcgA9b3JnLmRyb29scy5iYXNlLmV2YWx1YXRvcnMuU3RyaW5nRmFjdG9yeSRTdHJp
-bmdFcXVhbEV2YWx1YXRvcklP5b3Q5UiWAgAAeHIAHW9yZy5kcm9vbHMuYmFzZS5CYXNlRXZhbHVh
-dG9yrkFxrDThjWsCAAJJAAhvcGVyYXRvckkABHR5cGV4cAAAAAEAAAC0cQB+ADVzcgAZb3JnLmRy
-b29scy5iYXNlLkZpZWxkSW1wbK6ZTfSs3XZEAgABTAAFdmFsdWV0ABJMamF2YS9sYW5nL09iamVj
-dDt4cHQAB2NoZWRkYXJxAH4AF3hxAH4AOHEAfgA6c3EAfgBEAAAAAQAAAABzcQB+AEIAAAADdwQA
-AAAEc3IAJ29yZy5kcm9vbHMucnVsZS5Cb3VuZFZhcmlhYmxlQ29uc3RyYWludHD61IBf/tZXAgAF
-SQAGY29sdW1uTAALZGVjbGFyYXRpb25xAH4ABEwACWV2YWx1YXRvcnEAfgBITAAOZmllbGRFeHRy
-YWN0b3JxAH4ASVsAFHJlcXVpcmVkRGVjbGFyYXRpb25zcQB+AAZ4cAAAAABxAH4ANHEAfgBOcQB+
-ADV1cQB+ABUAAAABcQB+ADRxAH4AC3EAfgAHeHEAfgAtcQB+ADJzcQB+AEQAAAACAAAAAHNxAH4A
-QgAAAAF3BAAAAAFzcQB+AFUAAAAAcQB+ADRxAH4ATnNxAH4ADHZyABFvcmcuZHJvb2xzLlBlcnNv
-biSkLwIXn7hmAgAISQADYWdlWgAFYWxpdmVDAANzZXhMAApiaWdEZWNpbWFsdAAWTGphdmEvbWF0
-aC9CaWdEZWNpbWFsO0wACmJpZ0ludGVnZXJ0ABZMamF2YS9tYXRoL0JpZ0ludGVnZXI7TAAFbGlr
-ZXNxAH4ACkwABG5hbWVxAH4ACkwABnN0YXR1c3EAfgAKeHB0AARuYW1ldXEAfgAVAAAAAXEAfgA0
-eHBzcQB+ADEAAADScQB+AF94dAAgdGhyZWUgY29sdW1ucyB3aXRoIGNvbnN0cmFpbnRzIDFwdABN
-b3JnLmRyb29scy5jb21waWxlci5SdWxlX3RocmVlX2NvbHVtbnNfd2l0aF9jb25zdHJhaW50c18y
-XzBDb25zZXF1ZW5jZUludm9rZXJzcQB+ACMAAAAAAAAAAAIAAAAAAAFwcQB+AClzcgBNb3JnLmRy
-b29scy5jb21waWxlci5SdWxlX3RocmVlX2NvbHVtbnNfd2l0aF9jb25zdHJhaW50c18yXzBDb25z
-ZXF1ZW5jZUludm9rZXJuXqy++rNzagIAAHhwdXEAfgAVAAAABXEAfgAgc3EAfgAIAAAAAXNxAH4A
-LnNxAH4AMQAAANJxAH4AEHQACCRjaGVlc2Uyc3EAfgAIAAAAAHEAfgA1dAAFJHR5cGVxAH4AG3Nx
-AH4ACAAAAABzcQB+AC5zcQB+ADEAAADScQB+ABB0AAgkY2hlZXNlMXNxAH4AAD9AAAAAAAAMdwgA
-AAAQAAAABXEAfgAhcQB+ACBxAH4AbHEAfgBpcQB+AG5xAH4AbXEAfgAccQB+ABtxAH4AcnEAfgBv
-eHBzcQB+AD1zcQB+AEIAAAACdwQAAAAKc3EAfgBEAAAAAAAAAABzcQB+AEIAAAADdwQAAAAEcQB+
-AG1zcQB+AEdxAH4ATnEAfgA1c3EAfgBPcQB+AFJxAH4AIHhxAH4Ab3EAfgBxc3EAfgBEAAAAAQAA
-AABzcQB+AEIAAAADdwQAAAAEc3EAfgBVAAAAAHEAfgBtcQB+AE5xAH4ANXVxAH4AFQAAAAFxAH4A
-bXEAfgAbcQB+ABp4cQB+AGlxAH4Aa3h0ACB0aHJlZSBjb2x1bW5zIHdpdGggY29uc3RyYWludHMg
-MnB4</byte-array>
+lPv9AgACTAAPb2JqZWN0VHlwZUNsYXNzcQB+AA1MAAl2YWx1ZVR5cGV0ABtMb3JnL2Ryb29scy9i
+YXNlL1ZhbHVlVHlwZTt4cHEAfgAQc3IAGW9yZy5kcm9vbHMuYmFzZS5WYWx1ZVR5cGUAAAAAAAAB
+QAIAA0wACWNsYXNzVHlwZXEAfgANTAAQZXZhbHVhdG9yRmFjdG9yeXQALUxvcmcvZHJvb2xzL2Jh
+c2UvZXZhbHVhdG9ycy9FdmFsdWF0b3JGYWN0b3J5O0wABG5hbWVxAH4ACnhwdnIAEGphdmEubGFu
+Zy5PYmplY3QAAAAAAAAAAAAAAHhwc3IAKG9yZy5kcm9vbHMuYmFzZS5ldmFsdWF0b3JzLk9iamVj
+dEZhY3RvcnmJYnOb3hlWOQIAAHhwdAAGT2JqZWN0dAAIJGNoZWVzZTJzcQB+AAgAAAAAc3EAfgAM
+cQB+ABB0AAR0eXBldAAFJHR5cGVxAH4AC3NxAH4ACAAAAABzcQB+AC5zcQB+ADFxAH4AEHEAfgA2
+dAAIJGNoZWVzZTFzcQB+AAA/QAAAAAAADHcIAAAAEAAAAAVxAH4AGHEAfgAXcQB+ADxxAH4ALXEA
+fgBAcQB+AD1xAH4AEnEAfgALcQB+AERxAH4AQXhwc3IAE29yZy5kcm9vbHMucnVsZS5BbmT8+Oci
+8KbDdgIAAHhyABxvcmcuZHJvb2xzLnJ1bGUuR3JvdXBFbGVtZW50xtyTv2+16VgCAAFMAAhjaGls
+ZHJlbnQAEExqYXZhL3V0aWwvTGlzdDt4cgAib3JnLmRyb29scy5ydWxlLkNvbmRpdGlvbmFsRWxl
+bWVudMYMc+lm86I2AgAAeHBzcgATamF2YS51dGlsLkFycmF5TGlzdHiB0h2Zx2GdAwABSQAEc2l6
+ZXhwAAAAA3cEAAAACnNyABZvcmcuZHJvb2xzLnJ1bGUuQ29sdW1ufzmwAkCvUeYCAAVJAAVpbmRl
+eEkABm9mZnNldEwAC2NvbnN0cmFpbnRzcQB+AEhMAAtkZWNsYXJhdGlvbnEAfgAETAAKb2JqZWN0
+VHlwZXEAfgAveHAAAAAAAAAAAHNxAH4ASwAAAAN3BAAAAARxAH4APXNyACFvcmcuZHJvb2xzLnJ1
+bGUuTGl0ZXJhbENvbnN0cmFpbnQAAAAAAAABQAIAAkwACWV4dHJhY3RvcnQAH0xvcmcvZHJvb2xz
+L3NwaS9GaWVsZEV4dHJhY3RvcjtMAAtyZXN0cmljdGlvbnQAJExvcmcvZHJvb2xzL3J1bGUvTGl0
+ZXJhbFJlc3RyaWN0aW9uO3hwcQB+AD5zcgAib3JnLmRyb29scy5ydWxlLkxpdGVyYWxSZXN0cmlj
+dGlvbgAAAAAAAAFAAgACTAAJZXZhbHVhdG9ydAAaTG9yZy9kcm9vbHMvc3BpL0V2YWx1YXRvcjtM
+AAVmaWVsZHQAG0xvcmcvZHJvb2xzL3NwaS9GaWVsZFZhbHVlO3hwc3IAPW9yZy5kcm9vbHMuYmFz
+ZS5ldmFsdWF0b3JzLlN0cmluZ0ZhY3RvcnkkU3RyaW5nRXF1YWxFdmFsdWF0b3IAAAAAAAABQAIA
+AHhyAB1vcmcuZHJvb2xzLmJhc2UuQmFzZUV2YWx1YXRvclUki7NlrK5/AgACTAAIb3BlcmF0b3J0
+ACVMb3JnL2Ryb29scy9iYXNlL2V2YWx1YXRvcnMvT3BlcmF0b3I7TAAEdHlwZXEAfgAyeHBzcgAj
+b3JnLmRyb29scy5iYXNlLmV2YWx1YXRvcnMuT3BlcmF0b3IAAAAAAAABQAIAAUwACG9wZXJhdG9y
+cQB+AAp4cHQAAj09c3EAfgA0dnIAEGphdmEubGFuZy5TdHJpbmeg8KQ4ejuzQgIAAHhwc3IAKG9y
+Zy5kcm9vbHMuYmFzZS5ldmFsdWF0b3JzLlN0cmluZ0ZhY3RvcnnnjP+pwAUavgIAAHhwdAAGU3Ry
+aW5nc3IAGW9yZy5kcm9vbHMuYmFzZS5GaWVsZEltcGwAAAAAAAABQAIAAUwABXZhbHVldAASTGph
+dmEvbGFuZy9PYmplY3Q7eHB0AAdjaGVkZGFycQB+ABd4cQB+AEFxAH4AQ3NxAH4ATQAAAAEAAAAA
+c3EAfgBLAAAAA3cEAAAABHNyACJvcmcuZHJvb2xzLnJ1bGUuVmFyaWFibGVDb25zdHJhaW50AAAA
+AAAAAUACAAJMAA5maWVsZEV4dHJhY3RvcnEAfgBRTAALcmVzdHJpY3Rpb250ACVMb3JnL2Ryb29s
+cy9ydWxlL1ZhcmlhYmxlUmVzdHJpY3Rpb247eHBxAH4APnNyACNvcmcuZHJvb2xzLnJ1bGUuVmFy
+aWFibGVSZXN0cmljdGlvbgAAAAAAAAFAAgAESQAGY29sdW1uTAALZGVjbGFyYXRpb25xAH4ABEwA
+CWV2YWx1YXRvcnEAfgBVWwAUcmVxdWlyZWREZWNsYXJhdGlvbnNxAH4ABnhwAAAAAHEAfgA9cQB+
+AFt1cQB+ABUAAAABcQB+AD1xAH4AC3EAfgAHeHEAfgAtcQB+ADNzcQB+AE0AAAACAAAAAHNxAH4A
+SwAAAAF3BAAAAAFzcQB+AGtzcQB+AAx2cgARb3JnLmRyb29scy5QZXJzb24kpC8CF5+4ZgIACUkA
+A2FnZVoABWFsaXZlQwADc2V4TAAKYmlnRGVjaW1hbHQAFkxqYXZhL21hdGgvQmlnRGVjaW1hbDtM
+AApiaWdJbnRlZ2VydAAWTGphdmEvbWF0aC9CaWdJbnRlZ2VyO0wABGhhaXJxAH4ACkwABWxpa2Vz
+cQB+AApMAARuYW1lcQB+AApMAAZzdGF0dXNxAH4ACnhwdAAEbmFtZXNxAH4AbgAAAABxAH4APXEA
+fgBbdXEAfgAVAAAAAXEAfgA9eHBzcQB+ADFxAH4AeHEAfgA2eHQAIHRocmVlIGNvbHVtbnMgd2l0
+aCBjb25zdHJhaW50cyAxcHQATW9yZy5kcm9vbHMuY29tcGlsZXIuUnVsZV90aHJlZV9jb2x1bW5z
+X3dpdGhfY29uc3RyYWludHNfMl8wQ29uc2VxdWVuY2VJbnZva2Vyc3EAfgAjAAAAAAAAAAACAAAA
+AAABcHEAfgApc3IATW9yZy5kcm9vbHMuY29tcGlsZXIuUnVsZV90aHJlZV9jb2x1bW5zX3dpdGhf
+Y29uc3RyYWludHNfMl8wQ29uc2VxdWVuY2VJbnZva2Vybl6svvqzc2oCAAB4cHVxAH4AFQAAAAVx
+AH4AIHNxAH4ACAAAAAFzcQB+AC5zcQB+ADFxAH4AEHEAfgA2dAAIJGNoZWVzZTJzcQB+AAgAAAAA
+cQB+AD50AAUkdHlwZXEAfgAbc3EAfgAIAAAAAHNxAH4ALnNxAH4AMXEAfgAQcQB+ADZ0AAgkY2hl
+ZXNlMXNxAH4AAD9AAAAAAAAMdwgAAAAQAAAABXEAfgAhcQB+ACBxAH4AhnEAfgCDcQB+AIhxAH4A
+h3EAfgAccQB+ABtxAH4AjHEAfgCJeHBzcQB+AEZzcQB+AEsAAAACdwQAAAAKc3EAfgBNAAAAAAAA
+AABzcQB+AEsAAAADdwQAAAAEcQB+AIdzcQB+AFBxAH4APnNxAH4AVHEAfgBbc3EAfgBlcQB+AGhx
+AH4AIHhxAH4AiXEAfgCLc3EAfgBNAAAAAQAAAABzcQB+AEsAAAADdwQAAAAEc3EAfgBrcQB+AD5z
+cQB+AG4AAAAAcQB+AIdxAH4AW3VxAH4AFQAAAAFxAH4Ah3EAfgAbcQB+ABp4cQB+AINxAH4AhXh0
+ACB0aHJlZSBjb2x1bW5zIHdpdGggY29uc3RyYWludHMgMnB4</byte-array>
         </org.drools.rule.PackageCompilationData>
         <string>org.drools.compiler</string>
         <list>
@@ -355,60 +367,73 @@
 bHMucnVsZS5EZWNsYXJhdGlvbjv1p88LNGgp4wIAAHhwAAAABXNyABtvcmcuZHJvb2xzLnJ1bGUu
 RGVjbGFyYXRpb24DczwB8iDr1gIAA0kABmNvbHVtbkwACWV4dHJhY3RvcnQAGkxvcmcvZHJvb2xz
 L3NwaS9FeHRyYWN0b3I7TAAKaWRlbnRpZmllcnEAfgAFeHAAAAAAc3IAI29yZy5kcm9vbHMuYmFz
-ZS5DbGFzc0ZpZWxkRXh0cmFjdG9yGeJAAYkQ8aMCAAJMAAVjbGF6enQAEUxqYXZhL2xhbmcvQ2xh
+ZS5DbGFzc0ZpZWxkRXh0cmFjdG9yAAAAAAAAAUACAAJMAAVjbGF6enQAEUxqYXZhL2xhbmcvQ2xh
 c3M7TAAJZmllbGROYW1lcQB+AAV4cHZyABFvcmcuZHJvb2xzLkNoZWVzZe+FAhE7Rf31AgACSQAF
 cHJpY2VMAAR0eXBlcQB+AAV4cHQABXByaWNldAAHJHByaWNlMXNxAH4AEQAAAAFzcgAeb3JnLmRy
 b29scy5zcGkuQ29sdW1uRXh0cmFjdG9yfa0D3zT82ZwCAAFMAApvYmplY3RUeXBldAAbTG9yZy9k
 cm9vbHMvc3BpL09iamVjdFR5cGU7eHBzcgAfb3JnLmRyb29scy5iYXNlLkNsYXNzT2JqZWN0VHlw
-Zdzs2BfUlPv9AgACSQAJdmFsdWVUeXBlTAAPb2JqZWN0VHlwZUNsYXNzcQB+ABV4cAAAANJxAH4A
-GHQACCRjaGVlc2Uyc3EAfgARAAAAAHNxAH4AFHEAfgAYdAAEdHlwZXQABSR0eXBlc3EAfgARAAAA
-AXEAfgAWdAAHJHByaWNlMnNxAH4AEQAAAABzcQB+ABxzcQB+AB8AAADScQB+ABh0AAgkY2hlZXNl
-MXNxAH4AAT9AAAAAAAAMdwgAAAAQAAAABXEAfgAacQB+ABNxAH4AIXEAfgAbcQB+ACVxAH4AInEA
-fgAncQB+ACZxAH4AK3EAfgAoeHBzcgATb3JnLmRyb29scy5ydWxlLkFuZPz45yLwpsN2AgAAeHIA
-HG9yZy5kcm9vbHMucnVsZS5Hcm91cEVsZW1lbnTG3JO/b7XpWAIAAUwACGNoaWxkcmVudAAQTGph
-dmEvdXRpbC9MaXN0O3hyACJvcmcuZHJvb2xzLnJ1bGUuQ29uZGl0aW9uYWxFbGVtZW50xgxz6Wbz
-ojYCAAB4cHNyABNqYXZhLnV0aWwuQXJyYXlMaXN0eIHSHZnHYZ0DAAFJAARzaXpleHAAAAADdwQA
-AAAKc3IAFm9yZy5kcm9vbHMucnVsZS5Db2x1bW5/ObACQK9R5gIABUkABWluZGV4SQAGb2Zmc2V0
-TAALY29uc3RyYWludHNxAH4AL0wAC2RlY2xhcmF0aW9udAAdTG9yZy9kcm9vbHMvcnVsZS9EZWNs
-YXJhdGlvbjtMAApvYmplY3RUeXBlcQB+AB14cAAAAAAAAAAAc3EAfgAyAAAAA3cEAAAABHEAfgAi
-c3IAIW9yZy5kcm9vbHMucnVsZS5MaXRlcmFsQ29uc3RyYWludAOS+tbk+ZKzAgADTAAJZXZhbHVh
-dG9ydAAaTG9yZy9kcm9vbHMvc3BpL0V2YWx1YXRvcjtMAAlleHRyYWN0b3J0AB9Mb3JnL2Ryb29s
-cy9zcGkvRmllbGRFeHRyYWN0b3I7TAAFZmllbGR0ABtMb3JnL2Ryb29scy9zcGkvRmllbGRWYWx1
-ZTt4cHNyAD1vcmcuZHJvb2xzLmJhc2UuZXZhbHVhdG9ycy5TdHJpbmdGYWN0b3J5JFN0cmluZ0Vx
-dWFsRXZhbHVhdG9ySU/lvdDlSJYCAAB4cgAdb3JnLmRyb29scy5iYXNlLkJhc2VFdmFsdWF0b3Ku
-QXGsNOGNawIAAkkACG9wZXJhdG9ySQAEdHlwZXhwAAAAAQAAALRxAH4AI3NyABlvcmcuZHJvb2xz
-LmJhc2UuRmllbGRJbXBsrplN9KzddkQCAAFMAAV2YWx1ZXQAEkxqYXZhL2xhbmcvT2JqZWN0O3hw
-dAAHY2hlZGRhcnEAfgATeHEAfgAocQB+ACpzcQB+ADQAAAABAAAAAHNxAH4AMgAAAAN3BAAAAARz
-cgAnb3JnLmRyb29scy5ydWxlLkJvdW5kVmFyaWFibGVDb25zdHJhaW50cPrUgF/+1lcCAAVJAAZj
-b2x1bW5MAAtkZWNsYXJhdGlvbnEAfgA1TAAJZXZhbHVhdG9ycQB+ADlMAA5maWVsZEV4dHJhY3Rv
-cnEAfgA6WwAUcmVxdWlyZWREZWNsYXJhdGlvbnNxAH4AB3hwAAAAAHEAfgAicQB+AD9xAH4AI3Vx
-AH4ADwAAAAFxAH4AInEAfgAmc3IAI29yZy5kcm9vbHMucnVsZS5QcmVkaWNhdGVDb25zdHJhaW50
-/pCPpiJbhzgCAANMAAtkZWNsYXJhdGlvbnEAfgA1TAAKZXhwcmVzc2lvbnQAJExvcmcvZHJvb2xz
+Zdzs2BfUlPv9AgACTAAPb2JqZWN0VHlwZUNsYXNzcQB+ABVMAAl2YWx1ZVR5cGV0ABtMb3JnL2Ry
+b29scy9iYXNlL1ZhbHVlVHlwZTt4cHEAfgAYc3IAGW9yZy5kcm9vbHMuYmFzZS5WYWx1ZVR5cGUA
+AAAAAAABQAIAA0wACWNsYXNzVHlwZXEAfgAVTAAQZXZhbHVhdG9yRmFjdG9yeXQALUxvcmcvZHJv
+b2xzL2Jhc2UvZXZhbHVhdG9ycy9FdmFsdWF0b3JGYWN0b3J5O0wABG5hbWVxAH4ABXhwdnIAEGph
+dmEubGFuZy5PYmplY3QAAAAAAAAAAAAAAHhwc3IAKG9yZy5kcm9vbHMuYmFzZS5ldmFsdWF0b3Jz
+Lk9iamVjdEZhY3RvcnmJYnOb3hlWOQIAAHhwdAAGT2JqZWN0dAAIJGNoZWVzZTJzcQB+ABEAAAAA
+c3EAfgAUcQB+ABh0AAR0eXBldAAFJHR5cGVzcQB+ABEAAAABcQB+ABZ0AAckcHJpY2Uyc3EAfgAR
+AAAAAHNxAH4AHHNxAH4AH3EAfgAYcQB+ACR0AAgkY2hlZXNlMXNxAH4AAT9AAAAAAAAMdwgAAAAQ
+AAAABXEAfgAacQB+ABNxAH4AKnEAfgAbcQB+AC5xAH4AK3EAfgAwcQB+AC9xAH4ANHEAfgAxeHBz
+cgATb3JnLmRyb29scy5ydWxlLkFuZPz45yLwpsN2AgAAeHIAHG9yZy5kcm9vbHMucnVsZS5Hcm91
+cEVsZW1lbnTG3JO/b7XpWAIAAUwACGNoaWxkcmVudAAQTGphdmEvdXRpbC9MaXN0O3hyACJvcmcu
+ZHJvb2xzLnJ1bGUuQ29uZGl0aW9uYWxFbGVtZW50xgxz6WbzojYCAAB4cHNyABNqYXZhLnV0aWwu
+QXJyYXlMaXN0eIHSHZnHYZ0DAAFJAARzaXpleHAAAAADdwQAAAAKc3IAFm9yZy5kcm9vbHMucnVs
+ZS5Db2x1bW5/ObACQK9R5gIABUkABWluZGV4SQAGb2Zmc2V0TAALY29uc3RyYWludHNxAH4AOEwA
+C2RlY2xhcmF0aW9udAAdTG9yZy9kcm9vbHMvcnVsZS9EZWNsYXJhdGlvbjtMAApvYmplY3RUeXBl
+cQB+AB14cAAAAAAAAAAAc3EAfgA7AAAAA3cEAAAABHEAfgArc3IAIW9yZy5kcm9vbHMucnVsZS5M
+aXRlcmFsQ29uc3RyYWludAAAAAAAAAFAAgACTAAJZXh0cmFjdG9ydAAfTG9yZy9kcm9vbHMvc3Bp
+L0ZpZWxkRXh0cmFjdG9yO0wAC3Jlc3RyaWN0aW9udAAkTG9yZy9kcm9vbHMvcnVsZS9MaXRlcmFs
+UmVzdHJpY3Rpb247eHBxAH4ALHNyACJvcmcuZHJvb2xzLnJ1bGUuTGl0ZXJhbFJlc3RyaWN0aW9u
+AAAAAAAAAUACAAJMAAlldmFsdWF0b3J0ABpMb3JnL2Ryb29scy9zcGkvRXZhbHVhdG9yO0wABWZp
+ZWxkdAAbTG9yZy9kcm9vbHMvc3BpL0ZpZWxkVmFsdWU7eHBzcgA9b3JnLmRyb29scy5iYXNlLmV2
+YWx1YXRvcnMuU3RyaW5nRmFjdG9yeSRTdHJpbmdFcXVhbEV2YWx1YXRvcgAAAAAAAAFAAgAAeHIA
+HW9yZy5kcm9vbHMuYmFzZS5CYXNlRXZhbHVhdG9yVSSLs2Wsrn8CAAJMAAhvcGVyYXRvcnQAJUxv
+cmcvZHJvb2xzL2Jhc2UvZXZhbHVhdG9ycy9PcGVyYXRvcjtMAAR0eXBlcQB+ACB4cHNyACNvcmcu
+ZHJvb2xzLmJhc2UuZXZhbHVhdG9ycy5PcGVyYXRvcgAAAAAAAAFAAgABTAAIb3BlcmF0b3JxAH4A
+BXhwdAACPT1zcQB+ACJ2cgAQamF2YS5sYW5nLlN0cmluZ6DwpDh6O7NCAgAAeHBzcgAob3JnLmRy
+b29scy5iYXNlLmV2YWx1YXRvcnMuU3RyaW5nRmFjdG9yeeeM/6nABRq+AgAAeHB0AAZTdHJpbmdz
+cgAZb3JnLmRyb29scy5iYXNlLkZpZWxkSW1wbAAAAAAAAAFAAgABTAAFdmFsdWV0ABJMamF2YS9s
+YW5nL09iamVjdDt4cHQAB2NoZWRkYXJxAH4AE3hxAH4AMXEAfgAzc3EAfgA9AAAAAQAAAABzcQB+
+ADsAAAADdwQAAAAEc3IAIm9yZy5kcm9vbHMucnVsZS5WYXJpYWJsZUNvbnN0cmFpbnQAAAAAAAAB
+QAIAAkwADmZpZWxkRXh0cmFjdG9ycQB+AEJMAAtyZXN0cmljdGlvbnQAJUxvcmcvZHJvb2xzL3J1
+bGUvVmFyaWFibGVSZXN0cmljdGlvbjt4cHEAfgAsc3IAI29yZy5kcm9vbHMucnVsZS5WYXJpYWJs
+ZVJlc3RyaWN0aW9uAAAAAAAAAUACAARJAAZjb2x1bW5MAAtkZWNsYXJhdGlvbnEAfgA+TAAJZXZh
+bHVhdG9ycQB+AEZbABRyZXF1aXJlZERlY2xhcmF0aW9uc3EAfgAHeHAAAAAAcQB+ACtxAH4ATHVx
+AH4ADwAAAAFxAH4AK3EAfgAvc3IAI29yZy5kcm9vbHMucnVsZS5QcmVkaWNhdGVDb25zdHJhaW50
+/pCPpiJbhzgCAANMAAtkZWNsYXJhdGlvbnEAfgA+TAAKZXhwcmVzc2lvbnQAJExvcmcvZHJvb2xz
 L3NwaS9QcmVkaWNhdGVFeHByZXNzaW9uO1sAFHJlcXVpcmVkRGVjbGFyYXRpb25zcQB+AAd4cHEA
-fgAmc3IATG9yZy5kcm9vbHMuY29tcGlsZXIuUnVsZV90aHJlZV9jb2x1bW5zX3dpdGhfY29uc3Ry
+fgAvc3IATG9yZy5kcm9vbHMuY29tcGlsZXIuUnVsZV90aHJlZV9jb2x1bW5zX3dpdGhfY29uc3Ry
 YWludHNfMV8wUHJlZGljYXRlMEludm9rZXJuXqy++rNzagIAAHhwdXEAfgAPAAAAAXEAfgATeHEA
-fgAbcQB+ACBzcQB+ADQAAAACAAAAAHNxAH4AMgAAAAF3BAAAAAFzcQB+AEYAAAAAcQB+ACJxAH4A
-P3NxAH4AFHZyABFvcmcuZHJvb2xzLlBlcnNvbiSkLwIXn7hmAgAISQADYWdlWgAFYWxpdmVDAANz
-ZXhMAApiaWdEZWNpbWFsdAAWTGphdmEvbWF0aC9CaWdEZWNpbWFsO0wACmJpZ0ludGVnZXJ0ABZM
-amF2YS9tYXRoL0JpZ0ludGVnZXI7TAAFbGlrZXNxAH4ABUwABG5hbWVxAH4ABUwABnN0YXR1c3EA
-fgAFeHB0AARuYW1ldXEAfgAPAAAAAXEAfgAieHBzcQB+AB8AAADScQB+AFZ4cQB+AANwdAAgdGhy
-ZWUgY29sdW1ucyB3aXRoIGNvbnN0cmFpbnRzIDJzcQB+AAQAAAAAAAAAAAIAAAAAAAFwcQB+AAxz
-cgBNb3JnLmRyb29scy5jb21waWxlci5SdWxlX3RocmVlX2NvbHVtbnNfd2l0aF9jb25zdHJhaW50
-c18yXzBDb25zZXF1ZW5jZUludm9rZXJuXqy++rNzagIAAHhwdXEAfgAPAAAABXNxAH4AEQAAAABx
-AH4AFnQAByRwcmljZTFzcQB+ABEAAAABc3EAfgAcc3EAfgAfAAAA0nEAfgAYdAAIJGNoZWVzZTJz
-cQB+ABEAAAAAcQB+ACN0AAUkdHlwZXNxAH4AEQAAAAFxAH4AFnQAByRwcmljZTJzcQB+ABEAAAAA
-c3EAfgAcc3EAfgAfAAAA0nEAfgAYdAAIJGNoZWVzZTFzcQB+AAE/QAAAAAAADHcIAAAAEAAAAAVx
-AH4AYHEAfgBfcQB+AGRxAH4AYXEAfgBmcQB+AGVxAH4AaHEAfgBncQB+AGxxAH4AaXhwc3EAfgAt
-c3EAfgAyAAAAAncEAAAACnNxAH4ANAAAAAAAAAAAc3EAfgAyAAAAA3cEAAAABHEAfgBlc3EAfgA4
-cQB+AD9xAH4AI3NxAH4AQHEAfgBDcQB+AF94cQB+AGlxAH4Aa3NxAH4ANAAAAAEAAAAAc3EAfgAy
-AAAAA3cEAAAABHNxAH4ARgAAAABxAH4AZXEAfgA/cQB+ACN1cQB+AA8AAAABcQB+AGVxAH4AZ3Nx
-AH4ASXEAfgBnc3IATG9yZy5kcm9vbHMuY29tcGlsZXIuUnVsZV90aHJlZV9jb2x1bW5zX3dpdGhf
-Y29uc3RyYWludHNfMl8wUHJlZGljYXRlMEludm9rZXJuXqy++rNzagIAAHhwdXEAfgAPAAAAAXEA
-fgBfeHEAfgBhcQB+AGN4cQB+AFpweAA=</byte-array>
+fgAbcQB+ACFzcQB+AD0AAAACAAAAAHNxAH4AOwAAAAF3BAAAAAFzcQB+AFxzcQB+ABR2cgARb3Jn
+LmRyb29scy5QZXJzb24kpC8CF5+4ZgIACUkAA2FnZVoABWFsaXZlQwADc2V4TAAKYmlnRGVjaW1h
+bHQAFkxqYXZhL21hdGgvQmlnRGVjaW1hbDtMAApiaWdJbnRlZ2VydAAWTGphdmEvbWF0aC9CaWdJ
+bnRlZ2VyO0wABGhhaXJxAH4ABUwABWxpa2VzcQB+AAVMAARuYW1lcQB+AAVMAAZzdGF0dXNxAH4A
+BXhwdAAEbmFtZXNxAH4AXwAAAABxAH4AK3EAfgBMdXEAfgAPAAAAAXEAfgAreHBzcQB+AB9xAH4A
+b3EAfgAkeHEAfgADcHQAIHRocmVlIGNvbHVtbnMgd2l0aCBjb25zdHJhaW50cyAyc3EAfgAEAAAA
+AAAAAAACAAAAAAABcHEAfgAMc3IATW9yZy5kcm9vbHMuY29tcGlsZXIuUnVsZV90aHJlZV9jb2x1
+bW5zX3dpdGhfY29uc3RyYWludHNfMl8wQ29uc2VxdWVuY2VJbnZva2Vybl6svvqzc2oCAAB4cHVx
+AH4ADwAAAAVzcQB+ABEAAAAAcQB+ABZ0AAckcHJpY2Uxc3EAfgARAAAAAXNxAH4AHHNxAH4AH3EA
+fgAYcQB+ACR0AAgkY2hlZXNlMnNxAH4AEQAAAABxAH4ALHQABSR0eXBlc3EAfgARAAAAAXEAfgAW
+dAAHJHByaWNlMnNxAH4AEQAAAABzcQB+ABxzcQB+AB9xAH4AGHEAfgAkdAAIJGNoZWVzZTFzcQB+
+AAE/QAAAAAAADHcIAAAAEAAAAAVxAH4AenEAfgB5cQB+AH5xAH4Ae3EAfgCAcQB+AH9xAH4AgnEA
+fgCBcQB+AIZxAH4Ag3hwc3EAfgA2c3EAfgA7AAAAAncEAAAACnNxAH4APQAAAAAAAAAAc3EAfgA7
+AAAAA3cEAAAABHEAfgB/c3EAfgBBcQB+ACxzcQB+AEVxAH4ATHNxAH4AVnEAfgBZcQB+AHl4cQB+
+AINxAH4AhXNxAH4APQAAAAEAAAAAc3EAfgA7AAAAA3cEAAAABHNxAH4AXHEAfgAsc3EAfgBfAAAA
+AHEAfgB/cQB+AEx1cQB+AA8AAAABcQB+AH9xAH4AgXNxAH4AYnEAfgCBc3IATG9yZy5kcm9vbHMu
+Y29tcGlsZXIuUnVsZV90aHJlZV9jb2x1bW5zX3dpdGhfY29uc3RyYWludHNfMl8wUHJlZGljYXRl
+MEludm9rZXJuXqy++rNzagIAAHhwdXEAfgAPAAAAAXEAfgB5eHEAfgB7cQB+AH14cQB+AHRweAA=
+</byte-array>
       </org.drools.rule.Package>
     </entry>
   </map>
-  <byte-array>rO0ABXQAJDNhYzNhMzdlLWY0ZmMtNGQzMi1iNGVlLTkwYjY4OWMyNjcyN3NyAClvcmcuZHJvb2xz
+  <byte-array>rO0ABXQAJDFkMDU1YmY2LTEyZGUtNGU0My04ZWYyLTI0MzA2NTVkNzU0ZnNyAClvcmcuZHJvb2xz
 LnJldGVvby5SZXRlb29GYWN0SGFuZGxlRmFjdG9yeQAAAAAAAAEsAgAAeHIAK29yZy5kcm9vbHMu
 Y29tbW9uLkFic3RyYWN0RmFjdEhhbmRsZUZhY3RvcnlrwcaUre4SdAIAA0oAB2NvdW50ZXJKAAJp
 ZEwADmZhY3RIYW5kbGVQb29sdAAkTG9yZy9kcm9vbHMvdXRpbC9QcmltaXRpdmVMb25nU3RhY2s7
@@ -496,86 +521,99 @@
 ZS5EZWNsYXJhdGlvbjv1p88LNGgp4wIAAHhwAAAABXNyABtvcmcuZHJvb2xzLnJ1bGUuRGVjbGFy
 YXRpb24DczwB8iDr1gIAA0kABmNvbHVtbkwACWV4dHJhY3RvcnQAGkxvcmcvZHJvb2xzL3NwaS9F
 eHRyYWN0b3I7TAAKaWRlbnRpZmllcnEAfgA9eHAAAAAAc3IAI29yZy5kcm9vbHMuYmFzZS5DbGFz
-c0ZpZWxkRXh0cmFjdG9yGeJAAYkQ8aMCAAJMAAVjbGF6enQAEUxqYXZhL2xhbmcvQ2xhc3M7TAAJ
+c0ZpZWxkRXh0cmFjdG9yAAAAAAAAAUACAAJMAAVjbGF6enQAEUxqYXZhL2xhbmcvQ2xhc3M7TAAJ
 ZmllbGROYW1lcQB+AD14cHZyABFvcmcuZHJvb2xzLkNoZWVzZe+FAhE7Rf31AgACSQAFcHJpY2VM
 AAR0eXBlcQB+AD14cHQABXByaWNldAAHJHByaWNlMXNxAH4ASAAAAAFzcgAeb3JnLmRyb29scy5z
 cGkuQ29sdW1uRXh0cmFjdG9yfa0D3zT82ZwCAAFMAApvYmplY3RUeXBlcQB+ACh4cHNyAB9vcmcu
-ZHJvb2xzLmJhc2UuQ2xhc3NPYmplY3RUeXBl3OzYF9SU+/0CAAJJAAl2YWx1ZVR5cGVMAA9vYmpl
-Y3RUeXBlQ2xhc3NxAH4ATHhwAAAA0nEAfgBPdAAIJGNoZWVzZTJzcQB+AEgAAAAAc3EAfgBLcQB+
-AE90AAR0eXBldAAFJHR5cGVzcQB+AEgAAAABcQB+AE10AAckcHJpY2Uyc3EAfgBIAAAAAHNxAH4A
-U3NxAH4AVQAAANJxAH4AT3QACCRjaGVlc2Uxc3EAfgANP0AAAAAAAAx3CAAAABAAAAAFcQB+AFFx
-AH4ASnEAfgBXcQB+AFJxAH4AW3EAfgBYcQB+AF1xAH4AXHEAfgBhcQB+AF54cHNyABNvcmcuZHJv
-b2xzLnJ1bGUuQW5k/PjnIvCmw3YCAAB4cgAcb3JnLmRyb29scy5ydWxlLkdyb3VwRWxlbWVudMbc
-k79vtelYAgABTAAIY2hpbGRyZW5xAH4ALHhyACJvcmcuZHJvb2xzLnJ1bGUuQ29uZGl0aW9uYWxF
-bGVtZW50xgxz6WbzojYCAAB4cHNxAH4AJQAAAAN3BAAAAApzcgAWb3JnLmRyb29scy5ydWxlLkNv
-bHVtbn85sAJAr1HmAgAFSQAFaW5kZXhJAAZvZmZzZXRMAAtjb25zdHJhaW50c3EAfgAsTAALZGVj
-bGFyYXRpb250AB1Mb3JnL2Ryb29scy9ydWxlL0RlY2xhcmF0aW9uO0wACm9iamVjdFR5cGVxAH4A
-KHhwAAAAAAAAAABzcQB+ACUAAAADdwQAAAAEcQB+AFhzcgAhb3JnLmRyb29scy5ydWxlLkxpdGVy
-YWxDb25zdHJhaW50A5L61uT5krMCAANMAAlldmFsdWF0b3J0ABpMb3JnL2Ryb29scy9zcGkvRXZh
-bHVhdG9yO0wACWV4dHJhY3RvcnQAH0xvcmcvZHJvb2xzL3NwaS9GaWVsZEV4dHJhY3RvcjtMAAVm
-aWVsZHQAG0xvcmcvZHJvb2xzL3NwaS9GaWVsZFZhbHVlO3hwc3IAPW9yZy5kcm9vbHMuYmFzZS5l
-dmFsdWF0b3JzLlN0cmluZ0ZhY3RvcnkkU3RyaW5nRXF1YWxFdmFsdWF0b3JJT+W90OVIlgIAAHhy
-AB1vcmcuZHJvb2xzLmJhc2UuQmFzZUV2YWx1YXRvcq5Bcaw04Y1rAgACSQAIb3BlcmF0b3JJAAR0
-eXBleHAAAAABAAAAtHEAfgBZc3IAGW9yZy5kcm9vbHMuYmFzZS5GaWVsZEltcGyumU30rN12RAIA
-AUwABXZhbHVldAASTGphdmEvbGFuZy9PYmplY3Q7eHB0AAdjaGVkZGFycQB+AEp4cQB+AF5xAH4A
-YHNxAH4AaAAAAAEAAAAAc3EAfgAlAAAAA3cEAAAABHNyACdvcmcuZHJvb2xzLnJ1bGUuQm91bmRW
-YXJpYWJsZUNvbnN0cmFpbnRw+tSAX/7WVwIABUkABmNvbHVtbkwAC2RlY2xhcmF0aW9ucQB+AGlM
-AAlldmFsdWF0b3JxAH4AbUwADmZpZWxkRXh0cmFjdG9ycQB+AG5bABRyZXF1aXJlZERlY2xhcmF0
-aW9uc3EAfgA/eHAAAAAAcQB+AFhxAH4Ac3EAfgBZdXEAfgBGAAAAAXEAfgBYcQB+AFxzcgAjb3Jn
+ZHJvb2xzLmJhc2UuQ2xhc3NPYmplY3RUeXBl3OzYF9SU+/0CAAJMAA9vYmplY3RUeXBlQ2xhc3Nx
+AH4ATEwACXZhbHVlVHlwZXQAG0xvcmcvZHJvb2xzL2Jhc2UvVmFsdWVUeXBlO3hwcQB+AE9zcgAZ
+b3JnLmRyb29scy5iYXNlLlZhbHVlVHlwZQAAAAAAAAFAAgADTAAJY2xhc3NUeXBlcQB+AExMABBl
+dmFsdWF0b3JGYWN0b3J5dAAtTG9yZy9kcm9vbHMvYmFzZS9ldmFsdWF0b3JzL0V2YWx1YXRvckZh
+Y3Rvcnk7TAAEbmFtZXEAfgA9eHB2cgAQamF2YS5sYW5nLk9iamVjdAAAAAAAAAAAAAAAeHBzcgAo
+b3JnLmRyb29scy5iYXNlLmV2YWx1YXRvcnMuT2JqZWN0RmFjdG9yeYlic5veGVY5AgAAeHB0AAZP
+YmplY3R0AAgkY2hlZXNlMnNxAH4ASAAAAABzcQB+AEtxAH4AT3QABHR5cGV0AAUkdHlwZXNxAH4A
+SAAAAAFxAH4ATXQAByRwcmljZTJzcQB+AEgAAAAAc3EAfgBTc3EAfgBVcQB+AE9xAH4AWnQACCRj
+aGVlc2Uxc3EAfgANP0AAAAAAAAx3CAAAABAAAAAFcQB+AFFxAH4ASnEAfgBgcQB+AFJxAH4AZHEA
+fgBhcQB+AGZxAH4AZXEAfgBqcQB+AGd4cHNyABNvcmcuZHJvb2xzLnJ1bGUuQW5k/PjnIvCmw3YC
+AAB4cgAcb3JnLmRyb29scy5ydWxlLkdyb3VwRWxlbWVudMbck79vtelYAgABTAAIY2hpbGRyZW5x
+AH4ALHhyACJvcmcuZHJvb2xzLnJ1bGUuQ29uZGl0aW9uYWxFbGVtZW50xgxz6WbzojYCAAB4cHNx
+AH4AJQAAAAN3BAAAAApzcgAWb3JnLmRyb29scy5ydWxlLkNvbHVtbn85sAJAr1HmAgAFSQAFaW5k
+ZXhJAAZvZmZzZXRMAAtjb25zdHJhaW50c3EAfgAsTAALZGVjbGFyYXRpb250AB1Mb3JnL2Ryb29s
+cy9ydWxlL0RlY2xhcmF0aW9uO0wACm9iamVjdFR5cGVxAH4AKHhwAAAAAAAAAABzcQB+ACUAAAAD
+dwQAAAAEcQB+AGFzcgAhb3JnLmRyb29scy5ydWxlLkxpdGVyYWxDb25zdHJhaW50AAAAAAAAAUAC
+AAJMAAlleHRyYWN0b3J0AB9Mb3JnL2Ryb29scy9zcGkvRmllbGRFeHRyYWN0b3I7TAALcmVzdHJp
+Y3Rpb250ACRMb3JnL2Ryb29scy9ydWxlL0xpdGVyYWxSZXN0cmljdGlvbjt4cHEAfgBic3IAIm9y
+Zy5kcm9vbHMucnVsZS5MaXRlcmFsUmVzdHJpY3Rpb24AAAAAAAABQAIAAkwACWV2YWx1YXRvcnQA
+GkxvcmcvZHJvb2xzL3NwaS9FdmFsdWF0b3I7TAAFZmllbGR0ABtMb3JnL2Ryb29scy9zcGkvRmll
+bGRWYWx1ZTt4cHNyAD1vcmcuZHJvb2xzLmJhc2UuZXZhbHVhdG9ycy5TdHJpbmdGYWN0b3J5JFN0
+cmluZ0VxdWFsRXZhbHVhdG9yAAAAAAAAAUACAAB4cgAdb3JnLmRyb29scy5iYXNlLkJhc2VFdmFs
+dWF0b3JVJIuzZayufwIAAkwACG9wZXJhdG9ydAAlTG9yZy9kcm9vbHMvYmFzZS9ldmFsdWF0b3Jz
+L09wZXJhdG9yO0wABHR5cGVxAH4AVnhwc3IAI29yZy5kcm9vbHMuYmFzZS5ldmFsdWF0b3JzLk9w
+ZXJhdG9yAAAAAAAAAUACAAFMAAhvcGVyYXRvcnEAfgA9eHB0AAI9PXNxAH4AWHZyABBqYXZhLmxh
+bmcuU3RyaW5noPCkOHo7s0ICAAB4cHNyAChvcmcuZHJvb2xzLmJhc2UuZXZhbHVhdG9ycy5TdHJp
+bmdGYWN0b3J554z/qcAFGr4CAAB4cHQABlN0cmluZ3NyABlvcmcuZHJvb2xzLmJhc2UuRmllbGRJ
+bXBsAAAAAAAAAUACAAFMAAV2YWx1ZXQAEkxqYXZhL2xhbmcvT2JqZWN0O3hwdAAHY2hlZGRhcnEA
+fgBKeHEAfgBncQB+AGlzcQB+AHEAAAABAAAAAHNxAH4AJQAAAAN3BAAAAARzcgAib3JnLmRyb29s
+cy5ydWxlLlZhcmlhYmxlQ29uc3RyYWludAAAAAAAAAFAAgACTAAOZmllbGRFeHRyYWN0b3JxAH4A
+dkwAC3Jlc3RyaWN0aW9udAAlTG9yZy9kcm9vbHMvcnVsZS9WYXJpYWJsZVJlc3RyaWN0aW9uO3hw
+cQB+AGJzcgAjb3JnLmRyb29scy5ydWxlLlZhcmlhYmxlUmVzdHJpY3Rpb24AAAAAAAABQAIABEkA
+BmNvbHVtbkwAC2RlY2xhcmF0aW9ucQB+AHJMAAlldmFsdWF0b3JxAH4AelsAFHJlcXVpcmVkRGVj
+bGFyYXRpb25zcQB+AD94cAAAAABxAH4AYXEAfgCAdXEAfgBGAAAAAXEAfgBhcQB+AGVzcgAjb3Jn
 LmRyb29scy5ydWxlLlByZWRpY2F0ZUNvbnN0cmFpbnT+kI+mIluHOAIAA0wAC2RlY2xhcmF0aW9u
-cQB+AGlMAApleHByZXNzaW9udAAkTG9yZy9kcm9vbHMvc3BpL1ByZWRpY2F0ZUV4cHJlc3Npb247
-WwAUcmVxdWlyZWREZWNsYXJhdGlvbnNxAH4AP3hwcQB+AFxzcgBMb3JnLmRyb29scy5jb21waWxl
+cQB+AHJMAApleHByZXNzaW9udAAkTG9yZy9kcm9vbHMvc3BpL1ByZWRpY2F0ZUV4cHJlc3Npb247
+WwAUcmVxdWlyZWREZWNsYXJhdGlvbnNxAH4AP3hwcQB+AGVzcgBMb3JnLmRyb29scy5jb21waWxl
 ci5SdWxlX3RocmVlX2NvbHVtbnNfd2l0aF9jb25zdHJhaW50c18xXzBQcmVkaWNhdGUwSW52b2tl
-cm5erL76s3NqAgAAeHB1cQB+AEYAAAABcQB+AEp4cQB+AFJxAH4AVnNxAH4AaAAAAAIAAAAAc3EA
-fgAlAAAAAXcEAAAAAXNxAH4AegAAAABxAH4AWHEAfgBzc3EAfgBLdnIAEW9yZy5kcm9vbHMuUGVy
-c29uJKQvAhefuGYCAAhJAANhZ2VaAAVhbGl2ZUMAA3NleEwACmJpZ0RlY2ltYWx0ABZMamF2YS9t
-YXRoL0JpZ0RlY2ltYWw7TAAKYmlnSW50ZWdlcnQAFkxqYXZhL21hdGgvQmlnSW50ZWdlcjtMAAVs
-aWtlc3EAfgA9TAAEbmFtZXEAfgA9TAAGc3RhdHVzcQB+AD14cHQABG5hbWV1cQB+AEYAAAABcQB+
-AFh4cHNxAH4AVQAAANJxAH4Ainh0ACB0aHJlZSBjb2x1bW5zIHdpdGggY29uc3RyYWludHMgMXBx
-AH4AN3hzcgAgb3JnLmRyb29scy5jb21tb24uQmV0YU5vZGVCaW5kZXLZOk2QQfBaswIAAVsAC2Nv
-bnN0cmFpbnRzdAAhW0xvcmcvZHJvb2xzL3NwaS9GaWVsZENvbnN0cmFpbnQ7eHB1cgAhW0xvcmcu
-ZHJvb2xzLnNwaS5GaWVsZENvbnN0cmFpbnQ7mvaX9rRKD8YCAAB4cAAAAAFxAH4AhXNxAH4AMQAA
-AAAABAAAAAFzcQB+ACUAAAACdwQAAAACcQB+ADdzcQB+ADkAAAAAAAgAAAAAc3EAfgA8AAAAAAAA
-AAACAAAAAAABcHEAfgBDc3IATW9yZy5kcm9vbHMuY29tcGlsZXIuUnVsZV90aHJlZV9jb2x1bW5z
-X3dpdGhfY29uc3RyYWludHNfMl8wQ29uc2VxdWVuY2VJbnZva2Vybl6svvqzc2oCAAB4cHVxAH4A
-RgAAAAVzcQB+AEgAAAAAcQB+AE10AAckcHJpY2Uxc3EAfgBIAAAAAXNxAH4AU3NxAH4AVQAAANJx
-AH4AT3QACCRjaGVlc2Uyc3EAfgBIAAAAAHEAfgBZdAAFJHR5cGVzcQB+AEgAAAABcQB+AE10AAck
-cHJpY2Uyc3EAfgBIAAAAAHNxAH4AU3NxAH4AVQAAANJxAH4AT3QACCRjaGVlc2Uxc3EAfgANP0AA
-AAAAAAx3CAAAABAAAAAFcQB+AJxxAH4Am3EAfgCgcQB+AJ1xAH4AonEAfgChcQB+AKRxAH4Ao3EA
-fgCocQB+AKV4cHNxAH4AY3NxAH4AJQAAAAJ3BAAAAApzcQB+AGgAAAAAAAAAAHNxAH4AJQAAAAN3
-BAAAAARxAH4AoXNxAH4AbHEAfgBzcQB+AFlzcQB+AHRxAH4Ad3EAfgCbeHEAfgClcQB+AKdzcQB+
-AGgAAAABAAAAAHNxAH4AJQAAAAN3BAAAAARzcQB+AHoAAAAAcQB+AKFxAH4Ac3EAfgBZdXEAfgBG
-AAAAAXEAfgChcQB+AKNzcQB+AH1xAH4Ao3NyAExvcmcuZHJvb2xzLmNvbXBpbGVyLlJ1bGVfdGhy
-ZWVfY29sdW1uc193aXRoX2NvbnN0cmFpbnRzXzJfMFByZWRpY2F0ZTBJbnZva2Vybl6svvqzc2oC
-AAB4cHVxAH4ARgAAAAFxAH4Am3hxAH4AnXEAfgCfeHQAIHRocmVlIGNvbHVtbnMgd2l0aCBjb25z
-dHJhaW50cyAycHEAfgCUeHNxAH4Aj3VxAH4AkgAAAANzcgAtb3JnLmRyb29scy5jb21tb24uSW5z
-dGFuY2VOb3RFcXVhbHNDb25zdHJhaW50u86LzZRlbJsCAAJJAAtvdGhlckNvbHVtblsADGRlY2xh
-cmF0aW9uc3EAfgA/eHAAAAAAdXEAfgBGAAAAAHEAfgB7cQB+AH9zcgAmb3JnLmRyb29scy5yZXRl
-b28uTGVmdElucHV0QWRhcHRlck5vZGVmYbm/CjpSNAIAAkwABmJpbmRlcnEAfgAzTAAMb2JqZWN0
-U291cmNlcQB+ADV4cQB+ADYAAQAAAAMAAAABc3EAfgAlAAAAAXcEAAAAAXEAfgCUeHNxAH4Aj3Vx
-AH4AkgAAAABzcgAbb3JnLmRyb29scy5yZXRlb28uQWxwaGFOb2RlfATd0T3MWuYCAAJMAApjb25z
-dHJhaW50dAAgTG9yZy9kcm9vbHMvc3BpL0ZpZWxkQ29uc3RyYWludDtMAAxvYmplY3RTb3VyY2Vx
-AH4ANXhxAH4AIAABAAAAAgAAAAFzcQB+ACQAAAABdwQAAAABcQB+AL94cQB+AHBzcQB+ACcAAQAA
-AAEAAAADc3EAfgArc3EAfgANP0AAAAAAAAx3CAAAABAAAAABc3IAIW9yZy5kcm9vbHMucmV0ZW9v
-LkFscGhhTm9kZVN3aXRjaDGboVVzvIvyAgACTAALYWxwaGFTd2l0Y2hxAH4AEEwACmNvbnN0cmFp
-bnR0ACNMb3JnL2Ryb29scy9ydWxlL0xpdGVyYWxDb25zdHJhaW50O3hwc3EAfgANP0AAAAAAAAx3
-CAAAABAAAAABcQB+AHdxAH4AxXhxAH4AcHEAfgDMeHNxAH4AJQAAAAF3BAAAAAFxAH4AxXhxAH4A
-lHNxAH4AJQAAAAF3BAAAAAFxAH4AlHhxAH4AYHEAfgAjcQB+AMdxAH4AKnNxAH4AJQAAAAF3BAAA
-AAFxAH4AN3hxAH4AjXEAfgAjc3EAfgANP0AAAAAAAAx3CAAAABAAAAACcQB+AI1xAH4AKnEAfgBg
-cQB+AMd4c3IAJm9yZy5kcm9vbHMuc3BpLkNsYXNzT2JqZWN0VHlwZVJlc29sdmVyAoTY/HCxsOsC
-AAFMAApvYmplY3RUeXBldABDTG9yZy9kcm9vbHMvc3BpL0NsYXNzT2JqZWN0VHlwZVJlc29sdmVy
-JE1vZGlmaWVhYmxlQ2xhc3NPYmplY3RUeXBlO3hwc3IAQW9yZy5kcm9vbHMuc3BpLkNsYXNzT2Jq
-ZWN0VHlwZVJlc29sdmVyJE1vZGlmaWVhYmxlQ2xhc3NPYmplY3RUeXBlRKWrlAI3+zUCAAB4cQB+
-AFUAAAEscHNyAB9vcmcuZHJvb2xzLnJldGVvby5SZXRlb29CdWlsZGVyGB1Z+4/IA/ACAAlJABdj
-dXJyZW50T2Zmc2V0QWRqdXN0bWVudEkAAmlkTAANYXR0YWNoZWROb2Rlc3EAfgAQTAAMZGVjbGFy
-YXRpb25zcQB+ABBMAAxvYmplY3RTb3VyY2VxAH4ANUwACm9iamVjdFR5cGVxAH4AEEwACHJlc29s
-dmVycQB+AB9MAAVydWxlc3EAfgAQTAALdHVwbGVTb3VyY2VxAH4ANHhwAAAAAAAAAAlzcQB+AA0/
-QAAAAAAADHcIAAAAEAAAAAZxAH4AKnEAfgAqcQB+AL9xAH4Av3EAfgDFcQB+AMVxAH4AlHEAfgCU
-cQB+ADdxAH4AN3EAfgDHcQB+AMd4c3EAfgANP0AAAAAAAAx3CAAAABAAAAAFcQB+AJxxAH4Am3EA
-fgCgcQB+AJ1xAH4AonEAfgChcQB+AKRxAH4Ao3EAfgCocQB+AKV4cQB+AMdzcgAXamF2YS51dGls
-LkxpbmtlZEhhc2hNYXA0wE5cEGzA+wIAAVoAC2FjY2Vzc09yZGVyeHEAfgANP0AAAAAAAAx3CAAA
-ABAAAAABcQB+AKdzcgARamF2YS5sYW5nLkludGVnZXIS4qCk94GHOAIAAUkABXZhbHVleHIAEGph
-dmEubGFuZy5OdW1iZXKGrJUdC5TgiwIAAHhwAAAAAXgAcQB+ANRzcQB+AA0/QAAAAAAADHcIAAAA
-EAAAAAJxAH4AQnVyAB1bTG9yZy5kcm9vbHMucmV0ZW9vLkJhc2VOb2RlOwvnyZNDnLPqAgAAeHAA
-AAABcQB+ADtxAH4Al3VxAH4A4QAAAAFxAH4AlnhxAH4AlA==</byte-array>
+cm5erL76s3NqAgAAeHB1cQB+AEYAAAABcQB+AEp4cQB+AFJxAH4AV3NxAH4AcQAAAAIAAAAAc3EA
+fgAlAAAAAXcEAAAAAXNxAH4AkHNxAH4AS3ZyABFvcmcuZHJvb2xzLlBlcnNvbiSkLwIXn7hmAgAJ
+SQADYWdlWgAFYWxpdmVDAANzZXhMAApiaWdEZWNpbWFsdAAWTGphdmEvbWF0aC9CaWdEZWNpbWFs
+O0wACmJpZ0ludGVnZXJ0ABZMamF2YS9tYXRoL0JpZ0ludGVnZXI7TAAEaGFpcnEAfgA9TAAFbGlr
+ZXNxAH4APUwABG5hbWVxAH4APUwABnN0YXR1c3EAfgA9eHB0AARuYW1lc3EAfgCTAAAAAHEAfgBh
+cQB+AIB1cQB+AEYAAAABcQB+AGF4cHNxAH4AVXEAfgCjcQB+AFp4dAAgdGhyZWUgY29sdW1ucyB3
+aXRoIGNvbnN0cmFpbnRzIDFwcQB+ADd4c3IAIG9yZy5kcm9vbHMuY29tbW9uLkJldGFOb2RlQmlu
+ZGVy2TpNkEHwWrMCAAFbAAtjb25zdHJhaW50c3QAIVtMb3JnL2Ryb29scy9zcGkvRmllbGRDb25z
+dHJhaW50O3hwdXIAIVtMb3JnLmRyb29scy5zcGkuRmllbGRDb25zdHJhaW50O5r2l/a0Sg/GAgAA
+eHAAAAABcQB+AJ5zcQB+ADEAAAAAAAQAAAABc3EAfgAlAAAAAncEAAAAAnEAfgA3c3EAfgA5AAAA
+AAAIAAAAAHNxAH4APAAAAAAAAAAAAgAAAAAAAXBxAH4AQ3NyAE1vcmcuZHJvb2xzLmNvbXBpbGVy
+LlJ1bGVfdGhyZWVfY29sdW1uc193aXRoX2NvbnN0cmFpbnRzXzJfMENvbnNlcXVlbmNlSW52b2tl
+cm5erL76s3NqAgAAeHB1cQB+AEYAAAAFc3EAfgBIAAAAAHEAfgBNdAAHJHByaWNlMXNxAH4ASAAA
+AAFzcQB+AFNzcQB+AFVxAH4AT3EAfgBadAAIJGNoZWVzZTJzcQB+AEgAAAAAcQB+AGJ0AAUkdHlw
+ZXNxAH4ASAAAAAFxAH4ATXQAByRwcmljZTJzcQB+AEgAAAAAc3EAfgBTc3EAfgBVcQB+AE9xAH4A
+WnQACCRjaGVlc2Uxc3EAfgANP0AAAAAAAAx3CAAAABAAAAAFcQB+ALZxAH4AtXEAfgC6cQB+ALdx
+AH4AvHEAfgC7cQB+AL5xAH4AvXEAfgDCcQB+AL94cHNxAH4AbHNxAH4AJQAAAAJ3BAAAAApzcQB+
+AHEAAAAAAAAAAHNxAH4AJQAAAAN3BAAAAARxAH4Au3NxAH4AdXEAfgBic3EAfgB5cQB+AIBzcQB+
+AIpxAH4AjXEAfgC1eHEAfgC/cQB+AMFzcQB+AHEAAAABAAAAAHNxAH4AJQAAAAN3BAAAAARzcQB+
+AJBxAH4AYnNxAH4AkwAAAABxAH4Au3EAfgCAdXEAfgBGAAAAAXEAfgC7cQB+AL1zcQB+AJZxAH4A
+vXNyAExvcmcuZHJvb2xzLmNvbXBpbGVyLlJ1bGVfdGhyZWVfY29sdW1uc193aXRoX2NvbnN0cmFp
+bnRzXzJfMFByZWRpY2F0ZTBJbnZva2Vybl6svvqzc2oCAAB4cHVxAH4ARgAAAAFxAH4AtXhxAH4A
+t3EAfgC5eHQAIHRocmVlIGNvbHVtbnMgd2l0aCBjb25zdHJhaW50cyAycHEAfgCueHNxAH4AqXVx
+AH4ArAAAAANzcgAtb3JnLmRyb29scy5jb21tb24uSW5zdGFuY2VOb3RFcXVhbHNDb25zdHJhaW50
+u86LzZRlbJsCAAJJAAtvdGhlckNvbHVtblsADGRlY2xhcmF0aW9uc3EAfgA/eHAAAAAAdXEAfgBG
+AAAAAHEAfgCScQB+AJhzcgAmb3JnLmRyb29scy5yZXRlb28uTGVmdElucHV0QWRhcHRlck5vZGVm
+Ybm/CjpSNAIAAkwABmJpbmRlcnEAfgAzTAAMb2JqZWN0U291cmNlcQB+ADV4cQB+ADYAAQAAAAMA
+AAABc3EAfgAlAAAAAXcEAAAAAXEAfgCueHNxAH4AqXVxAH4ArAAAAABzcgAbb3JnLmRyb29scy5y
+ZXRlb28uQWxwaGFOb2RlfATd0T3MWuYCAAJMAApjb25zdHJhaW50dAAgTG9yZy9kcm9vbHMvc3Bp
+L0ZpZWxkQ29uc3RyYWludDtMAAxvYmplY3RTb3VyY2VxAH4ANXhxAH4AIAABAAAAAgAAAAFzcQB+
+ACQAAAABdwQAAAABcQB+ANt4cQB+AHhzcQB+ACcAAQAAAAEAAAADc3EAfgArc3EAfgANP0AAAAAA
+AAx3CAAAABAAAAABc3IAIW9yZy5kcm9vbHMucmV0ZW9vLkFscGhhTm9kZVN3aXRjaDGboVVzvIvy
+AgACTAALYWxwaGFTd2l0Y2hxAH4AEEwACmNvbnN0cmFpbnR0ACNMb3JnL2Ryb29scy9ydWxlL0xp
+dGVyYWxDb25zdHJhaW50O3hwc3EAfgANP0AAAAAAAAx3CAAAABAAAAABcQB+AI1xAH4A4XhxAH4A
+eHEAfgDoeHNxAH4AJQAAAAF3BAAAAAFxAH4A4XhxAH4ArnNxAH4AJQAAAAF3BAAAAAFxAH4Arnhx
+AH4AaXEAfgAjcQB+AONxAH4AKnNxAH4AJQAAAAF3BAAAAAFxAH4AN3hxAH4Ap3EAfgAjc3EAfgAN
+P0AAAAAAAAx3CAAAABAAAAACcQB+AKdxAH4AKnEAfgBpcQB+AON4c3IAJm9yZy5kcm9vbHMuc3Bp
+LkNsYXNzT2JqZWN0VHlwZVJlc29sdmVyAoTY/HCxsOsCAAFMAApvYmplY3RUeXBldABDTG9yZy9k
+cm9vbHMvc3BpL0NsYXNzT2JqZWN0VHlwZVJlc29sdmVyJE1vZGlmaWVhYmxlQ2xhc3NPYmplY3RU
+eXBlO3hwc3IAQW9yZy5kcm9vbHMuc3BpLkNsYXNzT2JqZWN0VHlwZVJlc29sdmVyJE1vZGlmaWVh
+YmxlQ2xhc3NPYmplY3RUeXBlRKWrlAI3+zUCAAB4cQB+AFVwc3EAfgBYcHB0AARudWxsc3IAH29y
+Zy5kcm9vbHMucmV0ZW9vLlJldGVvb0J1aWxkZXIYHVn7j8gD8AIACUkAF2N1cnJlbnRPZmZzZXRB
+ZGp1c3RtZW50SQACaWRMAA1hdHRhY2hlZE5vZGVzcQB+ABBMAAxkZWNsYXJhdGlvbnNxAH4AEEwA
+DG9iamVjdFNvdXJjZXEAfgA1TAAKb2JqZWN0VHlwZXEAfgAQTAAIcmVzb2x2ZXJxAH4AH0wABXJ1
+bGVzcQB+ABBMAAt0dXBsZVNvdXJjZXEAfgA0eHAAAAAAAAAACXNxAH4ADT9AAAAAAAAMdwgAAAAQ
+AAAABnEAfgA3cQB+ADdxAH4AKnEAfgAqcQB+ANtxAH4A23EAfgDhcQB+AOFxAH4ArnEAfgCucQB+
+AONxAH4A43hzcQB+AA0/QAAAAAAADHcIAAAAEAAAAAVxAH4AtnEAfgC1cQB+ALpxAH4At3EAfgC8
+cQB+ALtxAH4AvnEAfgC9cQB+AMJxAH4Av3hxAH4A43NyABdqYXZhLnV0aWwuTGlua2VkSGFzaE1h
+cDTATlwQbMD7AgABWgALYWNjZXNzT3JkZXJ4cQB+AA0/QAAAAAAADHcIAAAAEAAAAAFxAH4AwXNy
+ABFqYXZhLmxhbmcuSW50ZWdlchLioKT3gYc4AgABSQAFdmFsdWV4cgAQamF2YS5sYW5nLk51bWJl
+coaslR0LlOCLAgAAeHAAAAABeABxAH4A8HNxAH4ADT9AAAAAAAAMdwgAAAAQAAAAAnEAfgBCdXIA
+HVtMb3JnLmRyb29scy5yZXRlb28uQmFzZU5vZGU7C+fJk0Ocs+oCAAB4cAAAAAFxAH4AO3EAfgCx
+dXEAfgD/AAAAAXEAfgCweHEAfgCu</byte-array>
 </org.drools.reteoo.ReteooRuleBase>
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/xml/test_Dump.drl
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/xml/test_Dump.drl	2006-08-02 21:58:31 UTC (rev 5420)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/xml/test_Dump.drl	2006-08-03 00:14:06 UTC (rev 5421)
@@ -1,9 +1,14 @@
-package foo
+package foo;
 
-rule simple_rule 
+rule "simple_rule"
+  salience 10
+  no-loop true
+  agenda-group "agenda-group"
+  activation-group "activation-group"
   when
-    foo3 : Bar(a==3)
-    foo4 : Bar(a4:a==4)
+    foo3 : Bar( a == 3 | == 4, a3 == "hello")
+    foo4 : Bar( a4 : a != 4 & != 5)
+    foo5 : Bar( b == (a4 + 1) | > a4)    
     Baz()
   then
   if ( a == b ) {

Modified: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/xml/test_ParseLhs.xml
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/xml/test_ParseLhs.xml	2006-08-02 21:58:31 UTC (rev 5420)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/xml/test_ParseLhs.xml	2006-08-03 00:14:06 UTC (rev 5421)
@@ -34,15 +34,15 @@
 			</column>		
 									
 			<column object-type="Foo">
-				<literal field-name="field1" evaluator="==" value="value1" />
+			    <field-constraint field-name="field1">
+				    <literal-restriction       evaluator="==" value="value1" />
+    				<return-value-restriction  evaluator="==">1==1</return-value-restriction>				    
+	    			<variable-restriction      evaluator="==" identifier="var1" />								
+				</field-constraint>
 											
 				<predicate field-name="field1" identifier="var1">1==1</predicate>
-							
-				<return-value field-name="field1" evaluator="==">1==1</return-value>
-							
-				<field-binding field-name="field1" identifier="var1" />
-				
-				<bound-variable field-name="field1" evaluator="==" identifier="var1" />				
+														
+				<field-binding field-name="field1" identifier="var1" />				
 			</column>		
 			
 			<not>




More information about the jboss-svn-commits mailing list