Merge branch 'cheshire-cat' into 'master'

Change-Id: Ic9ebf963437bf2cac2fb48b43b41728f515133c6
diff --git a/asterixdb/asterix-active/src/main/java/org/apache/asterix/active/ActiveManager.java b/asterixdb/asterix-active/src/main/java/org/apache/asterix/active/ActiveManager.java
index ba04967..08e1be4 100644
--- a/asterixdb/asterix-active/src/main/java/org/apache/asterix/active/ActiveManager.java
+++ b/asterixdb/asterix-active/src/main/java/org/apache/asterix/active/ActiveManager.java
@@ -112,14 +112,31 @@
             case REQUEST_STATS:
                 requestStats((ActiveStatsRequestMessage) message);
                 break;
+            case GENERIC_EVENT:
+                deliverGenericEvent(message);
+                break;
             default:
                 LOGGER.warn("Unknown message type received: " + message.getKind());
         }
     }
 
+    private void deliverGenericEvent(ActiveManagerMessage message) throws HyracksDataException {
+        try {
+            ActiveRuntimeId runtimeId = message.getRuntimeId();
+            IActiveRuntime runtime = runtimes.get(runtimeId);
+            if (runtime == null) {
+                LOGGER.warn("Request for a runtime {} that is not registered {}", runtimeId, message);
+                return;
+            }
+            runtime.handleGenericEvent(message);
+        } catch (Exception e) {
+            throw HyracksDataException.create(e);
+        }
+    }
+
     private void requestStats(ActiveStatsRequestMessage message) throws HyracksDataException {
         try {
-            ActiveRuntimeId runtimeId = (ActiveRuntimeId) message.getPayload();
+            ActiveRuntimeId runtimeId = message.getRuntimeId();
             IActiveRuntime runtime = runtimes.get(runtimeId);
             long reqId = message.getReqId();
             if (runtime == null) {
@@ -168,7 +185,7 @@
     @SuppressWarnings("squid:S1181") // Catch Error
     private void stopRuntime(ActiveManagerMessage message) {
         StopRuntimeParameters content = (StopRuntimeParameters) message.getPayload();
-        ActiveRuntimeId runtimeId = content.getRuntimeId();
+        ActiveRuntimeId runtimeId = message.getRuntimeId();
         IActiveRuntime runtime = runtimes.get(runtimeId);
         if (runtime == null) {
             LOGGER.warn("Request to stop runtime: " + runtimeId
diff --git a/asterixdb/asterix-active/src/main/java/org/apache/asterix/active/IActiveRuntime.java b/asterixdb/asterix-active/src/main/java/org/apache/asterix/active/IActiveRuntime.java
index a52f01e..b8edc64 100644
--- a/asterixdb/asterix-active/src/main/java/org/apache/asterix/active/IActiveRuntime.java
+++ b/asterixdb/asterix-active/src/main/java/org/apache/asterix/active/IActiveRuntime.java
@@ -20,6 +20,7 @@
 
 import java.util.concurrent.TimeUnit;
 
+import org.apache.asterix.active.message.ActiveManagerMessage;
 import org.apache.hyracks.api.exceptions.HyracksDataException;
 
 public interface IActiveRuntime {
@@ -48,4 +49,8 @@
     default String getStats() {
         return "\"Runtime stats is not available.\"";
     }
+
+    default void handleGenericEvent(ActiveManagerMessage event) throws HyracksDataException {
+        throw new IllegalStateException("generic events not supported for runtime " + getRuntimeId());
+    }
 }
diff --git a/asterixdb/asterix-active/src/main/java/org/apache/asterix/active/message/ActiveManagerMessage.java b/asterixdb/asterix-active/src/main/java/org/apache/asterix/active/message/ActiveManagerMessage.java
index 1a2af13..4d726cf 100644
--- a/asterixdb/asterix-active/src/main/java/org/apache/asterix/active/message/ActiveManagerMessage.java
+++ b/asterixdb/asterix-active/src/main/java/org/apache/asterix/active/message/ActiveManagerMessage.java
@@ -21,6 +21,7 @@
 import java.io.Serializable;
 
 import org.apache.asterix.active.ActiveManager;
+import org.apache.asterix.active.ActiveRuntimeId;
 import org.apache.asterix.common.api.INcApplicationContext;
 import org.apache.asterix.common.messaging.CcIdentifiedMessage;
 import org.apache.asterix.common.messaging.api.INcAddressedMessage;
@@ -29,15 +30,18 @@
 public class ActiveManagerMessage extends CcIdentifiedMessage implements INcAddressedMessage {
     public enum Kind {
         STOP_ACTIVITY,
-        REQUEST_STATS
+        REQUEST_STATS,
+        GENERIC_EVENT
     }
 
-    private static final long serialVersionUID = 1L;
+    private static final long serialVersionUID = 2L;
     private final Kind kind;
+    private final ActiveRuntimeId runtimeId;
     private final Serializable payload;
 
-    public ActiveManagerMessage(Kind kind, Serializable payload) {
+    public ActiveManagerMessage(Kind kind, ActiveRuntimeId runtimeId, Serializable payload) {
         this.kind = kind;
+        this.runtimeId = runtimeId;
         this.payload = payload;
     }
 
@@ -45,6 +49,10 @@
         return payload;
     }
 
+    public ActiveRuntimeId getRuntimeId() {
+        return runtimeId;
+    }
+
     public Kind getKind() {
         return kind;
     }
diff --git a/asterixdb/asterix-active/src/main/java/org/apache/asterix/active/message/ActiveStatsRequestMessage.java b/asterixdb/asterix-active/src/main/java/org/apache/asterix/active/message/ActiveStatsRequestMessage.java
index 117a68c..94668a0 100644
--- a/asterixdb/asterix-active/src/main/java/org/apache/asterix/active/message/ActiveStatsRequestMessage.java
+++ b/asterixdb/asterix-active/src/main/java/org/apache/asterix/active/message/ActiveStatsRequestMessage.java
@@ -18,14 +18,14 @@
  */
 package org.apache.asterix.active.message;
 
-import java.io.Serializable;
+import org.apache.asterix.active.ActiveRuntimeId;
 
 public class ActiveStatsRequestMessage extends ActiveManagerMessage {
     private static final long serialVersionUID = 1L;
     private final long reqId;
 
-    public ActiveStatsRequestMessage(Serializable payload, long reqId) {
-        super(Kind.REQUEST_STATS, payload);
+    public ActiveStatsRequestMessage(ActiveRuntimeId runtimeId, long reqId) {
+        super(Kind.REQUEST_STATS, runtimeId, null);
         this.reqId = reqId;
     }
 
diff --git a/asterixdb/asterix-active/src/main/java/org/apache/asterix/active/message/StopRuntimeParameters.java b/asterixdb/asterix-active/src/main/java/org/apache/asterix/active/message/StopRuntimeParameters.java
index fbc41a1..c21f06e 100644
--- a/asterixdb/asterix-active/src/main/java/org/apache/asterix/active/message/StopRuntimeParameters.java
+++ b/asterixdb/asterix-active/src/main/java/org/apache/asterix/active/message/StopRuntimeParameters.java
@@ -21,25 +21,17 @@
 import java.io.Serializable;
 import java.util.concurrent.TimeUnit;
 
-import org.apache.asterix.active.ActiveRuntimeId;
-
 public class StopRuntimeParameters implements Serializable {
 
-    private static final long serialVersionUID = 1L;
-    private final ActiveRuntimeId runtimeId;
+    private static final long serialVersionUID = 2L;
     private final long timeout;
     private final TimeUnit unit;
 
-    public StopRuntimeParameters(ActiveRuntimeId runtimeId, long timeout, TimeUnit unit) {
-        this.runtimeId = runtimeId;
+    public StopRuntimeParameters(long timeout, TimeUnit unit) {
         this.timeout = timeout;
         this.unit = unit;
     }
 
-    public ActiveRuntimeId getRuntimeId() {
-        return runtimeId;
-    }
-
     public long getTimeout() {
         return timeout;
     }
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/algebra/operators/physical/InvertedIndexPOperator.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/algebra/operators/physical/InvertedIndexPOperator.java
index 2d82f6f..532fb43 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/algebra/operators/physical/InvertedIndexPOperator.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/algebra/operators/physical/InvertedIndexPOperator.java
@@ -18,6 +18,8 @@
  */
 package org.apache.asterix.algebra.operators.physical;
 
+import static org.apache.asterix.common.utils.IdentifierUtil.dataset;
+
 import org.apache.asterix.common.config.OptimizationConfUtil;
 import org.apache.asterix.metadata.MetadataManager;
 import org.apache.asterix.metadata.declared.DataSourceId;
@@ -157,7 +159,7 @@
                 dataset.getDataverseName(), dataset.getDatasetName(), indexName);
         if (secondaryIndex == null) {
             throw new AlgebricksException(
-                    "Code generation error: no index " + indexName + " for dataset " + datasetName);
+                    "Code generation error: no index " + indexName + " for " + dataset() + " " + datasetName);
         }
         IVariableTypeEnvironment typeEnv = context.getTypeEnvironment(unnestMap);
         RecordDescriptor outputRecDesc = JobGenHelper.mkRecordDescriptor(typeEnv, opSchema, context);
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/ConstantFoldingRule.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/ConstantFoldingRule.java
index e99817d..0c2eeba 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/ConstantFoldingRule.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/ConstantFoldingRule.java
@@ -85,6 +85,7 @@
 import org.apache.hyracks.algebricks.core.config.AlgebricksConfig;
 import org.apache.hyracks.algebricks.core.jobgen.impl.JobGenContext;
 import org.apache.hyracks.algebricks.core.rewriter.base.IAlgebraicRewriteRule;
+import org.apache.hyracks.algebricks.core.rewriter.base.PhysicalOptimizationConfig;
 import org.apache.hyracks.algebricks.runtime.base.IEvaluatorContext;
 import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluator;
 import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
@@ -151,7 +152,7 @@
                 UnnestingPositionWriterFactory.INSTANCE, null,
                 new ExpressionRuntimeProvider(new QueryLogicalExpressionJobGen(metadataProvider.getFunctionManager())),
                 ExpressionTypeComputer.INSTANCE, null, null, null, null, GlobalConfig.DEFAULT_FRAME_SIZE, null,
-                NoOpWarningCollector.INSTANCE, 0);
+                NoOpWarningCollector.INSTANCE, 0, new PhysicalOptimizationConfig());
     }
 
     @Override
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/MetaFunctionToMetaVariableRule.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/MetaFunctionToMetaVariableRule.java
index b6dbbe7..aa2b8fd 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/MetaFunctionToMetaVariableRule.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/MetaFunctionToMetaVariableRule.java
@@ -18,6 +18,8 @@
  */
 package org.apache.asterix.optimizer.rules;
 
+import static org.apache.asterix.common.utils.IdentifierUtil.dataset;
+
 import java.util.ArrayList;
 import java.util.List;
 
@@ -254,7 +256,7 @@
         // the user query provides zero parameter for the meta function.
         if (variableRequired) {
             throw new CompilationException(ErrorCode.COMPILATION_ERROR, expr.getSourceLocation(),
-                    "Cannot resolve ambiguous meta function call. There are more than one dataset choice!");
+                    "Cannot resolve ambiguous meta function call. There are more than one " + dataset() + " choice");
         }
         VariableReferenceExpression metaVarRef = new VariableReferenceExpression(metaVar);
         metaVarRef.setSourceLocation(expr.getSourceLocation());
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/SetAsterixPhysicalOperatorsRule.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/SetAsterixPhysicalOperatorsRule.java
index d466446..5ec1a7f 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/SetAsterixPhysicalOperatorsRule.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/SetAsterixPhysicalOperatorsRule.java
@@ -18,6 +18,8 @@
  */
 package org.apache.asterix.optimizer.rules;
 
+import static org.apache.asterix.common.utils.IdentifierUtil.dataset;
+
 import java.util.ArrayList;
 import java.util.List;
 
@@ -265,7 +267,8 @@
             INodeDomain storageDomain = mp.findNodeDomain(dataset.getNodeGroupName());
             if (dsi == null) {
                 throw new CompilationException(ErrorCode.COMPILATION_ERROR, op.getSourceLocation(),
-                        "Could not find index " + jobGenParams.getIndexName() + " for dataset " + dataSourceId);
+                        "Could not find index " + jobGenParams.getIndexName() + " for " + dataset() + " "
+                                + dataSourceId);
             }
             IndexType indexType = jobGenParams.getIndexType();
             boolean requiresBroadcast = jobGenParams.getRequiresBroadcast();
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/SweepIllegalNonfunctionalFunctions.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/SweepIllegalNonfunctionalFunctions.java
index 9bfa8fb..2509010 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/SweepIllegalNonfunctionalFunctions.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/SweepIllegalNonfunctionalFunctions.java
@@ -125,9 +125,6 @@
 
         @Override
         public Void visitRunningAggregateOperator(RunningAggregateOperator op, Void arg) throws AlgebricksException {
-            for (Mutable<ILogicalExpression> me : op.getExpressions()) {
-                sweepExpression(me.getValue());
-            }
             return null;
         }
 
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/subplan/InlineAllNtsInSubplanVisitor.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/subplan/InlineAllNtsInSubplanVisitor.java
index 02dc6f6..1b7b7d2 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/subplan/InlineAllNtsInSubplanVisitor.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/subplan/InlineAllNtsInSubplanVisitor.java
@@ -28,6 +28,7 @@
 import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Set;
+import java.util.function.Predicate;
 
 import org.apache.asterix.common.exceptions.CompilationException;
 import org.apache.asterix.common.exceptions.ErrorCode;
@@ -47,6 +48,7 @@
 import org.apache.hyracks.algebricks.core.algebra.base.IOptimizationContext;
 import org.apache.hyracks.algebricks.core.algebra.base.LogicalExpressionTag;
 import org.apache.hyracks.algebricks.core.algebra.base.LogicalVariable;
+import org.apache.hyracks.algebricks.core.algebra.expressions.AbstractFunctionCallExpression;
 import org.apache.hyracks.algebricks.core.algebra.expressions.AggregateFunctionCallExpression;
 import org.apache.hyracks.algebricks.core.algebra.expressions.ConstantExpression;
 import org.apache.hyracks.algebricks.core.algebra.expressions.ScalarFunctionCallExpression;
@@ -99,10 +101,11 @@
  *   The visitor ensures that the variables used to correlate between the
  *   query plan rooted at <code>subplanInputOperator</code> are propagated
  *   to the operator being visited.
- *
- *   ----------------------------------
+ *   <p>
  *   Here is an abstract example.
+ *   <p>
  *   The original query plan:
+ *   <pre>
  *   --Op1
  *     --Subplan{
  *       --AggregateOp
@@ -112,9 +115,10 @@
  *       }
  *       --InputOp
  *         .....
- *
+ *   </pre>
  *   After we call NestedOp.accept(....) with this visitor. We will get an
  *   intermediate plan that looks like:
+ *   <pre>
  *   --Op1
  *     --Subplan{
  *       --AggregateOp
@@ -125,9 +129,9 @@
  *       }
  *       --InputOp
  *         .....
+ *    </pre>
  *    The plan rooted at InputOp' is a deep copy of the plan rooted at InputOp
  *    with a different set of variables.
- *
  */
 class InlineAllNtsInSubplanVisitor implements IQueryOperatorVisitor<ILogicalOperator, Void> {
     // The optimization context.
@@ -186,17 +190,6 @@
     }
 
     @Override
-    public ILogicalOperator visitAggregateOperator(AggregateOperator op, Void arg) throws AlgebricksException {
-        return visitAggregateOperator(op);
-    }
-
-    @Override
-    public ILogicalOperator visitRunningAggregateOperator(RunningAggregateOperator op, Void arg)
-            throws AlgebricksException {
-        return visitAggregateOperator(op);
-    }
-
-    @Override
     public ILogicalOperator visitEmptyTupleSourceOperator(EmptyTupleSourceOperator op, Void arg)
             throws AlgebricksException {
         return visitSingleInputOperator(op);
@@ -248,14 +241,38 @@
     }
 
     @Override
+    public ILogicalOperator visitRunningAggregateOperator(RunningAggregateOperator op, Void arg)
+            throws AlgebricksException {
+        return visitLimitOrRunningAggregateOperator(op, InlineAllNtsInSubplanVisitor::isCreateQueryUidRunningAggregate);
+    }
+
+    /*
+     * create-query-uid() doesn't require GROUP BY wrapping in the presence of correlated keys
+     */
+    private static boolean isCreateQueryUidRunningAggregate(RunningAggregateOperator ragg) {
+        return ragg.getExpressions().stream().map(Mutable::getValue)
+                .allMatch(expr -> expr.getExpressionTag() == LogicalExpressionTag.FUNCTION_CALL
+                        && BuiltinFunctions.CREATE_QUERY_UID
+                                .equals(((AbstractFunctionCallExpression) expr).getFunctionIdentifier()));
+    }
+
+    @Override
     public ILogicalOperator visitLimitOperator(LimitOperator op, Void arg) throws AlgebricksException {
+        return visitLimitOrRunningAggregateOperator(op, null);
+    }
+
+    private <T extends ILogicalOperator> ILogicalOperator visitLimitOrRunningAggregateOperator(T op,
+            Predicate<T> noCorrelatedKeysHandlingTest) throws AlgebricksException {
         // Processes its input operator.
         visitSingleInputOperator(op);
         if (correlatedKeyVars.isEmpty()) {
             return op;
         }
+        if (noCorrelatedKeysHandlingTest != null && noCorrelatedKeysHandlingTest.test(op)) {
+            return op;
+        }
 
-        // Get live variables before limit.
+        // Get live variables before limit (or running aggregate) operator.
         Set<LogicalVariable> inputLiveVars = new HashSet<LogicalVariable>();
         VariableUtilities.getSubplanLocalLiveVariables(op.getInputs().get(0).getValue(), inputLiveVars);
 
@@ -267,8 +284,9 @@
         ILogicalOperator inputOp = op.getInputs().get(0).getValue();
         assignOp.getInputs().add(new MutableObject<>(inputOp));
 
-        // Rewrites limit to a group-by with limit as its nested operator.
-        Pair<ILogicalOperator, LogicalVariable> gbyOpAndAggVar = wrapLimitInGroupBy(op, recordVar, inputLiveVars);
+        // Rewrites limit (or running aggregate) to a group-by with limit (or running aggregate) as its nested operator.
+        Pair<ILogicalOperator, LogicalVariable> gbyOpAndAggVar =
+                wrapLimitOrRunningAggregateInGroupBy(op, recordVar, inputLiveVars);
         ILogicalOperator gbyOp = gbyOpAndAggVar.first;
         LogicalVariable aggVar = gbyOpAndAggVar.second;
         gbyOp.getInputs().add(new MutableObject<>(assignOp));
@@ -312,8 +330,8 @@
         return new Pair<>(assignOp, recordVar);
     }
 
-    private Pair<ILogicalOperator, LogicalVariable> wrapLimitInGroupBy(ILogicalOperator op, LogicalVariable recordVar,
-            Set<LogicalVariable> inputLiveVars) throws AlgebricksException {
+    private Pair<ILogicalOperator, LogicalVariable> wrapLimitOrRunningAggregateInGroupBy(ILogicalOperator op,
+            LogicalVariable recordVar, Set<LogicalVariable> inputLiveVars) throws AlgebricksException {
         SourceLocation sourceLoc = op.getSourceLocation();
         GroupByOperator gbyOp = new GroupByOperator();
         gbyOp.setSourceLocation(sourceLoc);
@@ -348,7 +366,7 @@
         AggregateOperator aggOp = new AggregateOperator(aggVarList, aggExprList);
         aggOp.setSourceLocation(sourceLoc);
 
-        // Adds the original limit operator as the input operator to the added
+        // Adds the original limit (or running aggregate) operator as the input operator to the added
         // aggregate operator.
         aggOp.getInputs().add(new MutableObject<>(op));
         op.getInputs().clear();
@@ -361,7 +379,7 @@
         }
 
         // Adds a nested tuple source operator as the input operator to the
-        // limit operator.
+        // limit (or running aggregate) operator.
         NestedTupleSourceOperator nts = new NestedTupleSourceOperator(new MutableObject<>(gbyOp));
         nts.setSourceLocation(sourceLoc);
         currentOp.getInputs().add(new MutableObject<>(nts));
@@ -450,10 +468,11 @@
         // Updates the primary key info in the copied plan segment.
         Map<LogicalVariable, LogicalVariable> varMap = deepCopyVisitor.getInputToOutputVariableMapping();
         addPrimaryKeys(varMap);
-        Pair<ILogicalOperator, Set<LogicalVariable>> primaryOpAndVars =
+        EquivalenceClassUtils.computePrimaryKeys(copiedInputOperator, context);
+        Triple<Set<LogicalVariable>, ILogicalOperator, FunctionalDependency> primaryOpAndVars =
                 EquivalenceClassUtils.findOrCreatePrimaryKeyOpAndVariables(copiedInputOperator, true, context);
         correlatedKeyVars.clear();
-        correlatedKeyVars.addAll(primaryOpAndVars.second);
+        correlatedKeyVars.addAll(primaryOpAndVars.first);
         // Update key variables and input-output-var mapping.
         varMap.forEach((oldVar, newVar) -> {
             if (correlatedKeyVars.contains(oldVar)) {
@@ -462,7 +481,14 @@
             }
             updateInputToOutputVarMapping(oldVar, newVar, true);
         });
-        return primaryOpAndVars.first;
+        if (primaryOpAndVars.second == null) {
+            // found primary key for the existing operator (copiedInputOperator)
+            return copiedInputOperator;
+        } else {
+            ILogicalOperator newInputOp = primaryOpAndVars.second;
+            context.addPrimaryKey(primaryOpAndVars.third);
+            return newInputOp;
+        }
     }
 
     @Override
@@ -669,19 +695,20 @@
     }
 
     /**
-     * Wraps an AggregateOperator or RunningAggregateOperator with a group-by
+     * Wraps an AggregateOperator with a group-by
      * operator where the group-by keys are variables in keyVarsToEnforce. Note
      * that the function here prevents this visitor being used to rewrite
      * arbitrary query plans. Instead, it could only be used for rewriting a
      * nested plan within a subplan operator.
      *
      * @param op
-     *            the logical operator for aggregate or running aggregate.
+     *            the logical operator for aggregate.
      * @return the wrapped group-by operator if {@code keyVarsToEnforce} is not
      *         empty, and {@code op} otherwise.
      * @throws AlgebricksException
      */
-    private ILogicalOperator visitAggregateOperator(ILogicalOperator op) throws AlgebricksException {
+    @Override
+    public ILogicalOperator visitAggregateOperator(AggregateOperator op, Void arg) throws AlgebricksException {
         visitSingleInputOperator(op);
         if (correlatedKeyVars.isEmpty()) {
             return op;
@@ -808,5 +835,4 @@
                     new FunctionalDependency(newDependencies, Collections.singletonList(entry.getValue())));
         }
     }
-
 }
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/subplan/InlineSubplanInputForNestedTupleSourceRule.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/subplan/InlineSubplanInputForNestedTupleSourceRule.java
index 81b4a3d..ae9a886 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/subplan/InlineSubplanInputForNestedTupleSourceRule.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/subplan/InlineSubplanInputForNestedTupleSourceRule.java
@@ -26,6 +26,8 @@
 import java.util.Map;
 import java.util.Set;
 
+import org.apache.asterix.common.exceptions.CompilationException;
+import org.apache.asterix.common.exceptions.ErrorCode;
 import org.apache.asterix.lang.common.util.FunctionUtil;
 import org.apache.asterix.om.functions.BuiltinFunctions;
 import org.apache.asterix.optimizer.rules.util.EquivalenceClassUtils;
@@ -33,6 +35,7 @@
 import org.apache.commons.lang3.mutable.MutableObject;
 import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
 import org.apache.hyracks.algebricks.common.utils.Pair;
+import org.apache.hyracks.algebricks.common.utils.Triple;
 import org.apache.hyracks.algebricks.core.algebra.base.ILogicalExpression;
 import org.apache.hyracks.algebricks.core.algebra.base.ILogicalOperator;
 import org.apache.hyracks.algebricks.core.algebra.base.ILogicalPlan;
@@ -54,6 +57,7 @@
 import org.apache.hyracks.algebricks.core.algebra.operators.logical.SubplanOperator;
 import org.apache.hyracks.algebricks.core.algebra.operators.logical.visitors.VariableUtilities;
 import org.apache.hyracks.algebricks.core.algebra.plan.ALogicalPlanImpl;
+import org.apache.hyracks.algebricks.core.algebra.properties.FunctionalDependency;
 import org.apache.hyracks.algebricks.core.algebra.util.OperatorManipulationUtil;
 import org.apache.hyracks.algebricks.core.rewriter.base.IAlgebraicRewriteRule;
 import org.apache.hyracks.api.exceptions.SourceLocation;
@@ -365,27 +369,35 @@
         Mutable<ILogicalOperator> inputOpRef = subplanOp.getInputs().get(0);
         ILogicalOperator inputOpBackup = inputOpRef.getValue();
         // Creates parameters for the left outer join operator.
-        Pair<ILogicalOperator, Set<LogicalVariable>> primaryOpAndVars =
+        EquivalenceClassUtils.computePrimaryKeys(inputOpBackup, context);
+        Triple<Set<LogicalVariable>, ILogicalOperator, FunctionalDependency> primaryOpAndVars =
                 EquivalenceClassUtils.findOrCreatePrimaryKeyOpAndVariables(inputOpBackup, true, context);
-        ILogicalOperator inputOp = primaryOpAndVars.first;
-        Set<LogicalVariable> primaryKeyVars = primaryOpAndVars.second;
-        inputOpRef.setValue(inputOp);
+        Set<LogicalVariable> primaryKeyVars = primaryOpAndVars.first;
+        FunctionalDependency newPrimaryKeyFd = null;
+        ILogicalOperator inputOp;
+        if (primaryOpAndVars.second != null) {
+            // there's a new operator that generates a primary key
+            inputOp = primaryOpAndVars.second;
+            inputOpRef.setValue(inputOp);
+            newPrimaryKeyFd = primaryOpAndVars.third;
+        } else {
+            inputOp = inputOpBackup;
+        }
         Set<LogicalVariable> inputLiveVars = new HashSet<>();
         VariableUtilities.getLiveVariables(inputOp, inputLiveVars);
 
         Pair<Map<LogicalVariable, LogicalVariable>, List<Pair<IOrder, Mutable<ILogicalExpression>>>> varMapAndOrderExprs =
-                SubplanFlatteningUtil.inlineAllNestedTupleSource(subplanOp, context);
+                SubplanFlatteningUtil.inlineAllNestedTupleSource(subplanOp, context, newPrimaryKeyFd);
         Map<LogicalVariable, LogicalVariable> varMap = varMapAndOrderExprs.first;
         if (varMap == null) {
             inputOpRef.setValue(inputOpBackup);
             return new Pair<>(false, new LinkedHashMap<>());
         }
-
         Mutable<ILogicalOperator> lowestAggregateRefInSubplan =
                 SubplanFlatteningUtil.findLowestAggregate(subplanOp.getNestedPlans().get(0).getRoots().get(0));
         if (lowestAggregateRefInSubplan == null) {
-            inputOpRef.setValue(inputOpBackup);
-            return new Pair<>(false, new LinkedHashMap<>());
+            // not supposed to happen. SubplanFlatteningUtil.inlineAllNestedTupleSource() checks for it
+            throw new CompilationException(ErrorCode.ILLEGAL_STATE, subplanOp.getSourceLocation());
         }
 
         Mutable<ILogicalOperator> rightInputOpRef = lowestAggregateRefInSubplan.getValue().getInputs().get(0);
@@ -525,21 +537,29 @@
 
         ILogicalOperator inputOpBackup = inputOpRef.getValue();
         // Gets live variables and covering variables from the subplan's input operator.
-        Pair<ILogicalOperator, Set<LogicalVariable>> primaryOpAndVars =
+        EquivalenceClassUtils.computePrimaryKeys(inputOpBackup, context);
+        Triple<Set<LogicalVariable>, ILogicalOperator, FunctionalDependency> primaryOpAndVars =
                 EquivalenceClassUtils.findOrCreatePrimaryKeyOpAndVariables(inputOpBackup, false, context);
-        ILogicalOperator inputOp = primaryOpAndVars.first;
-        Set<LogicalVariable> primaryKeyVars = primaryOpAndVars.second;
-        inputOpRef.setValue(inputOp);
+        Set<LogicalVariable> primaryKeyVars = primaryOpAndVars.first;
+        FunctionalDependency newPrimaryKeyFd = null;
+        ILogicalOperator inputOp;
+        if (primaryOpAndVars.second != null) {
+            // there's a new operator that generates a primary key
+            inputOp = primaryOpAndVars.second;
+            inputOpRef.setValue(inputOp);
+            newPrimaryKeyFd = primaryOpAndVars.third;
+        } else {
+            inputOp = inputOpBackup;
+        }
         Set<LogicalVariable> liveVars = new HashSet<>();
         VariableUtilities.getLiveVariables(inputOp, liveVars);
 
         Pair<Set<LogicalVariable>, Mutable<ILogicalOperator>> notNullVarsAndTopJoinRef =
-                SubplanFlatteningUtil.inlineLeftNtsInSubplanJoin(subplanOp, context);
+                SubplanFlatteningUtil.inlineLeftNtsInSubplanJoin(subplanOp, context, newPrimaryKeyFd);
         if (notNullVarsAndTopJoinRef.first == null) {
             inputOpRef.setValue(inputOpBackup);
             return new Pair<>(false, replacedVarMap);
         }
-
         Set<LogicalVariable> notNullVars = notNullVarsAndTopJoinRef.first;
         Mutable<ILogicalOperator> topJoinRef = notNullVarsAndTopJoinRef.second;
 
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/subplan/SubplanFlatteningUtil.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/subplan/SubplanFlatteningUtil.java
index 09377fa..e3c7d69 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/subplan/SubplanFlatteningUtil.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/subplan/SubplanFlatteningUtil.java
@@ -35,28 +35,35 @@
 import org.apache.hyracks.algebricks.core.algebra.operators.logical.OrderOperator.IOrder;
 import org.apache.hyracks.algebricks.core.algebra.operators.logical.SubplanOperator;
 import org.apache.hyracks.algebricks.core.algebra.operators.logical.visitors.VariableUtilities;
+import org.apache.hyracks.algebricks.core.algebra.properties.FunctionalDependency;
 import org.apache.hyracks.algebricks.core.algebra.util.OperatorManipulationUtil;
 
-import com.google.common.collect.ImmutableSet;
-
 class SubplanFlatteningUtil {
 
+    private static final Set<LogicalOperatorTag> OP_SET_NESTEDTUPLESOURCE =
+            EnumSet.of(LogicalOperatorTag.NESTEDTUPLESOURCE);
+
+    private static final Set<LogicalOperatorTag> OP_SET_INNER_OUTER_JOIN =
+            EnumSet.of(LogicalOperatorTag.INNERJOIN, LogicalOperatorTag.LEFTOUTERJOIN);
+
     /**
      * Blindly inline all NTS's in a Subplan operator.
      *
      * @param subplanOp,
      *            the subplan operator
      * @param context
+     *            the optimization context
+     * @param extraPrimaryKeyFd
+     *            extra primary key dependency that needs to be added to the context before performing the rewrite
      * @return a map that maps primary key variables in the subplan's input to its deep copies
      *         in the nested pipeline; the ordering that needs to be maintained for the final
      *         aggregation in the added group-by operator.
-     * @throws AlgebricksException
      */
     public static Pair<Map<LogicalVariable, LogicalVariable>, List<Pair<IOrder, Mutable<ILogicalExpression>>>> inlineAllNestedTupleSource(
-            SubplanOperator subplanOp, IOptimizationContext context) throws AlgebricksException {
+            SubplanOperator subplanOp, IOptimizationContext context, FunctionalDependency extraPrimaryKeyFd)
+            throws AlgebricksException {
         // For nested subplan, we do not continue for the general inlining.
-        if (OperatorManipulationUtil.ancestorOfOperators(subplanOp,
-                ImmutableSet.of(LogicalOperatorTag.NESTEDTUPLESOURCE))) {
+        if (OperatorManipulationUtil.ancestorOfOperators(subplanOp, OP_SET_NESTEDTUPLESOURCE)) {
             return new Pair<>(null, null);
         }
 
@@ -65,6 +72,10 @@
             return new Pair<>(null, null);
         }
 
+        if (extraPrimaryKeyFd != null) {
+            context.addPrimaryKey(extraPrimaryKeyFd);
+        }
+
         // Rewrites the query plan.
         InlineAllNtsInSubplanVisitor visitor = new InlineAllNtsInSubplanVisitor(context, subplanOp);
         ILogicalOperator topOp = topOpRef.getValue();
@@ -77,8 +88,7 @@
 
         // Gets ordering variables.
         List<Pair<IOrder, Mutable<ILogicalExpression>>> orderVars = visitor.getOrderingExpressions();
-        return new Pair<Map<LogicalVariable, LogicalVariable>, List<Pair<IOrder, Mutable<ILogicalExpression>>>>(
-                visitor.getInputVariableToOutputVariableMap(), orderVars);
+        return new Pair<>(visitor.getInputVariableToOutputVariableMap(), orderVars);
     }
 
     /**
@@ -89,17 +99,23 @@
      *            the SubplanOperator
      * @param context
      *            the optimization context
+     * @param extraPrimaryKeyFd
+     *            extra primary key dependency that needs to be added to the context before performing the rewrite
      * @return A set of variables used for further null-checks, i.e., variables indicating
      *         whether a tuple produced by a transformed left outer join is a non-match;
      *         a reference to the top join operator in the nested subplan.
-     * @throws AlgebricksException
      */
     public static Pair<Set<LogicalVariable>, Mutable<ILogicalOperator>> inlineLeftNtsInSubplanJoin(
-            SubplanOperator subplanOp, IOptimizationContext context) throws AlgebricksException {
+            SubplanOperator subplanOp, IOptimizationContext context, FunctionalDependency extraPrimaryKeyFd)
+            throws AlgebricksException {
         Pair<Boolean, ILogicalOperator> applicableAndNtsToRewrite =
                 SubplanFlatteningUtil.isQualifiedForSpecialFlattening(subplanOp);
         if (!applicableAndNtsToRewrite.first) {
-            return new Pair<Set<LogicalVariable>, Mutable<ILogicalOperator>>(null, null);
+            return new Pair<>(null, null);
+        }
+
+        if (extraPrimaryKeyFd != null) {
+            context.addPrimaryKey(extraPrimaryKeyFd);
         }
 
         ILogicalOperator qualifiedNts = applicableAndNtsToRewrite.second;
@@ -126,8 +142,7 @@
             VariableUtilities.substituteVariables(currentOp, subplanLocalVarMap, context);
             currentOp = currentOp.getInputs().get(0).getValue();
         }
-        return new Pair<Set<LogicalVariable>, Mutable<ILogicalOperator>>(specialVisitor.getNullCheckVariables(),
-                topJoinRef);
+        return new Pair<>(specialVisitor.getNullCheckVariables(), topJoinRef);
     }
 
     /**
@@ -206,25 +221,23 @@
      * @param subplanOp,
      *            the SubplanOperator to consider
      * @return TRUE if the rewriting is applicable; FALSE otherwise.
-     * @throws AlgebricksException
      */
     private static Pair<Boolean, ILogicalOperator> isQualifiedForSpecialFlattening(SubplanOperator subplanOp)
             throws AlgebricksException {
         if (!OperatorManipulationUtil.ancestorOfOperators(
                 subplanOp.getNestedPlans().get(0).getRoots().get(0).getValue(),
                 // we don't need to check recursively for this special rewriting.
-                EnumSet.of(LogicalOperatorTag.INNERJOIN, LogicalOperatorTag.LEFTOUTERJOIN))) {
-            return new Pair<Boolean, ILogicalOperator>(false, null);
+                OP_SET_INNER_OUTER_JOIN)) {
+            return new Pair<>(false, null);
         }
         SubplanSpecialFlatteningCheckVisitor visitor = new SubplanSpecialFlatteningCheckVisitor();
         for (ILogicalPlan plan : subplanOp.getNestedPlans()) {
             for (Mutable<ILogicalOperator> opRef : plan.getRoots()) {
                 if (!opRef.getValue().accept(visitor, null)) {
-                    return new Pair<Boolean, ILogicalOperator>(false, null);
+                    return new Pair<>(false, null);
                 }
             }
         }
-        return new Pair<Boolean, ILogicalOperator>(true, visitor.getQualifiedNts());
+        return new Pair<>(true, visitor.getQualifiedNts());
     }
-
 }
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/util/EquivalenceClassUtils.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/util/EquivalenceClassUtils.java
index 1593cf1..24f368f 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/util/EquivalenceClassUtils.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/util/EquivalenceClassUtils.java
@@ -22,40 +22,49 @@
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashMap;
-import java.util.HashSet;
+import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
 import org.apache.asterix.common.config.DatasetConfig.DatasetType;
 import org.apache.asterix.lang.common.util.FunctionUtil;
+import org.apache.asterix.metadata.declared.MetadataProvider;
 import org.apache.asterix.metadata.entities.Dataset;
 import org.apache.asterix.metadata.entities.InternalDatasetDetails;
 import org.apache.asterix.om.base.AInt32;
 import org.apache.asterix.om.constants.AsterixConstantValue;
 import org.apache.asterix.om.functions.BuiltinFunctions;
 import org.apache.asterix.om.types.ARecordType;
+import org.apache.commons.lang3.mutable.Mutable;
 import org.apache.commons.lang3.mutable.MutableObject;
 import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
-import org.apache.hyracks.algebricks.common.utils.Pair;
+import org.apache.hyracks.algebricks.common.utils.Triple;
 import org.apache.hyracks.algebricks.core.algebra.base.EquivalenceClass;
 import org.apache.hyracks.algebricks.core.algebra.base.ILogicalExpression;
 import org.apache.hyracks.algebricks.core.algebra.base.ILogicalOperator;
 import org.apache.hyracks.algebricks.core.algebra.base.IOptimizationContext;
 import org.apache.hyracks.algebricks.core.algebra.base.LogicalVariable;
+import org.apache.hyracks.algebricks.core.algebra.expressions.AbstractFunctionCallExpression;
 import org.apache.hyracks.algebricks.core.algebra.expressions.ConstantExpression;
 import org.apache.hyracks.algebricks.core.algebra.expressions.ScalarFunctionCallExpression;
 import org.apache.hyracks.algebricks.core.algebra.expressions.StatefulFunctionCallExpression;
 import org.apache.hyracks.algebricks.core.algebra.expressions.VariableReferenceExpression;
-import org.apache.hyracks.algebricks.core.algebra.operators.logical.AssignOperator;
+import org.apache.hyracks.algebricks.core.algebra.operators.logical.RunningAggregateOperator;
+import org.apache.hyracks.algebricks.core.algebra.operators.logical.WindowOperator;
 import org.apache.hyracks.algebricks.core.algebra.operators.logical.visitors.PrimaryKeyVariablesVisitor;
 import org.apache.hyracks.algebricks.core.algebra.operators.logical.visitors.VariableUtilities;
 import org.apache.hyracks.algebricks.core.algebra.properties.FunctionalDependency;
-import org.apache.hyracks.algebricks.core.algebra.util.OperatorPropertiesUtil;
+import org.apache.hyracks.algebricks.core.algebra.util.OperatorManipulationUtil;
 import org.apache.hyracks.algebricks.rewriter.util.PhysicalOptimizationsUtil;
 
 public class EquivalenceClassUtils {
 
+    // Controls whether to use create-query-uid() function when generating a primary key
+    // If disabled then use row_number() approach instead
+    public static final String REWRITE_INTERNAL_QUERYUID_PK = "rewrite_internal_queryuid_pk";
+    static final boolean REWRITE_INTERNAL_QUERYUID_PK_DEFAULT = true;
+
     /**
      * Adds equivalent classes for primary index accesses, including unnest-map for
      * primary index access and data source scan through primary index ---
@@ -148,16 +157,14 @@
      *         a set of primary key variables at the operator.
      * @throws AlgebricksException
      */
-    public static Pair<ILogicalOperator, Set<LogicalVariable>> findOrCreatePrimaryKeyOpAndVariables(
+    public static Triple<Set<LogicalVariable>, ILogicalOperator, FunctionalDependency> findOrCreatePrimaryKeyOpAndVariables(
             ILogicalOperator operator, boolean usedForCorrelationJoin, IOptimizationContext context)
             throws AlgebricksException {
-        computePrimaryKeys(operator, context);
-
-        Set<LogicalVariable> liveVars = new HashSet<>();
+        Set<LogicalVariable> liveVars = new LinkedHashSet<>();
         VariableUtilities.getSubplanLocalLiveVariables(operator, liveVars);
 
-        Set<LogicalVariable> primaryKeyVars = new HashSet<>();
-        Set<LogicalVariable> noKeyVars = new HashSet<>();
+        Set<LogicalVariable> primaryKeyVars = new LinkedHashSet<>();
+        Set<LogicalVariable> noKeyVars = new LinkedHashSet<>();
         for (LogicalVariable liveVar : liveVars) {
             List<LogicalVariable> keyVars = context.findPrimaryKey(liveVar);
             if (keyVars != null) {
@@ -171,24 +178,57 @@
         }
         primaryKeyVars.retainAll(liveVars);
         if (primaryKeyVars.containsAll(noKeyVars)) {
-            return new Pair<ILogicalOperator, Set<LogicalVariable>>(operator, primaryKeyVars);
+            return new Triple<>(primaryKeyVars, null, null);
+        } else if (!usedForCorrelationJoin && isQueryUidPkEnabled(context)) {
+            LogicalVariable idVar = context.newVar();
+            RunningAggregateOperator assignIdOp =
+                    new RunningAggregateOperator(idVar, new MutableObject<>(new StatefulFunctionCallExpression(
+                            BuiltinFunctions.getBuiltinFunctionInfo(BuiltinFunctions.CREATE_QUERY_UID), null)));
+            assignIdOp.setSourceLocation(operator.getSourceLocation());
+            assignIdOp.getInputs().add(new MutableObject<>(operator));
+
+            context.computeAndSetTypeEnvironmentForOperator(assignIdOp);
+
+            FunctionalDependency primaryKeyFD =
+                    new FunctionalDependency(Collections.singletonList(idVar), new ArrayList<>(liveVars));
+
+            return new Triple<>(Collections.singleton(idVar), assignIdOp, primaryKeyFD);
         } else {
-            LogicalVariable assignVar = context.newVar();
-            ILogicalOperator assignOp = new AssignOperator(assignVar,
-                    new MutableObject<ILogicalExpression>(new StatefulFunctionCallExpression(
-                            FunctionUtil.getFunctionInfo(BuiltinFunctions.CREATE_QUERY_UID), null)));
-            OperatorPropertiesUtil.markMovable(assignOp, !usedForCorrelationJoin);
-            assignOp.getInputs().add(new MutableObject<ILogicalOperator>(operator));
-            context.addPrimaryKey(new FunctionalDependency(Collections.singletonList(assignVar),
-                    new ArrayList<LogicalVariable>(liveVars)));
-            context.computeAndSetTypeEnvironmentForOperator(assignOp);
-            return new Pair<ILogicalOperator, Set<LogicalVariable>>(assignOp, Collections.singleton(assignVar));
+            noKeyVars.removeAll(primaryKeyVars);
+
+            List<Mutable<ILogicalExpression>> partitionVarRefs =
+                    new ArrayList<>(primaryKeyVars.size() + noKeyVars.size());
+            OperatorManipulationUtil.createVariableReferences(primaryKeyVars, operator.getSourceLocation(),
+                    partitionVarRefs);
+            OperatorManipulationUtil.createVariableReferences(noKeyVars, operator.getSourceLocation(),
+                    partitionVarRefs);
+            LogicalVariable rowNumVar = context.newVar();
+            AbstractFunctionCallExpression rowNumExpr = BuiltinFunctions
+                    .makeWindowFunctionExpression(BuiltinFunctions.ROW_NUMBER_IMPL, Collections.emptyList());
+            WindowOperator winOp = new WindowOperator(partitionVarRefs, Collections.emptyList());
+            winOp.getVariables().add(rowNumVar);
+            winOp.getExpressions().add(new MutableObject<>(rowNumExpr));
+            winOp.setSourceLocation(operator.getSourceLocation());
+            winOp.getInputs().add(new MutableObject<>(operator));
+
+            context.computeAndSetTypeEnvironmentForOperator(winOp);
+
+            primaryKeyVars.addAll(noKeyVars);
+            primaryKeyVars.add(rowNumVar);
+            FunctionalDependency primaryKeyFD =
+                    new FunctionalDependency(new ArrayList<>(primaryKeyVars), new ArrayList<>(liveVars));
+
+            return new Triple<>(primaryKeyVars, winOp, primaryKeyFD);
         }
     }
 
-    private static void computePrimaryKeys(ILogicalOperator op, IOptimizationContext ctx) throws AlgebricksException {
+    public static void computePrimaryKeys(ILogicalOperator op, IOptimizationContext ctx) throws AlgebricksException {
         PrimaryKeyVariablesVisitor visitor = new PrimaryKeyVariablesVisitor();
         PhysicalOptimizationsUtil.visitOperatorAndItsDescendants(op, visitor, ctx);
     }
 
+    private static boolean isQueryUidPkEnabled(IOptimizationContext context) {
+        MetadataProvider metadataProvider = (MetadataProvider) context.getMetadataProvider();
+        return metadataProvider.getBooleanProperty(REWRITE_INTERNAL_QUERYUID_PK, REWRITE_INTERNAL_QUERYUID_PK_DEFAULT);
+    }
 }
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/AbstractLangTranslator.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/AbstractLangTranslator.java
index 58bdaca..6f07718 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/AbstractLangTranslator.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/AbstractLangTranslator.java
@@ -18,6 +18,9 @@
  */
 package org.apache.asterix.translator;
 
+import static org.apache.asterix.common.utils.IdentifierUtil.dataset;
+import static org.apache.asterix.common.utils.IdentifierUtil.dataverse;
+
 import java.util.Arrays;
 import java.util.HashSet;
 import java.util.Map;
@@ -57,6 +60,7 @@
 import org.apache.asterix.metadata.dataset.hints.DatasetHints;
 import org.apache.asterix.metadata.entities.Dataverse;
 import org.apache.asterix.metadata.utils.MetadataConstants;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
 import org.apache.hyracks.algebricks.common.utils.Pair;
 import org.apache.hyracks.api.exceptions.HyracksDataException;
@@ -73,11 +77,12 @@
 
     protected static final String INVALID_OPERATION_MESSAGE = "Invalid operation - %s";
 
-    protected static final String BAD_DATAVERSE_DML_MESSAGE = "%s operation is not permitted in dataverse %s";
+    protected static final String BAD_DATAVERSE_DML_MESSAGE = "%s operation is not permitted in " + dataverse() + " %s";
 
-    protected static final String BAD_DATAVERSE_DDL_MESSAGE = "Cannot %s dataverse: %s";
+    protected static final String BAD_DATAVERSE_DDL_MESSAGE = "Cannot %s " + dataverse() + ": %s";
 
-    protected static final String BAD_DATAVERSE_OBJECT_DDL_MESSAGE = "Cannot %s a %s belonging to the dataverse: %s";
+    protected static final String BAD_DATAVERSE_OBJECT_DDL_MESSAGE =
+            "Cannot %s a %s belonging to the " + dataverse() + ": %s";
 
     public void validateOperation(ICcApplicationContext appCtx, Dataverse defaultDataverse, Statement stmt)
             throws AlgebricksException {
@@ -210,7 +215,7 @@
                 }
                 invalidOperation = isMetadataDataverse(dataverseName);
                 if (invalidOperation) {
-                    message = String.format(BAD_DATAVERSE_OBJECT_DDL_MESSAGE, "create", "dataset", dataverseName);
+                    message = String.format(BAD_DATAVERSE_OBJECT_DDL_MESSAGE, "create", dataset(), dataverseName);
                 }
 
                 if (!invalidOperation) {
@@ -221,9 +226,9 @@
                             Pair<Boolean, String> validationResult =
                                     DatasetHints.validate(appCtx, hint.getKey(), hint.getValue());
                             if (!validationResult.first) {
-                                errorMsgBuffer.append("Dataset: ").append(dsCreateStmt.getName().getValue())
-                                        .append(" error in processing hint: ").append(hint.getKey()).append(" ")
-                                        .append(validationResult.second);
+                                errorMsgBuffer.append(StringUtils.capitalize(dataset())).append(": ")
+                                        .append(dsCreateStmt.getName().getValue()).append(" error in processing hint: ")
+                                        .append(hint.getKey()).append(" ").append(validationResult.second);
                                 errorMsgBuffer.append(" \n");
                             }
                         }
@@ -242,7 +247,7 @@
                 }
                 invalidOperation = isMetadataDataverse(dataverseName);
                 if (invalidOperation) {
-                    message = String.format(BAD_DATAVERSE_OBJECT_DDL_MESSAGE, "drop", "dataset", dataverseName);
+                    message = String.format(BAD_DATAVERSE_OBJECT_DDL_MESSAGE, "drop", dataset(), dataverseName);
                 }
                 break;
 
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/LangExpressionToPlanTranslator.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/LangExpressionToPlanTranslator.java
index fd689a5..da07acb 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/LangExpressionToPlanTranslator.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/LangExpressionToPlanTranslator.java
@@ -18,6 +18,8 @@
  */
 package org.apache.asterix.translator;
 
+import static org.apache.asterix.common.utils.IdentifierUtil.dataset;
+
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Collections;
@@ -206,8 +208,8 @@
                 validateDatasetInfo(metadataProvider, stmt.getDataverseName(), stmt.getDatasetName(), sourceLoc);
         List<List<String>> partitionKeys = targetDatasource.getDataset().getPrimaryKeys();
         if (dataset.hasMetaPart()) {
-            throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc,
-                    dataset.getDatasetName() + ": load dataset is not supported on Datasets with Meta records");
+            throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc, dataset.getDatasetName() + ": load "
+                    + dataset() + " is not supported on " + dataset() + "s with meta records");
         }
 
         LoadableDataSource lds;
@@ -430,8 +432,8 @@
         SourceLocation sourceLoc = stmt.getSourceLocation();
         if (targetDatasource.getDataset().hasMetaPart()) {
             throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc,
-                    targetDatasource.getDataset().getDatasetName()
-                            + ": delete from dataset is not supported on Datasets with Meta records");
+                    targetDatasource.getDataset().getDatasetName() + ": delete from " + dataset()
+                            + " is not supported on " + dataset() + "s with meta records");
         }
 
         List<String> filterField = DatasetUtil.getFilterField(targetDatasource.getDataset());
@@ -461,8 +463,8 @@
         SourceLocation sourceLoc = stmt.getSourceLocation();
         if (!targetDatasource.getDataset().allow(topOp, DatasetUtil.OP_UPSERT)) {
             throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc,
-                    targetDatasource.getDataset().getDatasetName()
-                            + ": upsert into dataset is not supported on Datasets with Meta records");
+                    targetDatasource.getDataset().getDatasetName() + ": upsert into " + dataset()
+                            + " is not supported on " + dataset() + "s with meta records");
         }
         ProjectOperator project = (ProjectOperator) topOp;
         CompiledUpsertStatement compiledUpsert = (CompiledUpsertStatement) stmt;
@@ -474,7 +476,7 @@
         if (targetDatasource.getDataset().hasMetaPart()) {
             if (returnExpression != null) {
                 throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc,
-                        "Returning not allowed on datasets with Meta records");
+                        "Returning not allowed on " + dataset() + "s with meta records");
             }
             List<LogicalVariable> metaAndKeysVars;
             List<Mutable<ILogicalExpression>> metaAndKeysExprs;
@@ -585,8 +587,8 @@
         SourceLocation sourceLoc = stmt.getSourceLocation();
         if (targetDatasource.getDataset().hasMetaPart()) {
             throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc,
-                    targetDatasource.getDataset().getDatasetName()
-                            + ": insert into dataset is not supported on Datasets with Meta records");
+                    targetDatasource.getDataset().getDatasetName() + ": insert into " + dataset()
+                            + " is not supported on " + dataset() + "s with meta records");
         }
 
         List<String> filterField = DatasetUtil.getFilterField(targetDatasource.getDataset());
@@ -683,7 +685,7 @@
         }
         if (dataset.getDatasetType() == DatasetType.EXTERNAL) {
             throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc,
-                    "Cannot write output to an external dataset.");
+                    "Cannot write output to an external " + dataset());
         }
         DataSourceId sourceId = new DataSourceId(dataverseName, datasetName);
         IAType itemType = metadataProvider.findType(dataset.getItemTypeDataverseName(), dataset.getItemTypeName());
diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/common/APIFramework.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/common/APIFramework.java
index b83fbdf..ccd38d3 100644
--- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/common/APIFramework.java
+++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/common/APIFramework.java
@@ -73,6 +73,7 @@
 import org.apache.asterix.optimizer.base.FuzzyUtils;
 import org.apache.asterix.optimizer.rules.DisjunctivePredicateToJoinRule;
 import org.apache.asterix.optimizer.rules.SetAsterixPhysicalOperatorsRule;
+import org.apache.asterix.optimizer.rules.util.EquivalenceClassUtils;
 import org.apache.asterix.runtime.job.listener.JobEventListenerFactory;
 import org.apache.asterix.translator.CompiledStatements.ICompiledDmlStatement;
 import org.apache.asterix.translator.ExecutionPlans;
@@ -134,7 +135,8 @@
             CompilerProperties.COMPILER_SORTMEMORY_KEY, CompilerProperties.COMPILER_WINDOWMEMORY_KEY,
             CompilerProperties.COMPILER_TEXTSEARCHMEMORY_KEY, CompilerProperties.COMPILER_PARALLELISM_KEY,
             CompilerProperties.COMPILER_SORT_PARALLEL_KEY, CompilerProperties.COMPILER_SORT_SAMPLES_KEY,
-            CompilerProperties.COMPILER_INDEXONLY_KEY, CompilerProperties.COMPILER_INTERNAL_SANITYCHECK_KEY,
+            CompilerProperties.COMPILER_EXTERNALSCANMEMORY_KEY, CompilerProperties.COMPILER_INDEXONLY_KEY,
+            CompilerProperties.COMPILER_INTERNAL_SANITYCHECK_KEY,
             CompilerProperties.COMPILER_EXTERNAL_FIELD_PUSHDOWN_KEY, CompilerProperties.COMPILER_SUBPLAN_MERGE_KEY,
             CompilerProperties.COMPILER_SUBPLAN_NESTEDPUSHDOWN_KEY, CompilerProperties.COMPILER_ARRAYINDEX_KEY,
             CompilerProperties.COMPILER_MIN_MEMORY_ALLOCATION_KEY, FunctionUtil.IMPORT_PRIVATE_FUNCTIONS,
@@ -143,7 +145,8 @@
             FeedActivityDetails.COLLECT_LOCATIONS, SqlppQueryRewriter.INLINE_WITH_OPTION,
             SqlppExpressionToPlanTranslator.REWRITE_IN_AS_OR_OPTION, "hash_merge", "output-record-type",
             DisjunctivePredicateToJoinRule.REWRITE_OR_AS_JOIN_OPTION,
-            SetAsterixPhysicalOperatorsRule.REWRITE_ATTEMPT_BATCH_ASSIGN);
+            SetAsterixPhysicalOperatorsRule.REWRITE_ATTEMPT_BATCH_ASSIGN,
+            EquivalenceClassUtils.REWRITE_INTERNAL_QUERYUID_PK);
 
     private final IRewriterFactory rewriterFactory;
     private final IAstPrintVisitorFactory astPrintVisitorFactory;
diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/ConnectorApiServlet.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/ConnectorApiServlet.java
index 2fafcfc..353b849 100644
--- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/ConnectorApiServlet.java
+++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/ConnectorApiServlet.java
@@ -19,6 +19,8 @@
 package org.apache.asterix.api.http.server;
 
 import static org.apache.asterix.api.http.server.ServletConstants.HYRACKS_CONNECTION_ATTR;
+import static org.apache.asterix.common.utils.IdentifierUtil.dataset;
+import static org.apache.asterix.common.utils.IdentifierUtil.dataverse;
 
 import java.io.IOException;
 import java.io.PrintWriter;
@@ -34,6 +36,7 @@
 import org.apache.asterix.metadata.entities.Dataset;
 import org.apache.asterix.om.types.ARecordType;
 import org.apache.asterix.utils.FlushDatasetUtil;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.hyracks.api.client.IHyracksClientConnection;
 import org.apache.hyracks.api.client.NodeControllerInfo;
 import org.apache.hyracks.api.io.FileSplit;
@@ -98,8 +101,8 @@
                 metadataProvider.setMetadataTxnContext(mdTxnCtx);
                 Dataset dataset = metadataProvider.findDataset(dataverseName, datasetName);
                 if (dataset == null) {
-                    jsonResponse.put("error",
-                            "Dataset " + datasetName + " does not exist in " + "dataverse " + dataverseName);
+                    jsonResponse.put("error", StringUtils.capitalize(dataset()) + " " + datasetName
+                            + " does not exist in " + dataverse() + " " + dataverseName);
                     out.write(jsonResponse.toString());
                     out.flush();
                     return;
diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/NCUdfApiServlet.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/NCUdfApiServlet.java
index f164938..717ebf8 100644
--- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/NCUdfApiServlet.java
+++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/NCUdfApiServlet.java
@@ -83,6 +83,7 @@
     protected Path workingDir;
     protected String sysAuthHeader;
     private ILibraryManager libraryManager;
+    private int timeout;
 
     private static final Logger LOGGER = LogManager.getLogger();
 
@@ -91,6 +92,7 @@
         super(ctx, paths, appCtx, compilationProvider, httpServerProtocol, httpServerPort);
         this.compilationProvider = compilationProvider;
         this.receptionist = appCtx.getReceptionist();
+        this.timeout = appCtx.getExternalProperties().getLibraryDeployTimeout();
     }
 
     @Override
@@ -152,7 +154,7 @@
         InternalRequestResponse responseMsg;
         try {
             ncMb.sendMessageToPrimaryCC(requestMessage);
-            responseMsg = (InternalRequestResponse) responseFuture.get(120000, TimeUnit.MILLISECONDS);
+            responseMsg = (InternalRequestResponse) responseFuture.get(timeout, TimeUnit.SECONDS);
         } finally {
             ncMb.deregisterMessageFuture(responseFuture.getFutureId());
         }
diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryServiceServlet.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryServiceServlet.java
index 5153ebb..a043050 100644
--- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryServiceServlet.java
+++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryServiceServlet.java
@@ -280,10 +280,12 @@
             final ResultProperties resultProperties = new ResultProperties(delivery, param.getMaxResultReads());
             buildResponseHeaders(requestRef, sessionOutput, param, responsePrinter, delivery);
             responsePrinter.printHeaders();
-            validateStatement(param.getStatement());
-            String statementsText = param.getStatement() + ";";
+            String statement = param.getStatement();
+            statement = statement == null || (!statement.isEmpty() && statement.charAt(statement.length() - 1) == ';')
+                    ? statement : (statement + ";");
+            validateStatement(statement);
             if (param.isParseOnly()) {
-                ResultUtil.ParseOnlyResult parseOnlyResult = parseStatement(statementsText);
+                ResultUtil.ParseOnlyResult parseOnlyResult = parseStatement(statement);
                 setAccessControlHeaders(request, response);
                 executionState.setStatus(ResultStatus.SUCCESS, HttpResponseStatus.OK);
                 response.setStatus(executionState.getHttpStatus());
@@ -296,9 +298,9 @@
                 IStatementExecutor.StatementProperties statementProperties =
                         new IStatementExecutor.StatementProperties();
                 response.setStatus(HttpResponseStatus.OK);
-                executeStatement(request, requestRef, statementsText, sessionOutput, resultProperties,
-                        statementProperties, stats, param, executionState, param.getOptionalParams(), statementParams,
-                        responsePrinter, warnings);
+                executeStatement(request, requestRef, statement, sessionOutput, resultProperties, statementProperties,
+                        stats, param, executionState, param.getOptionalParams(), statementParams, responsePrinter,
+                        warnings);
                 executionState.setStatus(ResultStatus.SUCCESS, HttpResponseStatus.OK);
             }
             errorCount = 0;
diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/RebalanceApiServlet.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/RebalanceApiServlet.java
index 8b04cc3..c4d664b 100644
--- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/RebalanceApiServlet.java
+++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/RebalanceApiServlet.java
@@ -19,6 +19,7 @@
 package org.apache.asterix.api.http.server;
 
 import static org.apache.asterix.api.http.server.ServletConstants.HYRACKS_CONNECTION_ATTR;
+import static org.apache.asterix.common.utils.IdentifierUtil.dataset;
 
 import java.io.PrintWriter;
 import java.nio.charset.StandardCharsets;
@@ -121,13 +122,13 @@
             // If a user gives parameter datasetName, she should give dataverseName as well.
             if (dataverseName == null && datasetName != null) {
                 sendResponse(response, HttpResponseStatus.BAD_REQUEST,
-                        "to rebalance a particular dataset, the parameter dataverseName must be given");
+                        "to rebalance a particular " + dataset() + ", the parameter dataverseName must be given");
                 return;
             }
 
             // Does not allow rebalancing a metadata dataset.
             if (MetadataConstants.METADATA_DATAVERSE_NAME.equals(dataverseName)) {
-                sendResponse(response, HttpResponseStatus.BAD_REQUEST, "cannot rebalance a metadata dataset");
+                sendResponse(response, HttpResponseStatus.BAD_REQUEST, "cannot rebalance a metadata " + dataset());
                 return;
             }
             // Schedules a rebalance task and wait for its completion.
diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/active/ActiveEntityEventsListener.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/active/ActiveEntityEventsListener.java
index c90cde0..5f7d65e 100644
--- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/active/ActiveEntityEventsListener.java
+++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/active/ActiveEntityEventsListener.java
@@ -515,7 +515,7 @@
             }
             ActiveRuntimeId runtimeId = getActiveRuntimeId(partition++);
             messageBroker.sendApplicationMessageToNC(new ActiveManagerMessage(ActiveManagerMessage.Kind.STOP_ACTIVITY,
-                    new StopRuntimeParameters(runtimeId, timeout, unit)), location);
+                    runtimeId, new StopRuntimeParameters(timeout, unit)), location);
         }
     }
 
diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/function/DatasetRewriter.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/function/DatasetRewriter.java
index 974cd9e..0d20d51 100644
--- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/function/DatasetRewriter.java
+++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/function/DatasetRewriter.java
@@ -18,6 +18,8 @@
  */
 package org.apache.asterix.app.function;
 
+import static org.apache.asterix.common.utils.IdentifierUtil.dataset;
+
 import java.util.ArrayList;
 import java.util.List;
 
@@ -67,7 +69,7 @@
         if (unnest.getPositionalVariable() != null) {
             // TODO remove this after enabling the support of positional variables in data scan
             throw new CompilationException(ErrorCode.COMPILATION_ERROR, unnest.getSourceLocation(),
-                    "No positional variables are allowed over datasets.");
+                    "No positional variables are allowed over " + dataset() + "s");
         }
 
         MetadataProvider metadataProvider = (MetadataProvider) context.getMetadataProvider();
@@ -122,7 +124,7 @@
         IAType type = metadata.findType(dataset.getItemTypeDataverseName(), dataset.getItemTypeName());
         if (type == null) {
             throw new CompilationException(ErrorCode.COMPILATION_ERROR, datasetFnCall.getSourceLocation(),
-                    "No type for dataset " + dataset.getDatasetName());
+                    "No type for " + dataset() + " " + dataset.getDatasetName());
         }
         return type;
     }
diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/function/FeedRewriter.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/function/FeedRewriter.java
index 90374c3..b01ea65 100644
--- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/function/FeedRewriter.java
+++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/function/FeedRewriter.java
@@ -18,6 +18,8 @@
  */
 package org.apache.asterix.app.function;
 
+import static org.apache.asterix.common.utils.IdentifierUtil.dataset;
+
 import java.util.ArrayList;
 import java.util.List;
 
@@ -129,7 +131,8 @@
         if (dataset.hasMetaPart()) {
             String metaTypeName = FeedUtils.getFeedMetaTypeName(sourceFeed.getConfiguration());
             if (metaTypeName == null) {
-                throw new AlgebricksException("Feed to a dataset with metadata doesn't have meta type specified");
+                throw new AlgebricksException(
+                        "Feed to a " + dataset() + " with metadata doesn't have meta type specified");
             }
             metaType = (ARecordType) metadataProvider.findType(id.getDataverseName(), metaTypeName);
         }
diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/message/StorageCleanupRequestMessage.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/message/StorageCleanupRequestMessage.java
new file mode 100644
index 0000000..5e52517
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/message/StorageCleanupRequestMessage.java
@@ -0,0 +1,109 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.
+ */
+package org.apache.asterix.app.message;
+
+import static org.apache.hyracks.util.ExitUtil.EC_NC_FAILED_TO_NOTIFY_TASKS_COMPLETED;
+
+import java.util.Map;
+
+import org.apache.asterix.common.api.IDatasetLifecycleManager;
+import org.apache.asterix.common.api.INcApplicationContext;
+import org.apache.asterix.common.dataflow.DatasetLocalResource;
+import org.apache.asterix.common.messaging.CcIdentifiedMessage;
+import org.apache.asterix.common.messaging.api.INCMessageBroker;
+import org.apache.asterix.common.messaging.api.INcAddressedMessage;
+import org.apache.asterix.common.metadata.MetadataIndexImmutableProperties;
+import org.apache.asterix.transaction.management.resource.PersistentLocalResourceRepository;
+import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.storage.common.IIndex;
+import org.apache.hyracks.storage.common.LocalResource;
+import org.apache.hyracks.util.ExitUtil;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+import it.unimi.dsi.fastutil.ints.IntOpenHashSet;
+
+public class StorageCleanupRequestMessage extends CcIdentifiedMessage implements INcAddressedMessage {
+
+    private static final long serialVersionUID = 1L;
+    private static final Logger LOGGER = LogManager.getLogger();
+    private final IntOpenHashSet validDatasetIds;
+    private final long reqId;
+
+    public StorageCleanupRequestMessage(long reqId, IntOpenHashSet validDatasetIds) {
+        this.validDatasetIds = validDatasetIds;
+        this.reqId = reqId;
+    }
+
+    @Override
+    public void handle(INcApplicationContext appContext) throws HyracksDataException, InterruptedException {
+        INCMessageBroker broker = (INCMessageBroker) appContext.getServiceContext().getMessageBroker();
+        PersistentLocalResourceRepository localResourceRepository =
+                (PersistentLocalResourceRepository) appContext.getLocalResourceRepository();
+        Map<Long, LocalResource> localResources = localResourceRepository.loadAndGetAllResources();
+        for (LocalResource resource : localResources.values()) {
+            DatasetLocalResource lr = (DatasetLocalResource) resource.getResource();
+            if (MetadataIndexImmutableProperties.isMetadataDataset(lr.getDatasetId())) {
+                // skip metadata indexes
+                continue;
+            }
+            if (!validDatasetIds.contains(lr.getDatasetId())) {
+                LOGGER.warn("found invalid index {} with dataset id {}", resource.getPath(), lr.getDatasetId());
+                deleteInvalidIndex(appContext, localResourceRepository, resource);
+            }
+        }
+        try {
+            broker.sendMessageToPrimaryCC(new VoidResponse(reqId, null));
+        } catch (Exception e) {
+            LOGGER.error("failed to notify CC of storage clean up; halting...", e);
+            ExitUtil.halt(EC_NC_FAILED_TO_NOTIFY_TASKS_COMPLETED);
+        }
+    }
+
+    private void deleteInvalidIndex(INcApplicationContext appContext,
+            PersistentLocalResourceRepository localResourceRepository, LocalResource resource)
+            throws HyracksDataException {
+        IDatasetLifecycleManager lcManager = appContext.getDatasetLifecycleManager();
+        String resourceRelPath = resource.getPath();
+        synchronized (lcManager) {
+            IIndex index;
+            index = lcManager.get(resourceRelPath);
+            if (index != null) {
+                LOGGER.warn("unregistering invalid index {}", resourceRelPath);
+                lcManager.unregister(resourceRelPath);
+            } else {
+                LOGGER.warn("initializing unregistered invalid index {}", resourceRelPath);
+                try {
+                    index = resource.getResource().createInstance(appContext.getServiceContext());
+                } catch (Exception e) {
+                    LOGGER.warn("failed to initialize invalid index {}", resourceRelPath, e);
+                }
+            }
+            localResourceRepository.delete(resourceRelPath);
+            if (index != null) {
+                index.destroy();
+            }
+        }
+    }
+
+    @Override
+    public String toString() {
+        return StorageCleanupRequestMessage.class.getSimpleName();
+    }
+}
diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/message/VoidResponse.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/message/VoidResponse.java
new file mode 100644
index 0000000..6a51c2d
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/message/VoidResponse.java
@@ -0,0 +1,63 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.
+ */
+package org.apache.asterix.app.message;
+
+import org.apache.asterix.common.dataflow.ICcApplicationContext;
+import org.apache.asterix.common.messaging.api.ICCMessageBroker;
+import org.apache.asterix.common.messaging.api.ICCMessageBroker.ResponseState;
+import org.apache.asterix.common.messaging.api.ICcAddressedMessage;
+import org.apache.asterix.common.messaging.api.INcResponse;
+import org.apache.commons.lang3.tuple.MutablePair;
+import org.apache.hyracks.api.exceptions.HyracksDataException;
+
+/**
+ * A response to a request only indicating success or failure
+ */
+public class VoidResponse implements ICcAddressedMessage, INcResponse {
+
+    private static final long serialVersionUID = 1L;
+    private final Long reqId;
+    private final Throwable failure;
+
+    public VoidResponse(Long reqId, Throwable failure) {
+        this.reqId = reqId;
+        this.failure = failure;
+    }
+
+    @Override
+    public void handle(ICcApplicationContext appCtx) throws HyracksDataException, InterruptedException {
+        ICCMessageBroker broker = (ICCMessageBroker) appCtx.getServiceContext().getMessageBroker();
+        broker.respond(reqId, this);
+    }
+
+    @Override
+    public void setResult(MutablePair<ResponseState, Object> result) {
+        if (failure != null) {
+            result.setLeft(ResponseState.FAILURE);
+            result.setRight(failure);
+        } else {
+            result.setLeft(ResponseState.SUCCESS);
+        }
+    }
+
+    @Override
+    public String toString() {
+        return "{ \"response\" : \"" + (failure == null ? "success" : failure.getClass().getSimpleName()) + "\"}";
+    }
+}
diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/nc/NCAppRuntimeContext.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/nc/NCAppRuntimeContext.java
index a9a3a3e..9aa433f 100644
--- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/nc/NCAppRuntimeContext.java
+++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/nc/NCAppRuntimeContext.java
@@ -209,15 +209,15 @@
             }
             localResourceRepository.deleteStorageData();
         }
-        int maxConcurrentFlushes = storageProperties.getMaxConcurrentFlushes();
-        if (maxConcurrentFlushes <= 0) {
-            maxConcurrentFlushes = ioManager.getIODevices().size();
+        int maxScheduledFlushes = storageProperties.getMaxScheduledFlushes();
+        if (maxScheduledFlushes <= 0) {
+            maxScheduledFlushes = ioManager.getIODevices().size();
             if (LOGGER.isInfoEnabled()) {
-                LOGGER.info("The value of maxConcurrentFlushes is not provided. Setting maxConcurrentFlushes = {}.",
-                        maxConcurrentFlushes);
+                LOGGER.info("The value of maxScheduledFlushes is not provided. Setting maxConcurrentFlushes = {}.",
+                        maxScheduledFlushes);
             }
         }
-        virtualBufferCache = new GlobalVirtualBufferCache(allocator, storageProperties, maxConcurrentFlushes);
+        virtualBufferCache = new GlobalVirtualBufferCache(allocator, storageProperties, maxScheduledFlushes);
         // Must start vbc now instead of by life cycle component manager (lccm) because lccm happens after
         // the metadata bootstrap task
         ((ILifeCycleComponent) virtualBufferCache).start();
@@ -584,24 +584,24 @@
         String schedulerName = storageProperties.getIoScheduler();
         int numPartitions = ioManager.getIODevices().size();
 
-        int maxRunningFlushes = storageProperties.getMaxRunningFlushes(numPartitions);
+        int maxConcurrentFlushes = storageProperties.geMaxConcurrentFlushes(numPartitions);
         int maxScheduledMerges = storageProperties.getMaxScheduledMerges(numPartitions);
-        int maxRunningMerges = storageProperties.getMaxRunningMerges(numPartitions);
+        int maxConcurrentMerges = storageProperties.getMaxConcurrentMerges(numPartitions);
 
         ILSMIOOperationScheduler ioScheduler = null;
         if (AsynchronousScheduler.FACTORY.getName().equalsIgnoreCase(schedulerName)) {
             ioScheduler = AsynchronousScheduler.FACTORY.createIoScheduler(getServiceContext().getThreadFactory(),
-                    HaltCallback.INSTANCE, maxRunningFlushes, maxScheduledMerges, maxRunningMerges);
+                    HaltCallback.INSTANCE, maxConcurrentFlushes, maxScheduledMerges, maxConcurrentMerges);
         } else if (GreedyScheduler.FACTORY.getName().equalsIgnoreCase(schedulerName)) {
             ioScheduler = GreedyScheduler.FACTORY.createIoScheduler(getServiceContext().getThreadFactory(),
-                    HaltCallback.INSTANCE, maxRunningFlushes, maxScheduledMerges, maxRunningMerges);
+                    HaltCallback.INSTANCE, maxConcurrentFlushes, maxScheduledMerges, maxConcurrentMerges);
         } else {
             if (LOGGER.isWarnEnabled()) {
                 LOGGER.log(Level.WARN,
                         "Unknown storage I/O scheduler: " + schedulerName + "; defaulting to greedy I/O scheduler.");
             }
             ioScheduler = GreedyScheduler.FACTORY.createIoScheduler(getServiceContext().getThreadFactory(),
-                    HaltCallback.INSTANCE, maxRunningFlushes, maxScheduledMerges, maxRunningMerges);
+                    HaltCallback.INSTANCE, maxConcurrentFlushes, maxScheduledMerges, maxConcurrentMerges);
         }
         return ioScheduler;
     }
diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/nc/RecoveryManager.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/nc/RecoveryManager.java
index 1461ef4..65cb36a 100644
--- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/nc/RecoveryManager.java
+++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/nc/RecoveryManager.java
@@ -599,22 +599,19 @@
             throw new ACIDException(e);
         }
         long lastLSN = txnContext.getLastLSN();
-        if (LOGGER.isInfoEnabled()) {
-            LOGGER.info("rollbacking transaction log records from " + firstLSN + " to " + lastLSN);
-        }
+        boolean infoEnabled = LOGGER.isInfoEnabled();
         // check if the transaction actually wrote some logs.
         if (firstLSN == TransactionManagementConstants.LogManagerConstants.TERMINAL_LSN || firstLSN > lastLSN) {
-            if (LOGGER.isInfoEnabled()) {
-                LOGGER.info("no need to roll back as there were no operations by the txn " + txnContext.getTxnId());
+            if (infoEnabled) {
+                LOGGER.info("no need to rollback as there were no operations by " + txnContext.getTxnId());
             }
             return;
         }
-
-        // While reading log records from firstLsn to lastLsn, collect uncommitted txn's Lsns
-        if (LOGGER.isInfoEnabled()) {
-            LOGGER.info("collecting loser transaction's LSNs from " + firstLSN + " to " + lastLSN);
+        if (infoEnabled) {
+            LOGGER.info("rolling back transaction log records from " + firstLSN + " to " + lastLSN + " for "
+                    + txnContext.getTxnId());
         }
-
+        // While reading log records from firstLsn to lastLsn, collect uncommitted txn's Lsns
         Map<TxnEntityId, List<Long>> jobLoserEntity2LSNsMap = new HashMap<>();
         TxnEntityId tempKeyTxnEntityId = new TxnEntityId(-1, -1, -1, null, -1, false);
         int updateLogCount = 0;
@@ -722,7 +719,7 @@
                 }
             }
 
-            if (LOGGER.isInfoEnabled()) {
+            if (infoEnabled) {
                 LOGGER.info("undone loser transaction's effect");
                 LOGGER.info("[RecoveryManager's rollback log count] update/entityCommit/undo:" + updateLogCount + "/"
                         + entityCommitLogCount + "/" + undoCount);
diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/QueryTranslator.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/QueryTranslator.java
index ce6e10d..d2e9284 100644
--- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/QueryTranslator.java
+++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/QueryTranslator.java
@@ -18,6 +18,8 @@
  */
 package org.apache.asterix.app.translator;
 
+import static org.apache.asterix.common.utils.IdentifierUtil.dataset;
+import static org.apache.asterix.common.utils.IdentifierUtil.dataverse;
 import static org.apache.asterix.lang.common.statement.CreateFullTextFilterStatement.FIELD_TYPE_STOPWORDS;
 
 import java.io.File;
@@ -605,7 +607,7 @@
                 (ILSMMergePolicyFactory) Class.forName(compactionPolicyFactoryClassName).newInstance();
         if (isExternalDataset && mergePolicyFactory.getName().compareTo("correlated-prefix") == 0) {
             throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc,
-                    "The correlated-prefix merge policy cannot be used with external dataset.");
+                    "The correlated-prefix merge policy cannot be used with external " + dataset() + "s");
         }
         if (compactionPolicyProperties == null) {
             if (mergePolicyFactory.getName().compareTo("no-merge") != 0) {
@@ -842,8 +844,8 @@
                             TransactionState.COMMIT);
                     break;
                 default:
-                    throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc,
-                            "Unknown dataset type " + dsType);
+                    throw new CompilationException(ErrorCode.COMPILATION_UNKNOWN_DATASET_TYPE,
+                            dataset.getDatasetType().toString());
             }
 
             // #. initialize DatasetIdFactory if it is not initialized.
@@ -950,7 +952,8 @@
             SourceLocation sourceLoc) throws AlgebricksException {
         if (itemType.getTypeTag() != ATypeTag.OBJECT) {
             throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc,
-                    String.format("Dataset %s has to be a record type.", isMetaItemType ? "meta type" : "type"));
+                    String.format(StringUtils.capitalize(dataset()) + " %s has to be a record type.",
+                            isMetaItemType ? "meta type" : "type"));
         }
     }
 
@@ -1448,13 +1451,13 @@
                 // Check if the dataset is indexible
                 if (!ExternalIndexingOperations.isIndexible((ExternalDatasetDetails) ds.getDatasetDetails())) {
                     throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc,
-                            "dataset using " + ((ExternalDatasetDetails) ds.getDatasetDetails()).getAdapter()
-                                    + " Adapter can't be indexed");
+                            dataset() + " using " + ((ExternalDatasetDetails) ds.getDatasetDetails()).getAdapter()
+                                    + " adapter can't be indexed");
                 }
                 // Check if the name of the index is valid
                 if (!ExternalIndexingOperations.isValidIndexName(index.getDatasetName(), index.getIndexName())) {
                     throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc,
-                            "external dataset index name is invalid");
+                            "external " + dataset() + " index name is invalid");
                 }
 
                 // Check if the files index exist
@@ -1779,7 +1782,7 @@
         if (dataverseName.equals(MetadataBuiltinEntities.DEFAULT_DATAVERSE_NAME)
                 || dataverseName.equals(MetadataConstants.METADATA_DATAVERSE_NAME)) {
             throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc,
-                    dataverseName + " dataverse can't be dropped");
+                    dataverseName + " " + dataverse() + " can't be dropped");
         }
         lockUtil.dropDataverseBegin(lockManager, metadataProvider.getLocks(), dataverseName);
         try {
@@ -2144,7 +2147,7 @@
                     }
                 } else if (ExternalIndexingOperations.isFileIndex(index)) {
                     throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc,
-                            "Dropping a dataset's files index is not allowed.");
+                            "Dropping " + dataset() + " files index is not allowed.");
                 }
                 ensureNonPrimaryIndexDrop(index, sourceLoc);
                 // #. prepare a job to drop the index in NC.
@@ -3045,7 +3048,8 @@
         CreateSynonymStatement css = (CreateSynonymStatement) stmt;
         DataverseName dataverseName = getActiveDataverseName(css.getDataverseName());
         String synonymName = css.getSynonymName();
-        DataverseName objectDataverseName = getActiveDataverseName(css.getObjectDataverseName());
+        DataverseName objectDataverseName =
+                css.getObjectDataverseName() != null ? css.getObjectDataverseName() : dataverseName;
         String objectName = css.getObjectName();
         lockUtil.createSynonymBegin(lockManager, metadataProvider.getLocks(), dataverseName, synonymName);
         try {
@@ -3449,8 +3453,9 @@
         ActiveEntityEventsListener listener =
                 (ActiveEntityEventsListener) activeNotificationHandler.getListener(feedId);
         if (listener != null && listener.getState() != ActivityState.STOPPED) {
-            throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc, "Feed " + feedId
-                    + " is currently active and connected to the following dataset(s) \n" + listener.toString());
+            throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc,
+                    "Feed " + feedId + " is currently active and connected to the following " + dataset() + "(s) \n"
+                            + listener.toString());
         } else if (listener != null) {
             listener.unregister();
         }
@@ -3476,7 +3481,7 @@
             if (feedPolicy == null) {
                 if (!stmtFeedPolicyDrop.getIfExists()) {
                     throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc,
-                            "Unknown policy " + policyName + " in dataverse " + dataverseName);
+                            "Unknown policy " + policyName + " in " + dataverse() + " " + dataverseName);
                 }
                 MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
                 return;
@@ -3607,7 +3612,7 @@
                     feedName, datasetName);
             if (fc != null) {
                 throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc,
-                        "Feed" + feedName + " is already connected dataset " + datasetName);
+                        "Feed" + feedName + " is already connected to " + dataset() + " " + datasetName);
             }
             fc = new FeedConnection(dataverseName, feedName, datasetName, appliedFunctions, policyName, whereClauseBody,
                     outputType.getTypeName());
@@ -3691,7 +3696,7 @@
             List<Index> indexes = MetadataManager.INSTANCE.getDatasetIndexes(mdTxnCtx, dataverseName, datasetName);
             if (indexes.isEmpty()) {
                 throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc,
-                        "Cannot compact the extrenal dataset " + datasetName + " because it has no indexes");
+                        "Cannot compact the external " + dataset() + " " + datasetName + " because it has no indexes");
             }
             Dataverse dataverse =
                     MetadataManager.INSTANCE.getDataverse(metadataProvider.getMetadataTxnContext(), dataverseName);
@@ -4004,14 +4009,14 @@
             }
             // Dataset external ?
             if (ds.getDatasetType() != DatasetType.EXTERNAL) {
-                throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc,
-                        "dataset " + datasetName + " in dataverse " + dataverseName + " is not an external dataset");
+                throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc, dataset() + " " + datasetName
+                        + " in " + dataverse() + " " + dataverseName + " is not an external " + dataset());
             }
             // Dataset has indexes ?
             indexes = MetadataManager.INSTANCE.getDatasetIndexes(mdTxnCtx, dataverseName, datasetName);
             if (indexes.isEmpty()) {
-                throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc, "External dataset " + datasetName
-                        + " in dataverse " + dataverseName + " doesn't have any index");
+                throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc, "External " + dataset() + " "
+                        + datasetName + " in " + dataverse() + " " + dataverseName + " doesn't have any index");
             }
 
             // Record transaction time
diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/hyracks/bootstrap/GlobalRecoveryManager.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/hyracks/bootstrap/GlobalRecoveryManager.java
index 8165316..ae50880 100644
--- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/hyracks/bootstrap/GlobalRecoveryManager.java
+++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/hyracks/bootstrap/GlobalRecoveryManager.java
@@ -18,11 +18,14 @@
  */
 package org.apache.asterix.hyracks.bootstrap;
 
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.List;
 import java.util.Set;
+import java.util.concurrent.TimeUnit;
 
+import org.apache.asterix.app.message.StorageCleanupRequestMessage;
 import org.apache.asterix.common.api.IClusterManagementWork;
 import org.apache.asterix.common.api.IClusterManagementWork.ClusterState;
 import org.apache.asterix.common.cluster.IGlobalRecoveryManager;
@@ -32,6 +35,7 @@
 import org.apache.asterix.common.context.IStorageComponentProvider;
 import org.apache.asterix.common.dataflow.ICcApplicationContext;
 import org.apache.asterix.external.indexing.ExternalFile;
+import org.apache.asterix.messaging.CCMessageBroker;
 import org.apache.asterix.metadata.MetadataManager;
 import org.apache.asterix.metadata.MetadataTransactionContext;
 import org.apache.asterix.metadata.declared.MetadataProvider;
@@ -51,6 +55,8 @@
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 
+import it.unimi.dsi.fastutil.ints.IntOpenHashSet;
+
 public class GlobalRecoveryManager implements IGlobalRecoveryManager {
 
     private static final Logger LOGGER = LogManager.getLogger();
@@ -111,6 +117,10 @@
             LOGGER.info("Starting Global Recovery");
             MetadataManager.INSTANCE.init();
             MetadataTransactionContext mdTxnCtx = MetadataManager.INSTANCE.beginTransaction();
+            if (appCtx.getStorageProperties().isStorageGlobalCleanup()) {
+                int storageGlobalCleanupTimeout = appCtx.getStorageProperties().getStorageGlobalCleanupTimeout();
+                performGlobalStorageCleanup(mdTxnCtx, storageGlobalCleanupTimeout);
+            }
             mdTxnCtx = doRecovery(appCtx, mdTxnCtx);
             MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
             recoveryCompleted = true;
@@ -122,6 +132,27 @@
         }
     }
 
+    protected void performGlobalStorageCleanup(MetadataTransactionContext mdTxnCtx, int storageGlobalCleanupTimeoutSecs)
+            throws Exception {
+        List<Dataverse> dataverses = MetadataManager.INSTANCE.getDataverses(mdTxnCtx);
+        IntOpenHashSet validDatasetIds = new IntOpenHashSet();
+        for (Dataverse dataverse : dataverses) {
+            List<Dataset> dataverseDatasets =
+                    MetadataManager.INSTANCE.getDataverseDatasets(mdTxnCtx, dataverse.getDataverseName());
+            dataverseDatasets.stream().mapToInt(Dataset::getDatasetId).forEach(validDatasetIds::add);
+        }
+        ICcApplicationContext ccAppCtx = (ICcApplicationContext) serviceCtx.getApplicationContext();
+        final List<String> ncs = new ArrayList<>(ccAppCtx.getClusterStateManager().getParticipantNodes());
+        CCMessageBroker messageBroker = (CCMessageBroker) ccAppCtx.getServiceContext().getMessageBroker();
+        long reqId = messageBroker.newRequestId();
+        List<StorageCleanupRequestMessage> requests = new ArrayList<>();
+        for (int i = 0; i < ncs.size(); i++) {
+            requests.add(new StorageCleanupRequestMessage(reqId, validDatasetIds));
+        }
+        messageBroker.sendSyncRequestToNCs(reqId, ncs, requests,
+                TimeUnit.SECONDS.toMillis(storageGlobalCleanupTimeoutSecs));
+    }
+
     protected MetadataTransactionContext doRecovery(ICcApplicationContext appCtx, MetadataTransactionContext mdTxnCtx)
             throws Exception {
         // Loop over datasets
diff --git a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/dataflow/GlobalStorageCleanupTest.java b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/dataflow/GlobalStorageCleanupTest.java
new file mode 100644
index 0000000..84107fb
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/dataflow/GlobalStorageCleanupTest.java
@@ -0,0 +1,68 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.
+ */
+package org.apache.asterix.test.dataflow;
+
+import java.io.File;
+
+import org.apache.asterix.app.bootstrap.TestNodeController;
+import org.apache.asterix.test.common.TestHelper;
+import org.apache.hyracks.api.exceptions.ErrorCode;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.junit.Assert;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+public class GlobalStorageCleanupTest {
+
+    public static final Logger LOGGER = LogManager.getLogger();
+    private static TestNodeController nc;
+
+    @BeforeClass
+    public static void setUp() throws Exception {
+        System.out.println("SetUp: ");
+        TestHelper.deleteExistingInstanceFiles();
+        String configPath = System.getProperty("user.dir") + File.separator + "src" + File.separator + "test"
+                + File.separator + "resources" + File.separator + "cc.conf";
+        nc = new TestNodeController(configPath, false);
+    }
+
+    @Test
+    public void globalStorageCleanup() throws Exception {
+        nc.init(true);
+        LSMFlushRecoveryTest.nc = nc;
+        LSMFlushRecoveryTest lsmFlushRecoveryTest = new LSMFlushRecoveryTest();
+        lsmFlushRecoveryTest.initializeTestCtx();
+        lsmFlushRecoveryTest.createIndex();
+        lsmFlushRecoveryTest.readIndex();
+        nc.deInit(false);
+        nc.init(false);
+        // the index should deleted after the node initialization
+        lsmFlushRecoveryTest.initializeTestCtx();
+        boolean failedToReadIndex = false;
+        try {
+            lsmFlushRecoveryTest.readIndex();
+        } catch (Exception e) {
+            failedToReadIndex = true;
+            Assert.assertTrue(e.getMessage().contains(ErrorCode.INDEX_DOES_NOT_EXIST.errorCode()));
+        }
+        Assert.assertTrue(failedToReadIndex);
+        nc.deInit(false);
+    }
+}
diff --git a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/dataflow/LSMFlushRecoveryTest.java b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/dataflow/LSMFlushRecoveryTest.java
index c3a6839..9c6e95e 100644
--- a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/dataflow/LSMFlushRecoveryTest.java
+++ b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/dataflow/LSMFlushRecoveryTest.java
@@ -77,7 +77,7 @@
 
 public class LSMFlushRecoveryTest {
     public static final Logger LOGGER = LogManager.getLogger();
-    private static TestNodeController nc;
+    public static TestNodeController nc;
     private static Dataset dataset;
     private static PrimaryIndexInfo[] primaryIndexInfos;
     private static SecondaryIndexInfo[] secondaryIndexInfo;
@@ -156,6 +156,10 @@
     }
 
     private void initializeNc(boolean cleanUpOnStart) throws Exception {
+        // disable global clean up for this test to allow internal index creation
+        List<Pair<IOption, Object>> opts = new ArrayList<>();
+        opts.add(Pair.of(Option.STORAGE_GLOBAL_CLEANUP, false));
+        nc.setOpts(opts);
         nc.init(cleanUpOnStart);
         ncAppCtx = nc.getAppRuntimeContext();
         // Override the LSMIOScheduler to avoid halting on failure and enable
@@ -177,7 +181,7 @@
         dsLifecycleMgr = ncAppCtx.getDatasetLifecycleManager();
     }
 
-    private void createIndex() throws Exception {
+    public void createIndex() throws Exception {
         dataset = StorageTestUtils.DATASET;
         secondaryIndexEntity = new Index(dataset.getDataverseName(), dataset.getDatasetName(), SECONDARY_INDEX_NAME,
                 SECONDARY_INDEX_TYPE, SECONDARY_INDEX_FIELD_NAMES, SECONDARY_INDEX_FIELD_INDICATORS,
@@ -193,7 +197,7 @@
 
     }
 
-    private void initializeTestCtx() throws Exception {
+    public void initializeTestCtx() throws Exception {
         JobId jobId = nc.newJobId();
         testCtxs = new IHyracksTaskContext[NUM_PARTITIONS];
         for (int i = 0; i < NUM_PARTITIONS; i++) {
@@ -203,7 +207,7 @@
                 new TransactionOptions(ITransactionManager.AtomicityLevel.ENTITY_LEVEL));
     }
 
-    private void readIndex() throws HyracksDataException {
+    public void readIndex() throws HyracksDataException {
         primaryIndexDataflowHelpers = new IIndexDataflowHelper[NUM_PARTITIONS];
         primaryIndexes = new TestLsmBtree[NUM_PARTITIONS];
         for (int i = 0; i < NUM_PARTITIONS; i++) {
diff --git a/asterixdb/asterix-app/src/test/resources/TweetSent/roundtrip.py b/asterixdb/asterix-app/src/test/resources/TweetSent/roundtrip.py
index 8b8fced..9058a01 100644
--- a/asterixdb/asterix-app/src/test/resources/TweetSent/roundtrip.py
+++ b/asterixdb/asterix-app/src/test/resources/TweetSent/roundtrip.py
@@ -15,6 +15,7 @@
 # specific language governing permissions and limitations
 # under the License.
 import math
+import os
 
 def sqrt(num):
     return math.sqrt(num)
@@ -26,3 +27,6 @@
 
     def warning(self):
         raise ArithmeticError("oof")
+
+    def env_test(self, key):
+        return os.environ[key]
diff --git a/asterixdb/asterix-app/src/test/resources/cc.conf b/asterixdb/asterix-app/src/test/resources/cc.conf
index e2cd5b9..953284964 100644
--- a/asterixdb/asterix-app/src/test/resources/cc.conf
+++ b/asterixdb/asterix-app/src/test/resources/cc.conf
@@ -34,6 +34,7 @@
 [nc]
 credential.file=src/test/resources/security/passwd
 python.cmd.autolocate=true
+python.env=FOO=BAR=BAZ,BAR=BAZ
 address=127.0.0.1
 command=asterixnc
 app.class=org.apache.asterix.hyracks.bootstrap.NCApplication
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/queries/leftouterjoin/query-ASTERIXDB-2857.sqlpp b/asterixdb/asterix-app/src/test/resources/optimizerts/queries/leftouterjoin/query-ASTERIXDB-2857.sqlpp
new file mode 100644
index 0000000..2304349
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/queries/leftouterjoin/query-ASTERIXDB-2857.sqlpp
@@ -0,0 +1,63 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.
+ */
+
+/*
+ * Test nested loop implementation of left outer join
+ */
+
+drop  dataverse test if exists;
+create  dataverse test;
+
+use test;
+
+create type tenkType as closed {
+  unique1         : integer,
+  unique2         : integer,
+  two             : integer,
+  four            : integer,
+  ten             : integer,
+  twenty          : integer,
+  hundred         : integer,
+  thousand        : integer,
+  twothousand     : integer,
+  fivethous       : integer,
+  tenthous        : integer,
+  odd100          : integer,
+  even100         : integer,
+  stringu1        : string,
+  stringu2        : string,
+  string4         : string
+};
+
+create dataset tenk(tenkType) primary key unique2;
+
+SELECT
+   t0.unique1 AS t0_unique1,
+   t1.unique1 AS t1_unique1,
+   t2.unique1 AS t2_unique1
+FROM (
+   SELECT unique1, unique2 FROM tenk WHERE unique2 < 2
+) t0
+INNER JOIN (
+   SELECT unique1, unique2 FROM tenk WHERE unique2 < 4
+) t1 ON t0.unique2 = t1.unique2
+LEFT JOIN (
+   SELECT unique1, unique2 FROM tenk WHERE unique2 < 6
+) t2 ON t0.unique2 + t2.unique2 = 2 * t1.unique2
+ORDER BY t0_unique1, t1_unique1, t2_unique1;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/binary/query_id/query_id.2.update.sqlpp b/asterixdb/asterix-app/src/test/resources/optimizerts/queries/subquery/in_let_8.sqlpp
similarity index 62%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/binary/query_id/query_id.2.update.sqlpp
copy to asterixdb/asterix-app/src/test/resources/optimizerts/queries/subquery/in_let_8.sqlpp
index 5812379..3699c56 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/binary/query_id/query_id.2.update.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/queries/subquery/in_let_8.sqlpp
@@ -17,8 +17,29 @@
  * under the License.
  */
 
-use tpch;
+drop  dataverse test if exists;
+create  dataverse test;
 
-load dataset LineItem
-using localfs
-(("path"="asterix_nc1://data/tpch0.001/lineitem.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+use test;
+
+SET `compiler.sort.parallel` "false";
+SET `rewrite_internal_queryuid_pk` "false";
+
+create type test.TestType as
+{
+  id : integer
+};
+
+create dataset cart(TestType) primary key id;
+
+select c1.cid, i1.pid, i1.ts
+from cart c1 unnest c1.items i1
+where i1.ts >= 2000 and i1.pid in
+(
+  select value i2.pid
+  from cart c2 unnest c2.items i2
+  where i2.ts >= 2000
+  group by i2.pid
+  having count(*) > 1
+)
+order by c1.cid;
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/queries/subquery/query-ASTERIXDB-2845.sqlpp b/asterixdb/asterix-app/src/test/resources/optimizerts/queries/subquery/query-ASTERIXDB-2845.sqlpp
index 4494cfa..4299ab7 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/queries/subquery/query-ASTERIXDB-2845.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/queries/subquery/query-ASTERIXDB-2845.sqlpp
@@ -35,7 +35,7 @@
 j AS (
   SELECT jid, a
   FROM jds
-), ---> 3 rows (jid=1, 2, 3)
+),
 
 m1 AS (
   SELECT jid, x, COUNT(1) c1
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/ASTERIXDB-2402.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/ASTERIXDB-2402.plan
index f6599e6..da74507 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/ASTERIXDB-2402.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/ASTERIXDB-2402.plan
@@ -50,7 +50,7 @@
                                                 -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                                   -- HYBRID_HASH_JOIN [$$309][$$222]  |PARTITIONED|
                                                     -- HASH_PARTITION_EXCHANGE [$$309]  |PARTITIONED|
-                                                      -- ASSIGN  |PARTITIONED|
+                                                      -- RUNNING_AGGREGATE  |PARTITIONED|
                                                         -- STREAM_PROJECT  |PARTITIONED|
                                                           -- UNNEST  |PARTITIONED|
                                                             -- STREAM_PROJECT  |PARTITIONED|
@@ -93,12 +93,13 @@
                                                                                                                 -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                                                                                                   -- NESTED_LOOP  |PARTITIONED|
                                                                                                                     -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                                                                      -- ASSIGN  |PARTITIONED|
-                                                                                                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                                                                          -- DATASOURCE_SCAN (channels.EmergenciesNearMeChannelChannelSubscriptions)  |PARTITIONED|
-                                                                                                                            -- BROADCAST_EXCHANGE  |PARTITIONED|
-                                                                                                                              -- ASSIGN  |UNPARTITIONED|
-                                                                                                                                -- EMPTY_TUPLE_SOURCE  |UNPARTITIONED|
+                                                                                                                      -- RUNNING_AGGREGATE  |PARTITIONED|
+                                                                                                                        -- ASSIGN  |PARTITIONED|
+                                                                                                                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                                                            -- DATASOURCE_SCAN (channels.EmergenciesNearMeChannelChannelSubscriptions)  |PARTITIONED|
+                                                                                                                              -- BROADCAST_EXCHANGE  |PARTITIONED|
+                                                                                                                                -- ASSIGN  |UNPARTITIONED|
+                                                                                                                                  -- EMPTY_TUPLE_SOURCE  |UNPARTITIONED|
                                                                                                                     -- BROADCAST_EXCHANGE  |PARTITIONED|
                                                                                                                       -- ASSIGN  |PARTITIONED|
                                                                                                                         -- STREAM_SELECT  |PARTITIONED|
@@ -139,12 +140,13 @@
                                                                                                           -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                                                                                             -- NESTED_LOOP  |PARTITIONED|
                                                                                                               -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                                                                -- ASSIGN  |PARTITIONED|
-                                                                                                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                                                                    -- DATASOURCE_SCAN (channels.EmergenciesNearMeChannelChannelSubscriptions)  |PARTITIONED|
-                                                                                                                      -- BROADCAST_EXCHANGE  |PARTITIONED|
-                                                                                                                        -- ASSIGN  |UNPARTITIONED|
-                                                                                                                          -- EMPTY_TUPLE_SOURCE  |UNPARTITIONED|
+                                                                                                                -- RUNNING_AGGREGATE  |PARTITIONED|
+                                                                                                                  -- ASSIGN  |PARTITIONED|
+                                                                                                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                                                      -- DATASOURCE_SCAN (channels.EmergenciesNearMeChannelChannelSubscriptions)  |PARTITIONED|
+                                                                                                                        -- BROADCAST_EXCHANGE  |PARTITIONED|
+                                                                                                                          -- ASSIGN  |UNPARTITIONED|
+                                                                                                                            -- EMPTY_TUPLE_SOURCE  |UNPARTITIONED|
                                                                                                               -- BROADCAST_EXCHANGE  |PARTITIONED|
                                                                                                                 -- ASSIGN  |PARTITIONED|
                                                                                                                   -- STREAM_SELECT  |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/leftouterjoin/query-ASTERIXDB-2857.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/leftouterjoin/query-ASTERIXDB-2857.plan
new file mode 100644
index 0000000..393f1db
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/leftouterjoin/query-ASTERIXDB-2857.plan
@@ -0,0 +1,39 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- SORT_MERGE_EXCHANGE [$$136(ASC), $$137(ASC), $#3(ASC) ]  |PARTITIONED|
+          -- STABLE_SORT [$$136(ASC), $$137(ASC), $#3(ASC)]  |PARTITIONED|
+            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+              -- STREAM_PROJECT  |PARTITIONED|
+                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                  -- NESTED_LOOP  |PARTITIONED|
+                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                      -- STREAM_PROJECT  |PARTITIONED|
+                        -- ASSIGN  |PARTITIONED|
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            -- HYBRID_HASH_JOIN [$$127][$$128]  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- STREAM_PROJECT  |PARTITIONED|
+                                  -- ASSIGN  |PARTITIONED|
+                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                      -- BTREE_SEARCH (test.tenk.tenk)  |PARTITIONED|
+                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                          -- ASSIGN  |PARTITIONED|
+                                            -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- STREAM_PROJECT  |PARTITIONED|
+                                  -- ASSIGN  |PARTITIONED|
+                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                      -- BTREE_SEARCH (test.tenk.tenk)  |PARTITIONED|
+                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                          -- ASSIGN  |PARTITIONED|
+                                            -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                    -- BROADCAST_EXCHANGE  |PARTITIONED|
+                      -- STREAM_PROJECT  |PARTITIONED|
+                        -- ASSIGN  |PARTITIONED|
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            -- BTREE_SEARCH (test.tenk.tenk)  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- ASSIGN  |PARTITIONED|
+                                  -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/query-issue562_ps.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/query-issue562_ps.plan
index 29fcd1d..8230bf0 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/query-issue562_ps.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/query-issue562_ps.plan
@@ -46,20 +46,21 @@
                                                         -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                                           -- HYBRID_HASH_JOIN [$$146][$$153]  |PARTITIONED|
                                                             -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                              -- ASSIGN  |PARTITIONED|
-                                                                -- STREAM_PROJECT  |PARTITIONED|
-                                                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                    -- HYBRID_HASH_JOIN [$$phone_substr][$$148]  |PARTITIONED|
-                                                                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                        -- STREAM_PROJECT  |PARTITIONED|
-                                                                          -- ASSIGN  |PARTITIONED|
-                                                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                              -- DATASOURCE_SCAN (tpch.Customer)  |PARTITIONED|
-                                                                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                                  -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                                                                      -- BROADCAST_EXCHANGE  |PARTITIONED|
-                                                                        -- UNNEST  |UNPARTITIONED|
-                                                                          -- EMPTY_TUPLE_SOURCE  |UNPARTITIONED|
+                                                              -- RUNNING_AGGREGATE  |PARTITIONED|
+                                                                -- ASSIGN  |PARTITIONED|
+                                                                  -- STREAM_PROJECT  |PARTITIONED|
+                                                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                      -- HYBRID_HASH_JOIN [$$phone_substr][$$148]  |PARTITIONED|
+                                                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                          -- STREAM_PROJECT  |PARTITIONED|
+                                                                            -- ASSIGN  |PARTITIONED|
+                                                                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                -- DATASOURCE_SCAN (tpch.Customer)  |PARTITIONED|
+                                                                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                                                                        -- BROADCAST_EXCHANGE  |PARTITIONED|
+                                                                          -- UNNEST  |UNPARTITIONED|
+                                                                            -- EMPTY_TUPLE_SOURCE  |UNPARTITIONED|
                                                             -- HASH_PARTITION_EXCHANGE [$$153]  |PARTITIONED|
                                                               -- ASSIGN  |PARTITIONED|
                                                                 -- STREAM_PROJECT  |PARTITIONED|
@@ -112,20 +113,21 @@
                                                                   -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                                                     -- HYBRID_HASH_JOIN [$$146][$$153]  |PARTITIONED|
                                                                       -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                        -- ASSIGN  |PARTITIONED|
-                                                                          -- STREAM_PROJECT  |PARTITIONED|
-                                                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                              -- HYBRID_HASH_JOIN [$$phone_substr][$$148]  |PARTITIONED|
-                                                                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                                  -- STREAM_PROJECT  |PARTITIONED|
-                                                                                    -- ASSIGN  |PARTITIONED|
-                                                                                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                                        -- DATASOURCE_SCAN (tpch.Customer)  |PARTITIONED|
-                                                                                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                                            -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                                                                                -- BROADCAST_EXCHANGE  |PARTITIONED|
-                                                                                  -- UNNEST  |UNPARTITIONED|
-                                                                                    -- EMPTY_TUPLE_SOURCE  |UNPARTITIONED|
+                                                                        -- RUNNING_AGGREGATE  |PARTITIONED|
+                                                                          -- ASSIGN  |PARTITIONED|
+                                                                            -- STREAM_PROJECT  |PARTITIONED|
+                                                                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                -- HYBRID_HASH_JOIN [$$phone_substr][$$148]  |PARTITIONED|
+                                                                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                    -- STREAM_PROJECT  |PARTITIONED|
+                                                                                      -- ASSIGN  |PARTITIONED|
+                                                                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                          -- DATASOURCE_SCAN (tpch.Customer)  |PARTITIONED|
+                                                                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                                                                                  -- BROADCAST_EXCHANGE  |PARTITIONED|
+                                                                                    -- UNNEST  |UNPARTITIONED|
+                                                                                      -- EMPTY_TUPLE_SOURCE  |UNPARTITIONED|
                                                                       -- HASH_PARTITION_EXCHANGE [$$153]  |PARTITIONED|
                                                                         -- ASSIGN  |PARTITIONED|
                                                                           -- STREAM_PROJECT  |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/exists.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/exists.plan
index cb471a9..b81c831 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/exists.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/exists.plan
@@ -40,7 +40,7 @@
                                             -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                               -- HYBRID_HASH_JOIN [$$174][$$171]  |PARTITIONED|
                                                 -- HASH_PARTITION_EXCHANGE [$$174]  |PARTITIONED|
-                                                  -- ASSIGN  |PARTITIONED|
+                                                  -- RUNNING_AGGREGATE  |PARTITIONED|
                                                     -- STREAM_PROJECT  |PARTITIONED|
                                                       -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                                         -- NESTED_LOOP  |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/exists_ps.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/exists_ps.plan
index 52d6e25..2cccba4 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/exists_ps.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/exists_ps.plan
@@ -46,7 +46,7 @@
                                                         -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                                           -- HYBRID_HASH_JOIN [$$174][$$171]  |PARTITIONED|
                                                             -- HASH_PARTITION_EXCHANGE [$$174]  |PARTITIONED|
-                                                              -- ASSIGN  |PARTITIONED|
+                                                              -- RUNNING_AGGREGATE  |PARTITIONED|
                                                                 -- STREAM_PROJECT  |PARTITIONED|
                                                                   -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                                                     -- NESTED_LOOP  |PARTITIONED|
@@ -123,7 +123,7 @@
                                                                   -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                                                     -- HYBRID_HASH_JOIN [$$174][$$171]  |PARTITIONED|
                                                                       -- HASH_PARTITION_EXCHANGE [$$174]  |PARTITIONED|
-                                                                        -- ASSIGN  |PARTITIONED|
+                                                                        -- RUNNING_AGGREGATE  |PARTITIONED|
                                                                           -- STREAM_PROJECT  |PARTITIONED|
                                                                             -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                                                               -- NESTED_LOOP  |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/in_let_3.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/in_let_3.plan
index 3464eae..ec77d62 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/in_let_3.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/in_let_3.plan
@@ -22,8 +22,8 @@
                                 -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                   -- HYBRID_HASH_JOIN [$$97][$$pid]  |PARTITIONED|
                                     -- HASH_PARTITION_EXCHANGE [$$97]  |PARTITIONED|
-                                      -- ASSIGN  |PARTITIONED|
-                                        -- STREAM_SELECT  |PARTITIONED|
+                                      -- STREAM_SELECT  |PARTITIONED|
+                                        -- RUNNING_AGGREGATE  |PARTITIONED|
                                           -- STREAM_PROJECT  |PARTITIONED|
                                             -- ASSIGN  |PARTITIONED|
                                               -- STREAM_PROJECT  |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/in_let_4.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/in_let_4.plan
index a500b92..ee9243d 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/in_let_4.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/in_let_4.plan
@@ -22,8 +22,8 @@
                                 -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                   -- HYBRID_HASH_JOIN [$$116][$$108]  |PARTITIONED|
                                     -- HASH_PARTITION_EXCHANGE [$$116]  |PARTITIONED|
-                                      -- ASSIGN  |PARTITIONED|
-                                        -- STREAM_SELECT  |PARTITIONED|
+                                      -- STREAM_SELECT  |PARTITIONED|
+                                        -- RUNNING_AGGREGATE  |PARTITIONED|
                                           -- STREAM_PROJECT  |PARTITIONED|
                                             -- ASSIGN  |PARTITIONED|
                                               -- STREAM_PROJECT  |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/in_let_5.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/in_let_5.plan
index 88cacfa..c670194 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/in_let_5.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/in_let_5.plan
@@ -22,8 +22,8 @@
                                 -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                   -- HYBRID_HASH_JOIN [$$116][$$108]  |PARTITIONED|
                                     -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                      -- ASSIGN  |PARTITIONED|
-                                        -- STREAM_SELECT  |PARTITIONED|
+                                      -- STREAM_SELECT  |PARTITIONED|
+                                        -- RUNNING_AGGREGATE  |PARTITIONED|
                                           -- STREAM_PROJECT  |PARTITIONED|
                                             -- ASSIGN  |PARTITIONED|
                                               -- STREAM_PROJECT  |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/in_let_8.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/in_let_8.plan
new file mode 100644
index 0000000..878c508
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/in_let_8.plan
@@ -0,0 +1,72 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- SORT_MERGE_EXCHANGE [$$101(ASC) ]  |PARTITIONED|
+          -- STABLE_SORT [$$101(ASC)]  |PARTITIONED|
+            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+              -- STREAM_PROJECT  |PARTITIONED|
+                -- STREAM_SELECT  |PARTITIONED|
+                  -- STREAM_PROJECT  |PARTITIONED|
+                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                      -- PRE_CLUSTERED_GROUP_BY[$$94, $$i1, $$97, $$93, $$104]  |PARTITIONED|
+                              {
+                                -- AGGREGATE  |LOCAL|
+                                  -- STREAM_SELECT  |LOCAL|
+                                    -- NESTED_TUPLE_SOURCE  |LOCAL|
+                              }
+                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                          -- STABLE_SORT [$$94(ASC), $$i1(ASC), $$97(ASC), $$93(ASC), $$104(ASC)]  |PARTITIONED|
+                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                              -- STREAM_PROJECT  |PARTITIONED|
+                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                  -- HYBRID_HASH_JOIN [$$97][$$pid]  |PARTITIONED|
+                                    -- HASH_PARTITION_EXCHANGE [$$97]  |PARTITIONED|
+                                      -- WINDOW_STREAM  |PARTITIONED|
+                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                          -- STABLE_SORT [$$94(ASC), $$i1(ASC), $$97(ASC), $$93(ASC)]  |PARTITIONED|
+                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                              -- ASSIGN  |PARTITIONED|
+                                                -- STREAM_PROJECT  |PARTITIONED|
+                                                  -- UNNEST  |PARTITIONED|
+                                                    -- STREAM_PROJECT  |PARTITIONED|
+                                                      -- ASSIGN  |PARTITIONED|
+                                                        -- STREAM_PROJECT  |PARTITIONED|
+                                                          -- ASSIGN  |PARTITIONED|
+                                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                              -- REPLICATE  |PARTITIONED|
+                                                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                  -- DATASOURCE_SCAN (test.cart)  |PARTITIONED|
+                                                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                      -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                      -- ASSIGN  |PARTITIONED|
+                                        -- STREAM_PROJECT  |PARTITIONED|
+                                          -- STREAM_SELECT  |PARTITIONED|
+                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                              -- SORT_GROUP_BY[$$112]  |PARTITIONED|
+                                                      {
+                                                        -- AGGREGATE  |LOCAL|
+                                                          -- NESTED_TUPLE_SOURCE  |LOCAL|
+                                                      }
+                                                -- HASH_PARTITION_EXCHANGE [$$112]  |PARTITIONED|
+                                                  -- SORT_GROUP_BY[$$92]  |PARTITIONED|
+                                                          {
+                                                            -- AGGREGATE  |LOCAL|
+                                                              -- NESTED_TUPLE_SOURCE  |LOCAL|
+                                                          }
+                                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                      -- STREAM_PROJECT  |PARTITIONED|
+                                                        -- STREAM_SELECT  |PARTITIONED|
+                                                          -- ASSIGN  |PARTITIONED|
+                                                            -- STREAM_PROJECT  |PARTITIONED|
+                                                              -- UNNEST  |PARTITIONED|
+                                                                -- STREAM_PROJECT  |PARTITIONED|
+                                                                  -- ASSIGN  |PARTITIONED|
+                                                                    -- STREAM_PROJECT  |PARTITIONED|
+                                                                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                        -- REPLICATE  |PARTITIONED|
+                                                                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                            -- DATASOURCE_SCAN (test.cart)  |PARTITIONED|
+                                                                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/not_exists.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/not_exists.plan
index d631085..5501c67 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/not_exists.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/not_exists.plan
@@ -40,7 +40,7 @@
                                             -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                               -- HYBRID_HASH_JOIN [$$175][$$172]  |PARTITIONED|
                                                 -- HASH_PARTITION_EXCHANGE [$$175]  |PARTITIONED|
-                                                  -- ASSIGN  |PARTITIONED|
+                                                  -- RUNNING_AGGREGATE  |PARTITIONED|
                                                     -- STREAM_PROJECT  |PARTITIONED|
                                                       -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                                         -- NESTED_LOOP  |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/not_exists_ps.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/not_exists_ps.plan
index 5ab7d30..c8944e7 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/not_exists_ps.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/not_exists_ps.plan
@@ -46,7 +46,7 @@
                                                         -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                                           -- HYBRID_HASH_JOIN [$$175][$$172]  |PARTITIONED|
                                                             -- HASH_PARTITION_EXCHANGE [$$175]  |PARTITIONED|
-                                                              -- ASSIGN  |PARTITIONED|
+                                                              -- RUNNING_AGGREGATE  |PARTITIONED|
                                                                 -- STREAM_PROJECT  |PARTITIONED|
                                                                   -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                                                     -- NESTED_LOOP  |PARTITIONED|
@@ -123,7 +123,7 @@
                                                                   -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                                                     -- HYBRID_HASH_JOIN [$$175][$$172]  |PARTITIONED|
                                                                       -- HASH_PARTITION_EXCHANGE [$$175]  |PARTITIONED|
-                                                                        -- ASSIGN  |PARTITIONED|
+                                                                        -- RUNNING_AGGREGATE  |PARTITIONED|
                                                                           -- STREAM_PROJECT  |PARTITIONED|
                                                                             -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                                                               -- NESTED_LOOP  |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/query-ASTERIXDB-2845.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/query-ASTERIXDB-2845.plan
index 7cbb67f..4b32064 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/query-ASTERIXDB-2845.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/query-ASTERIXDB-2845.plan
@@ -7,75 +7,38 @@
             -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
               -- STREAM_PROJECT  |PARTITIONED|
                 -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                  -- HYBRID_HASH_JOIN [$$295][$$296]  |PARTITIONED|
-                    -- HASH_PARTITION_EXCHANGE [$$295]  |PARTITIONED|
-                      -- ASSIGN  |PARTITIONED|
-                        -- STREAM_PROJECT  |PARTITIONED|
-                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- HYBRID_HASH_JOIN [$$277][$$jid]  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- STREAM_PROJECT  |PARTITIONED|
-                                  -- ASSIGN  |PARTITIONED|
-                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                      -- DATASOURCE_SCAN (test.jds)  |PARTITIONED|
-                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                          -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                              -- HASH_PARTITION_EXCHANGE [$$jid]  |PARTITIONED|
-                                -- STREAM_PROJECT  |PARTITIONED|
-                                  -- ASSIGN  |PARTITIONED|
-                                    -- STREAM_PROJECT  |PARTITIONED|
-                                      -- ASSIGN  |PARTITIONED|
-                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                          -- SORT_GROUP_BY[$$319, $$320]  |PARTITIONED|
-                                                  {
-                                                    -- AGGREGATE  |LOCAL|
-                                                      -- NESTED_TUPLE_SOURCE  |LOCAL|
-                                                  }
-                                            -- HASH_PARTITION_EXCHANGE [$$319, $$320]  |PARTITIONED|
-                                              -- SORT_GROUP_BY[$$273, $$274]  |PARTITIONED|
-                                                      {
-                                                        -- AGGREGATE  |LOCAL|
-                                                          -- NESTED_TUPLE_SOURCE  |LOCAL|
-                                                      }
-                                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                  -- STREAM_PROJECT  |PARTITIONED|
-                                                    -- ASSIGN  |PARTITIONED|
-                                                      -- STREAM_PROJECT  |PARTITIONED|
-                                                        -- ASSIGN  |PARTITIONED|
-                                                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                            -- REPLICATE  |PARTITIONED|
-                                                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                -- STREAM_PROJECT  |PARTITIONED|
-                                                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                    -- DATASOURCE_SCAN (test.mds)  |PARTITIONED|
-                                                                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                        -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                    -- HASH_PARTITION_EXCHANGE [$$296]  |PARTITIONED|
-                      -- NESTED_LOOP  |PARTITIONED|
+                  -- HYBRID_HASH_JOIN [$$277, $$240, $$290, $$287, $#4, $$295][$$303, $$308, $$298, $$299, $$300, $$301]  |PARTITIONED|
+                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                      -- WINDOW_STREAM  |PARTITIONED|
                         -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                          -- STREAM_PROJECT  |PARTITIONED|
-                            -- STREAM_SELECT  |PARTITIONED|
-                              -- ASSIGN  |PARTITIONED|
-                                -- STREAM_PROJECT  |PARTITIONED|
-                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                    -- HYBRID_HASH_JOIN [$$303][$$306]  |PARTITIONED|
-                                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                        -- STREAM_PROJECT  |PARTITIONED|
-                                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                            -- DATASOURCE_SCAN (test.jds)  |PARTITIONED|
+                          -- STABLE_SORT [$$277(ASC), $$240(ASC), $$290(ASC), $$287(ASC), $#4(ASC)]  |PARTITIONED|
+                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                              -- STREAM_PROJECT  |PARTITIONED|
+                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                  -- HYBRID_HASH_JOIN [$$277][$$jid]  |PARTITIONED|
+                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                      -- STREAM_PROJECT  |PARTITIONED|
+                                        -- ASSIGN  |PARTITIONED|
+                                          -- STREAM_PROJECT  |PARTITIONED|
+                                            -- ASSIGN  |PARTITIONED|
                                               -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                                      -- HASH_PARTITION_EXCHANGE [$$306]  |PARTITIONED|
+                                                -- REPLICATE  |PARTITIONED|
+                                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                    -- DATASOURCE_SCAN (test.jds)  |PARTITIONED|
+                                                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                        -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                                    -- HASH_PARTITION_EXCHANGE [$$jid]  |PARTITIONED|
+                                      -- ASSIGN  |PARTITIONED|
                                         -- STREAM_PROJECT  |PARTITIONED|
                                           -- ASSIGN  |PARTITIONED|
                                             -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                              -- SORT_GROUP_BY[$$322, $$323]  |PARTITIONED|
+                                              -- SORT_GROUP_BY[$$324, $$325]  |PARTITIONED|
                                                       {
                                                         -- AGGREGATE  |LOCAL|
                                                           -- NESTED_TUPLE_SOURCE  |LOCAL|
                                                       }
-                                                -- HASH_PARTITION_EXCHANGE [$$322, $$323]  |PARTITIONED|
-                                                  -- SORT_GROUP_BY[$$311, $$312]  |PARTITIONED|
+                                                -- HASH_PARTITION_EXCHANGE [$$324, $$325]  |PARTITIONED|
+                                                  -- SORT_GROUP_BY[$$273, $$274]  |PARTITIONED|
                                                           {
                                                             -- AGGREGATE  |LOCAL|
                                                               -- NESTED_TUPLE_SOURCE  |LOCAL|
@@ -83,26 +46,74 @@
                                                     -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                                       -- STREAM_PROJECT  |PARTITIONED|
                                                         -- ASSIGN  |PARTITIONED|
-                                                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                            -- REPLICATE  |PARTITIONED|
+                                                          -- STREAM_PROJECT  |PARTITIONED|
+                                                            -- ASSIGN  |PARTITIONED|
                                                               -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                -- STREAM_PROJECT  |PARTITIONED|
+                                                                -- REPLICATE  |PARTITIONED|
                                                                   -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                    -- DATASOURCE_SCAN (test.mds)  |PARTITIONED|
+                                                                    -- STREAM_PROJECT  |PARTITIONED|
                                                                       -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                        -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                                                                        -- DATASOURCE_SCAN (test.mds)  |PARTITIONED|
+                                                                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                            -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                    -- HASH_PARTITION_EXCHANGE [$$303]  |PARTITIONED|
+                      -- NESTED_LOOP  |PARTITIONED|
+                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                          -- STREAM_SELECT  |PARTITIONED|
+                            -- WINDOW_STREAM  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- STABLE_SORT [$$303(ASC), $$308(ASC), $$298(ASC), $$299(ASC), $$300(ASC)]  |PARTITIONED|
+                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                    -- STREAM_PROJECT  |PARTITIONED|
+                                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                        -- HYBRID_HASH_JOIN [$$303][$$306]  |PARTITIONED|
+                                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                            -- STREAM_PROJECT  |PARTITIONED|
+                                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                -- REPLICATE  |PARTITIONED|
+                                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                    -- DATASOURCE_SCAN (test.jds)  |PARTITIONED|
+                                                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                        -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                                          -- HASH_PARTITION_EXCHANGE [$$306]  |PARTITIONED|
+                                            -- ASSIGN  |PARTITIONED|
+                                              -- STREAM_PROJECT  |PARTITIONED|
+                                                -- ASSIGN  |PARTITIONED|
+                                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                    -- SORT_GROUP_BY[$$327, $$328]  |PARTITIONED|
+                                                            {
+                                                              -- AGGREGATE  |LOCAL|
+                                                                -- NESTED_TUPLE_SOURCE  |LOCAL|
+                                                            }
+                                                      -- HASH_PARTITION_EXCHANGE [$$327, $$328]  |PARTITIONED|
+                                                        -- SORT_GROUP_BY[$$311, $$312]  |PARTITIONED|
+                                                                {
+                                                                  -- AGGREGATE  |LOCAL|
+                                                                    -- NESTED_TUPLE_SOURCE  |LOCAL|
+                                                                }
+                                                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                            -- STREAM_PROJECT  |PARTITIONED|
+                                                              -- ASSIGN  |PARTITIONED|
+                                                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                  -- REPLICATE  |PARTITIONED|
+                                                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                      -- STREAM_PROJECT  |PARTITIONED|
+                                                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                          -- DATASOURCE_SCAN (test.mds)  |PARTITIONED|
+                                                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
                         -- BROADCAST_EXCHANGE  |PARTITIONED|
                           -- STREAM_PROJECT  |PARTITIONED|
                             -- ASSIGN  |PARTITIONED|
                               -- STREAM_PROJECT  |PARTITIONED|
                                 -- ASSIGN  |PARTITIONED|
                                   -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                    -- SORT_GROUP_BY[$$325, $$326]  |PARTITIONED|
+                                    -- SORT_GROUP_BY[$$330, $$331]  |PARTITIONED|
                                             {
                                               -- AGGREGATE  |LOCAL|
                                                 -- NESTED_TUPLE_SOURCE  |LOCAL|
                                             }
-                                      -- HASH_PARTITION_EXCHANGE [$$325, $$326]  |PARTITIONED|
+                                      -- HASH_PARTITION_EXCHANGE [$$330, $$331]  |PARTITIONED|
                                         -- SORT_GROUP_BY[$$275, $$276]  |PARTITIONED|
                                                 {
                                                   -- AGGREGATE  |LOCAL|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/tpcds/query-ASTERIXDB-1581-correlated-2.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/tpcds/query-ASTERIXDB-1581-correlated-2.plan
index 972e59e..bda21dc 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/tpcds/query-ASTERIXDB-1581-correlated-2.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/tpcds/query-ASTERIXDB-1581-correlated-2.plan
@@ -55,26 +55,26 @@
                                                                         -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                                                           -- ASSIGN  |PARTITIONED|
                                                                             -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                                                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                          -- HASH_PARTITION_EXCHANGE [$$187]  |PARTITIONED|
                                                             -- STREAM_PROJECT  |PARTITIONED|
                                                               -- ASSIGN  |PARTITIONED|
-                                                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                  -- SORT_GROUP_BY[$$234]  |PARTITIONED|
-                                                                          {
-                                                                            -- AGGREGATE  |LOCAL|
-                                                                              -- NESTED_TUPLE_SOURCE  |LOCAL|
-                                                                          }
-                                                                    -- HASH_PARTITION_EXCHANGE [$$234]  |PARTITIONED|
-                                                                      -- PRE_CLUSTERED_GROUP_BY[$$186]  |PARTITIONED|
-                                                                              {
-                                                                                -- AGGREGATE  |LOCAL|
-                                                                                  -- STREAM_SELECT  |LOCAL|
-                                                                                    -- NESTED_TUPLE_SOURCE  |LOCAL|
-                                                                              }
-                                                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                          -- STABLE_SORT [$$186(ASC)]  |PARTITIONED|
-                                                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                              -- STREAM_PROJECT  |PARTITIONED|
+                                                                -- STREAM_PROJECT  |PARTITIONED|
+                                                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                    -- SORT_GROUP_BY[$$233, $$234]  |PARTITIONED|
+                                                                            {
+                                                                              -- AGGREGATE  |LOCAL|
+                                                                                -- NESTED_TUPLE_SOURCE  |LOCAL|
+                                                                            }
+                                                                      -- HASH_PARTITION_EXCHANGE [$$233, $$234]  |PARTITIONED|
+                                                                        -- PRE_CLUSTERED_GROUP_BY[$$181, $$186]  |PARTITIONED|
+                                                                                {
+                                                                                  -- AGGREGATE  |LOCAL|
+                                                                                    -- STREAM_SELECT  |LOCAL|
+                                                                                      -- NESTED_TUPLE_SOURCE  |LOCAL|
+                                                                                }
+                                                                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                            -- STABLE_SORT [$$181(ASC), $$186(ASC)]  |PARTITIONED|
+                                                                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                                                                 -- STREAM_PROJECT  |PARTITIONED|
                                                                                   -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                                                                     -- HYBRID_HASH_JOIN [$$170][$$169]  |PARTITIONED|
@@ -84,49 +84,50 @@
                                                                                             -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                                                                               -- REPLICATE  |PARTITIONED|
                                                                                                 -- HASH_PARTITION_EXCHANGE [$$204]  |PARTITIONED|
-                                                                                                  -- STREAM_PROJECT  |PARTITIONED|
-                                                                                                    -- ASSIGN  |PARTITIONED|
-                                                                                                      -- STREAM_PROJECT  |PARTITIONED|
-                                                                                                        -- STREAM_SELECT  |PARTITIONED|
-                                                                                                          -- STREAM_PROJECT  |PARTITIONED|
-                                                                                                            -- ASSIGN  |PARTITIONED|
-                                                                                                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                                                                -- PRE_CLUSTERED_GROUP_BY[$$208]  |PARTITIONED|
-                                                                                                                        {
-                                                                                                                          -- AGGREGATE  |LOCAL|
+                                                                                                  -- RUNNING_AGGREGATE  |PARTITIONED|
+                                                                                                    -- STREAM_PROJECT  |PARTITIONED|
+                                                                                                      -- ASSIGN  |PARTITIONED|
+                                                                                                        -- STREAM_PROJECT  |PARTITIONED|
+                                                                                                          -- STREAM_SELECT  |PARTITIONED|
+                                                                                                            -- STREAM_PROJECT  |PARTITIONED|
+                                                                                                              -- ASSIGN  |PARTITIONED|
+                                                                                                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                                                  -- PRE_CLUSTERED_GROUP_BY[$$208]  |PARTITIONED|
+                                                                                                                          {
                                                                                                                             -- AGGREGATE  |LOCAL|
-                                                                                                                              -- STREAM_SELECT  |LOCAL|
-                                                                                                                                -- NESTED_TUPLE_SOURCE  |LOCAL|
-                                                                                                                        }
-                                                                                                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                                                                    -- STREAM_PROJECT  |PARTITIONED|
-                                                                                                                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                                                                        -- HYBRID_HASH_JOIN [$$208][$$209]  |PARTITIONED|
-                                                                                                                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                                                                            -- REPLICATE  |PARTITIONED|
-                                                                                                                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                                                                                -- BTREE_SEARCH (tpcds.item.item)  |PARTITIONED|
-                                                                                                                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                                                                                    -- ASSIGN  |PARTITIONED|
-                                                                                                                                      -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                                                                                                                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                                                                            -- STREAM_PROJECT  |PARTITIONED|
-                                                                                                                              -- ASSIGN  |PARTITIONED|
+                                                                                                                              -- AGGREGATE  |LOCAL|
+                                                                                                                                -- STREAM_SELECT  |LOCAL|
+                                                                                                                                  -- NESTED_TUPLE_SOURCE  |LOCAL|
+                                                                                                                          }
+                                                                                                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                                                      -- STREAM_PROJECT  |PARTITIONED|
+                                                                                                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                                                          -- HYBRID_HASH_JOIN [$$208][$$209]  |PARTITIONED|
+                                                                                                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                                                              -- REPLICATE  |PARTITIONED|
                                                                                                                                 -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                                                                                  -- REPLICATE  |PARTITIONED|
-                                                                                                                                    -- HASH_PARTITION_EXCHANGE [$$207]  |PARTITIONED|
-                                                                                                                                      -- STREAM_PROJECT  |PARTITIONED|
-                                                                                                                                        -- ASSIGN  |PARTITIONED|
-                                                                                                                                          -- STREAM_PROJECT  |PARTITIONED|
-                                                                                                                                            -- ASSIGN  |PARTITIONED|
-                                                                                                                                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                                                                                                -- REPLICATE  |PARTITIONED|
-                                                                                                                                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                                                                                                    -- STREAM_PROJECT  |PARTITIONED|
-                                                                                                                                                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                                                                                                        -- DATASOURCE_SCAN (tpcds.store_sales)  |PARTITIONED|
-                                                                                                                                                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                                                                                                            -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                                                                                                                                  -- BTREE_SEARCH (tpcds.item.item)  |PARTITIONED|
+                                                                                                                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                                                                      -- ASSIGN  |PARTITIONED|
+                                                                                                                                        -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                                                                                                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                                                              -- STREAM_PROJECT  |PARTITIONED|
+                                                                                                                                -- ASSIGN  |PARTITIONED|
+                                                                                                                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                                                                    -- REPLICATE  |PARTITIONED|
+                                                                                                                                      -- HASH_PARTITION_EXCHANGE [$$207]  |PARTITIONED|
+                                                                                                                                        -- STREAM_PROJECT  |PARTITIONED|
+                                                                                                                                          -- ASSIGN  |PARTITIONED|
+                                                                                                                                            -- STREAM_PROJECT  |PARTITIONED|
+                                                                                                                                              -- ASSIGN  |PARTITIONED|
+                                                                                                                                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                                                                                  -- REPLICATE  |PARTITIONED|
+                                                                                                                                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                                                                                      -- STREAM_PROJECT  |PARTITIONED|
+                                                                                                                                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                                                                                          -- DATASOURCE_SCAN (tpcds.store_sales)  |PARTITIONED|
+                                                                                                                                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                                                                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
                                                                                       -- HASH_PARTITION_EXCHANGE [$$169]  |PARTITIONED|
                                                                                         -- STREAM_PROJECT  |PARTITIONED|
                                                                                           -- ASSIGN  |PARTITIONED|
@@ -138,171 +139,173 @@
                                                                                                       -- DATASOURCE_SCAN (tpcds.store_sales)  |PARTITIONED|
                                                                                                         -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                                                                                           -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                              -- HASH_PARTITION_EXCHANGE [$$225]  |PARTITIONED|
                                                 -- STREAM_PROJECT  |PARTITIONED|
                                                   -- ASSIGN  |PARTITIONED|
-                                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                      -- SORT_GROUP_BY[$$240]  |PARTITIONED|
-                                                              {
-                                                                -- AGGREGATE  |LOCAL|
-                                                                  -- NESTED_TUPLE_SOURCE  |LOCAL|
-                                                              }
-                                                        -- HASH_PARTITION_EXCHANGE [$$240]  |PARTITIONED|
-                                                          -- PRE_CLUSTERED_GROUP_BY[$$224]  |PARTITIONED|
-                                                                  {
-                                                                    -- AGGREGATE  |LOCAL|
-                                                                      -- STREAM_SELECT  |LOCAL|
-                                                                        -- NESTED_TUPLE_SOURCE  |LOCAL|
-                                                                  }
-                                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                              -- STABLE_SORT [$$224(ASC)]  |PARTITIONED|
-                                                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                  -- STREAM_PROJECT  |PARTITIONED|
+                                                    -- STREAM_PROJECT  |PARTITIONED|
+                                                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                        -- SORT_GROUP_BY[$$239, $$240]  |PARTITIONED|
+                                                                {
+                                                                  -- AGGREGATE  |LOCAL|
+                                                                    -- NESTED_TUPLE_SOURCE  |LOCAL|
+                                                                }
+                                                          -- HASH_PARTITION_EXCHANGE [$$239, $$240]  |PARTITIONED|
+                                                            -- PRE_CLUSTERED_GROUP_BY[$$191, $$224]  |PARTITIONED|
+                                                                    {
+                                                                      -- AGGREGATE  |LOCAL|
+                                                                        -- STREAM_SELECT  |LOCAL|
+                                                                          -- NESTED_TUPLE_SOURCE  |LOCAL|
+                                                                    }
+                                                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                -- STABLE_SORT [$$191(ASC), $$224(ASC)]  |PARTITIONED|
+                                                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                                                     -- STREAM_PROJECT  |PARTITIONED|
                                                                       -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                                                         -- HYBRID_HASH_JOIN [$$174][$$173]  |PARTITIONED|
                                                                           -- HASH_PARTITION_EXCHANGE [$$174]  |PARTITIONED|
-                                                                            -- STREAM_PROJECT  |PARTITIONED|
-                                                                              -- ASSIGN  |PARTITIONED|
-                                                                                -- STREAM_PROJECT  |PARTITIONED|
-                                                                                  -- STREAM_SELECT  |PARTITIONED|
-                                                                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                                      -- PRE_CLUSTERED_GROUP_BY[$$194]  |PARTITIONED|
-                                                                                              {
-                                                                                                -- AGGREGATE  |LOCAL|
+                                                                            -- RUNNING_AGGREGATE  |PARTITIONED|
+                                                                              -- STREAM_PROJECT  |PARTITIONED|
+                                                                                -- ASSIGN  |PARTITIONED|
+                                                                                  -- STREAM_PROJECT  |PARTITIONED|
+                                                                                    -- STREAM_SELECT  |PARTITIONED|
+                                                                                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                        -- PRE_CLUSTERED_GROUP_BY[$$194]  |PARTITIONED|
+                                                                                                {
                                                                                                   -- AGGREGATE  |LOCAL|
-                                                                                                    -- STREAM_SELECT  |LOCAL|
-                                                                                                      -- NESTED_TUPLE_SOURCE  |LOCAL|
-                                                                                              }
-                                                                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                                          -- STABLE_SORT [$$194(ASC)]  |PARTITIONED|
-                                                                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                                              -- STREAM_PROJECT  |PARTITIONED|
-                                                                                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                                                  -- HYBRID_HASH_JOIN [$$194][$$171]  |PARTITIONED|
-                                                                                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                                                      -- PRE_CLUSTERED_GROUP_BY[$$195]  |PARTITIONED|
-                                                                                                              {
-                                                                                                                -- AGGREGATE  |LOCAL|
+                                                                                                    -- AGGREGATE  |LOCAL|
+                                                                                                      -- STREAM_SELECT  |LOCAL|
+                                                                                                        -- NESTED_TUPLE_SOURCE  |LOCAL|
+                                                                                                }
+                                                                                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                            -- STABLE_SORT [$$194(ASC)]  |PARTITIONED|
+                                                                                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                                -- STREAM_PROJECT  |PARTITIONED|
+                                                                                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                                    -- HYBRID_HASH_JOIN [$$194][$$171]  |PARTITIONED|
+                                                                                                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                                        -- PRE_CLUSTERED_GROUP_BY[$$195]  |PARTITIONED|
+                                                                                                                {
                                                                                                                   -- AGGREGATE  |LOCAL|
-                                                                                                                    -- STREAM_SELECT  |LOCAL|
-                                                                                                                      -- NESTED_TUPLE_SOURCE  |LOCAL|
-                                                                                                              }
-                                                                                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                                                          -- STREAM_PROJECT  |PARTITIONED|
-                                                                                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                                                              -- HYBRID_HASH_JOIN [$$195][$$197]  |PARTITIONED|
-                                                                                                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                                                                  -- STREAM_PROJECT  |PARTITIONED|
-                                                                                                                    -- ASSIGN  |PARTITIONED|
-                                                                                                                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                                                                        -- REPLICATE  |PARTITIONED|
-                                                                                                                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                                                                            -- BTREE_SEARCH (tpcds.item.item)  |PARTITIONED|
-                                                                                                                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                                                                                -- ASSIGN  |PARTITIONED|
-                                                                                                                                  -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                                                                                                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                                                                  -- ASSIGN  |PARTITIONED|
-                                                                                                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                                                                      -- SORT_GROUP_BY[$$237]  |PARTITIONED|
-                                                                                                                              {
-                                                                                                                                -- AGGREGATE  |LOCAL|
-                                                                                                                                  -- NESTED_TUPLE_SOURCE  |LOCAL|
-                                                                                                                              }
-                                                                                                                        -- HASH_PARTITION_EXCHANGE [$$237]  |PARTITIONED|
-                                                                                                                          -- PRE_CLUSTERED_GROUP_BY[$$203]  |PARTITIONED|
-                                                                                                                                  {
-                                                                                                                                    -- AGGREGATE  |LOCAL|
-                                                                                                                                      -- STREAM_SELECT  |LOCAL|
-                                                                                                                                        -- NESTED_TUPLE_SOURCE  |LOCAL|
-                                                                                                                                  }
-                                                                                                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                                                                              -- STABLE_SORT [$$203(ASC)]  |PARTITIONED|
-                                                                                                                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                                                                                  -- STREAM_PROJECT  |PARTITIONED|
-                                                                                                                                    -- STREAM_PROJECT  |PARTITIONED|
-                                                                                                                                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                                                                                        -- HYBRID_HASH_JOIN [$$204][$$207]  |PARTITIONED|
-                                                                                                                                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                                                                                            -- REPLICATE  |PARTITIONED|
-                                                                                                                                              -- HASH_PARTITION_EXCHANGE [$$204]  |PARTITIONED|
-                                                                                                                                                -- STREAM_PROJECT  |PARTITIONED|
-                                                                                                                                                  -- ASSIGN  |PARTITIONED|
-                                                                                                                                                    -- STREAM_PROJECT  |PARTITIONED|
-                                                                                                                                                      -- STREAM_SELECT  |PARTITIONED|
-                                                                                                                                                        -- STREAM_PROJECT  |PARTITIONED|
-                                                                                                                                                          -- ASSIGN  |PARTITIONED|
-                                                                                                                                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                                                                                                              -- PRE_CLUSTERED_GROUP_BY[$$208]  |PARTITIONED|
-                                                                                                                                                                      {
-                                                                                                                                                                        -- AGGREGATE  |LOCAL|
-                                                                                                                                                                          -- AGGREGATE  |LOCAL|
-                                                                                                                                                                            -- STREAM_SELECT  |LOCAL|
-                                                                                                                                                                              -- NESTED_TUPLE_SOURCE  |LOCAL|
-                                                                                                                                                                      }
-                                                                                                                                                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                                                                                                                  -- STREAM_PROJECT  |PARTITIONED|
-                                                                                                                                                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                                                                                                                      -- HYBRID_HASH_JOIN [$$208][$$209]  |PARTITIONED|
-                                                                                                                                                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                                                                                                                          -- REPLICATE  |PARTITIONED|
-                                                                                                                                                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                                                                                                                              -- BTREE_SEARCH (tpcds.item.item)  |PARTITIONED|
-                                                                                                                                                                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                                                                                                                                  -- ASSIGN  |PARTITIONED|
-                                                                                                                                                                                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                                                                                                                                                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                                                                                                                          -- STREAM_PROJECT  |PARTITIONED|
-                                                                                                                                                                            -- ASSIGN  |PARTITIONED|
-                                                                                                                                                                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                                                                                                                                -- REPLICATE  |PARTITIONED|
-                                                                                                                                                                                  -- HASH_PARTITION_EXCHANGE [$$207]  |PARTITIONED|
-                                                                                                                                                                                    -- STREAM_PROJECT  |PARTITIONED|
-                                                                                                                                                                                      -- ASSIGN  |PARTITIONED|
-                                                                                                                                                                                        -- STREAM_PROJECT  |PARTITIONED|
-                                                                                                                                                                                          -- ASSIGN  |PARTITIONED|
-                                                                                                                                                                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                                                                                                                                              -- REPLICATE  |PARTITIONED|
-                                                                                                                                                                                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                                                                                                                                                  -- STREAM_PROJECT  |PARTITIONED|
-                                                                                                                                                                                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                                                                                                                                                      -- DATASOURCE_SCAN (tpcds.store_sales)  |PARTITIONED|
-                                                                                                                                                                                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                                                                                                                                                          -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                                                                                                                                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                                                                                            -- REPLICATE  |PARTITIONED|
-                                                                                                                                              -- HASH_PARTITION_EXCHANGE [$$207]  |PARTITIONED|
-                                                                                                                                                -- STREAM_PROJECT  |PARTITIONED|
-                                                                                                                                                  -- ASSIGN  |PARTITIONED|
-                                                                                                                                                    -- STREAM_PROJECT  |PARTITIONED|
-                                                                                                                                                      -- ASSIGN  |PARTITIONED|
-                                                                                                                                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                                                                                                          -- REPLICATE  |PARTITIONED|
-                                                                                                                                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                                                                                                              -- STREAM_PROJECT  |PARTITIONED|
-                                                                                                                                                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                                                                                                                  -- DATASOURCE_SCAN (tpcds.store_sales)  |PARTITIONED|
-                                                                                                                                                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                                                                                                                      -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                                                                                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                                                      -- STREAM_PROJECT  |PARTITIONED|
-                                                                                                        -- ASSIGN  |PARTITIONED|
+                                                                                                                    -- AGGREGATE  |LOCAL|
+                                                                                                                      -- STREAM_SELECT  |LOCAL|
+                                                                                                                        -- NESTED_TUPLE_SOURCE  |LOCAL|
+                                                                                                                }
                                                                                                           -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                                                            -- REPLICATE  |PARTITIONED|
-                                                                                                              -- HASH_PARTITION_EXCHANGE [$$207]  |PARTITIONED|
-                                                                                                                -- STREAM_PROJECT  |PARTITIONED|
-                                                                                                                  -- ASSIGN  |PARTITIONED|
+                                                                                                            -- STREAM_PROJECT  |PARTITIONED|
+                                                                                                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                                                -- HYBRID_HASH_JOIN [$$195][$$197]  |PARTITIONED|
+                                                                                                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                                                                                                     -- STREAM_PROJECT  |PARTITIONED|
                                                                                                                       -- ASSIGN  |PARTITIONED|
                                                                                                                         -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                                                                                                           -- REPLICATE  |PARTITIONED|
                                                                                                                             -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                                                                              -- STREAM_PROJECT  |PARTITIONED|
+                                                                                                                              -- BTREE_SEARCH (tpcds.item.item)  |PARTITIONED|
                                                                                                                                 -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                                                                                  -- DATASOURCE_SCAN (tpcds.store_sales)  |PARTITIONED|
+                                                                                                                                  -- ASSIGN  |PARTITIONED|
+                                                                                                                                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                                                                                                                  -- HASH_PARTITION_EXCHANGE [$$197]  |PARTITIONED|
+                                                                                                                    -- ASSIGN  |PARTITIONED|
+                                                                                                                      -- STREAM_PROJECT  |PARTITIONED|
+                                                                                                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                                                          -- SORT_GROUP_BY[$$236, $$237]  |PARTITIONED|
+                                                                                                                                  {
+                                                                                                                                    -- AGGREGATE  |LOCAL|
+                                                                                                                                      -- NESTED_TUPLE_SOURCE  |LOCAL|
+                                                                                                                                  }
+                                                                                                                            -- HASH_PARTITION_EXCHANGE [$$236, $$237]  |PARTITIONED|
+                                                                                                                              -- PRE_CLUSTERED_GROUP_BY[$$202, $$203]  |PARTITIONED|
+                                                                                                                                      {
+                                                                                                                                        -- AGGREGATE  |LOCAL|
+                                                                                                                                          -- STREAM_SELECT  |LOCAL|
+                                                                                                                                            -- NESTED_TUPLE_SOURCE  |LOCAL|
+                                                                                                                                      }
+                                                                                                                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                                                                  -- STABLE_SORT [$$202(ASC), $$203(ASC)]  |PARTITIONED|
                                                                                                                                     -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                                                                                      -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                                                                                                                                      -- STREAM_PROJECT  |PARTITIONED|
+                                                                                                                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                                                                          -- HYBRID_HASH_JOIN [$$204][$$207]  |PARTITIONED|
+                                                                                                                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                                                                              -- REPLICATE  |PARTITIONED|
+                                                                                                                                                -- HASH_PARTITION_EXCHANGE [$$204]  |PARTITIONED|
+                                                                                                                                                  -- RUNNING_AGGREGATE  |PARTITIONED|
+                                                                                                                                                    -- STREAM_PROJECT  |PARTITIONED|
+                                                                                                                                                      -- ASSIGN  |PARTITIONED|
+                                                                                                                                                        -- STREAM_PROJECT  |PARTITIONED|
+                                                                                                                                                          -- STREAM_SELECT  |PARTITIONED|
+                                                                                                                                                            -- STREAM_PROJECT  |PARTITIONED|
+                                                                                                                                                              -- ASSIGN  |PARTITIONED|
+                                                                                                                                                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                                                                                                  -- PRE_CLUSTERED_GROUP_BY[$$208]  |PARTITIONED|
+                                                                                                                                                                          {
+                                                                                                                                                                            -- AGGREGATE  |LOCAL|
+                                                                                                                                                                              -- AGGREGATE  |LOCAL|
+                                                                                                                                                                                -- STREAM_SELECT  |LOCAL|
+                                                                                                                                                                                  -- NESTED_TUPLE_SOURCE  |LOCAL|
+                                                                                                                                                                          }
+                                                                                                                                                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                                                                                                      -- STREAM_PROJECT  |PARTITIONED|
+                                                                                                                                                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                                                                                                          -- HYBRID_HASH_JOIN [$$208][$$209]  |PARTITIONED|
+                                                                                                                                                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                                                                                                              -- REPLICATE  |PARTITIONED|
+                                                                                                                                                                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                                                                                                                  -- BTREE_SEARCH (tpcds.item.item)  |PARTITIONED|
+                                                                                                                                                                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                                                                                                                      -- ASSIGN  |PARTITIONED|
+                                                                                                                                                                                        -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                                                                                                                                                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                                                                                                              -- STREAM_PROJECT  |PARTITIONED|
+                                                                                                                                                                                -- ASSIGN  |PARTITIONED|
+                                                                                                                                                                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                                                                                                                    -- REPLICATE  |PARTITIONED|
+                                                                                                                                                                                      -- HASH_PARTITION_EXCHANGE [$$207]  |PARTITIONED|
+                                                                                                                                                                                        -- STREAM_PROJECT  |PARTITIONED|
+                                                                                                                                                                                          -- ASSIGN  |PARTITIONED|
+                                                                                                                                                                                            -- STREAM_PROJECT  |PARTITIONED|
+                                                                                                                                                                                              -- ASSIGN  |PARTITIONED|
+                                                                                                                                                                                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                                                                                                                                  -- REPLICATE  |PARTITIONED|
+                                                                                                                                                                                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                                                                                                                                      -- STREAM_PROJECT  |PARTITIONED|
+                                                                                                                                                                                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                                                                                                                                          -- DATASOURCE_SCAN (tpcds.store_sales)  |PARTITIONED|
+                                                                                                                                                                                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                                                                                                                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                                                                                                                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                                                                              -- REPLICATE  |PARTITIONED|
+                                                                                                                                                -- HASH_PARTITION_EXCHANGE [$$207]  |PARTITIONED|
+                                                                                                                                                  -- STREAM_PROJECT  |PARTITIONED|
+                                                                                                                                                    -- ASSIGN  |PARTITIONED|
+                                                                                                                                                      -- STREAM_PROJECT  |PARTITIONED|
+                                                                                                                                                        -- ASSIGN  |PARTITIONED|
+                                                                                                                                                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                                                                                            -- REPLICATE  |PARTITIONED|
+                                                                                                                                                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                                                                                                -- STREAM_PROJECT  |PARTITIONED|
+                                                                                                                                                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                                                                                                    -- DATASOURCE_SCAN (tpcds.store_sales)  |PARTITIONED|
+                                                                                                                                                                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                                                                                                        -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                                                                                                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                                        -- STREAM_PROJECT  |PARTITIONED|
+                                                                                                          -- ASSIGN  |PARTITIONED|
+                                                                                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                                              -- REPLICATE  |PARTITIONED|
+                                                                                                                -- HASH_PARTITION_EXCHANGE [$$207]  |PARTITIONED|
+                                                                                                                  -- STREAM_PROJECT  |PARTITIONED|
+                                                                                                                    -- ASSIGN  |PARTITIONED|
+                                                                                                                      -- STREAM_PROJECT  |PARTITIONED|
+                                                                                                                        -- ASSIGN  |PARTITIONED|
+                                                                                                                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                                                            -- REPLICATE  |PARTITIONED|
+                                                                                                                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                                                                -- STREAM_PROJECT  |PARTITIONED|
+                                                                                                                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                                                                    -- DATASOURCE_SCAN (tpcds.store_sales)  |PARTITIONED|
+                                                                                                                                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                                                                        -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
                                                                           -- HASH_PARTITION_EXCHANGE [$$173]  |PARTITIONED|
                                                                             -- STREAM_PROJECT  |PARTITIONED|
                                                                               -- ASSIGN  |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/tpcds/query-ASTERIXDB-1581-correlated.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/tpcds/query-ASTERIXDB-1581-correlated.plan
index 1a70178..d61947a 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/tpcds/query-ASTERIXDB-1581-correlated.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/tpcds/query-ASTERIXDB-1581-correlated.plan
@@ -73,26 +73,26 @@
                                                                                         -- DATASOURCE_SCAN (tpcds.store_sales)  |PARTITIONED|
                                                                                           -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                                                                             -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                              -- HASH_PARTITION_EXCHANGE [$$171]  |PARTITIONED|
                                                 -- STREAM_PROJECT  |PARTITIONED|
                                                   -- ASSIGN  |PARTITIONED|
-                                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                      -- SORT_GROUP_BY[$$221]  |PARTITIONED|
-                                                              {
-                                                                -- AGGREGATE  |LOCAL|
-                                                                  -- NESTED_TUPLE_SOURCE  |LOCAL|
-                                                              }
-                                                        -- HASH_PARTITION_EXCHANGE [$$221]  |PARTITIONED|
-                                                          -- PRE_CLUSTERED_GROUP_BY[$$161]  |PARTITIONED|
-                                                                  {
-                                                                    -- AGGREGATE  |LOCAL|
-                                                                      -- STREAM_SELECT  |LOCAL|
-                                                                        -- NESTED_TUPLE_SOURCE  |LOCAL|
-                                                                  }
-                                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                              -- STABLE_SORT [$$161(ASC)]  |PARTITIONED|
-                                                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                  -- STREAM_PROJECT  |PARTITIONED|
+                                                    -- STREAM_PROJECT  |PARTITIONED|
+                                                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                        -- SORT_GROUP_BY[$$220, $$221]  |PARTITIONED|
+                                                                {
+                                                                  -- AGGREGATE  |LOCAL|
+                                                                    -- NESTED_TUPLE_SOURCE  |LOCAL|
+                                                                }
+                                                          -- HASH_PARTITION_EXCHANGE [$$220, $$221]  |PARTITIONED|
+                                                            -- PRE_CLUSTERED_GROUP_BY[$$158, $$161]  |PARTITIONED|
+                                                                    {
+                                                                      -- AGGREGATE  |LOCAL|
+                                                                        -- STREAM_SELECT  |LOCAL|
+                                                                          -- NESTED_TUPLE_SOURCE  |LOCAL|
+                                                                    }
+                                                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                -- STABLE_SORT [$$158(ASC), $$161(ASC)]  |PARTITIONED|
+                                                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                                                     -- STREAM_PROJECT  |PARTITIONED|
                                                                       -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                                                         -- HYBRID_HASH_JOIN [$$150][$$149]  |PARTITIONED|
@@ -102,49 +102,50 @@
                                                                                 -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                                                                   -- REPLICATE  |PARTITIONED|
                                                                                     -- HASH_PARTITION_EXCHANGE [$$196]  |PARTITIONED|
-                                                                                      -- STREAM_PROJECT  |PARTITIONED|
-                                                                                        -- ASSIGN  |PARTITIONED|
-                                                                                          -- STREAM_PROJECT  |PARTITIONED|
-                                                                                            -- STREAM_SELECT  |PARTITIONED|
-                                                                                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                                                -- REPLICATE  |PARTITIONED|
-                                                                                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                                                    -- PRE_CLUSTERED_GROUP_BY[$$199]  |PARTITIONED|
-                                                                                                            {
-                                                                                                              -- AGGREGATE  |LOCAL|
+                                                                                      -- RUNNING_AGGREGATE  |PARTITIONED|
+                                                                                        -- STREAM_PROJECT  |PARTITIONED|
+                                                                                          -- ASSIGN  |PARTITIONED|
+                                                                                            -- STREAM_PROJECT  |PARTITIONED|
+                                                                                              -- STREAM_SELECT  |PARTITIONED|
+                                                                                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                                  -- REPLICATE  |PARTITIONED|
+                                                                                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                                      -- PRE_CLUSTERED_GROUP_BY[$$199]  |PARTITIONED|
+                                                                                                              {
                                                                                                                 -- AGGREGATE  |LOCAL|
-                                                                                                                  -- STREAM_SELECT  |LOCAL|
-                                                                                                                    -- NESTED_TUPLE_SOURCE  |LOCAL|
-                                                                                                            }
-                                                                                                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                                                        -- STREAM_PROJECT  |PARTITIONED|
-                                                                                                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                                                            -- HYBRID_HASH_JOIN [$$199][$$200]  |PARTITIONED|
-                                                                                                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                                                                -- REPLICATE  |PARTITIONED|
-                                                                                                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                                                                    -- BTREE_SEARCH (tpcds.item.item)  |PARTITIONED|
-                                                                                                                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                                                                        -- ASSIGN  |PARTITIONED|
-                                                                                                                          -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                                                                                                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                                                                -- STREAM_PROJECT  |PARTITIONED|
-                                                                                                                  -- ASSIGN  |PARTITIONED|
+                                                                                                                  -- AGGREGATE  |LOCAL|
+                                                                                                                    -- STREAM_SELECT  |LOCAL|
+                                                                                                                      -- NESTED_TUPLE_SOURCE  |LOCAL|
+                                                                                                              }
+                                                                                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                                          -- STREAM_PROJECT  |PARTITIONED|
+                                                                                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                                              -- HYBRID_HASH_JOIN [$$199][$$200]  |PARTITIONED|
+                                                                                                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                                                  -- REPLICATE  |PARTITIONED|
                                                                                                                     -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                                                                      -- REPLICATE  |PARTITIONED|
-                                                                                                                        -- HASH_PARTITION_EXCHANGE [$$198]  |PARTITIONED|
-                                                                                                                          -- STREAM_PROJECT  |PARTITIONED|
-                                                                                                                            -- ASSIGN  |PARTITIONED|
-                                                                                                                              -- STREAM_PROJECT  |PARTITIONED|
-                                                                                                                                -- ASSIGN  |PARTITIONED|
-                                                                                                                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                                                                                    -- REPLICATE  |PARTITIONED|
-                                                                                                                                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                                                                                        -- STREAM_PROJECT  |PARTITIONED|
-                                                                                                                                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                                                                                            -- DATASOURCE_SCAN (tpcds.store_sales)  |PARTITIONED|
-                                                                                                                                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                                                                                                -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                                                                                                                      -- BTREE_SEARCH (tpcds.item.item)  |PARTITIONED|
+                                                                                                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                                                          -- ASSIGN  |PARTITIONED|
+                                                                                                                            -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                                                                                                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                                                  -- STREAM_PROJECT  |PARTITIONED|
+                                                                                                                    -- ASSIGN  |PARTITIONED|
+                                                                                                                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                                                        -- REPLICATE  |PARTITIONED|
+                                                                                                                          -- HASH_PARTITION_EXCHANGE [$$198]  |PARTITIONED|
+                                                                                                                            -- STREAM_PROJECT  |PARTITIONED|
+                                                                                                                              -- ASSIGN  |PARTITIONED|
+                                                                                                                                -- STREAM_PROJECT  |PARTITIONED|
+                                                                                                                                  -- ASSIGN  |PARTITIONED|
+                                                                                                                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                                                                      -- REPLICATE  |PARTITIONED|
+                                                                                                                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                                                                          -- STREAM_PROJECT  |PARTITIONED|
+                                                                                                                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                                                                              -- DATASOURCE_SCAN (tpcds.store_sales)  |PARTITIONED|
+                                                                                                                                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                                                                                  -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
                                                                           -- HASH_PARTITION_EXCHANGE [$$149]  |PARTITIONED|
                                                                             -- STREAM_PROJECT  |PARTITIONED|
                                                                               -- ASSIGN  |PARTITIONED|
@@ -156,77 +157,162 @@
                                                                                           -- DATASOURCE_SCAN (tpcds.store_sales)  |PARTITIONED|
                                                                                             -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                                                                               -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                              -- HASH_PARTITION_EXCHANGE [$$215]  |PARTITIONED|
                                 -- STREAM_PROJECT  |PARTITIONED|
                                   -- ASSIGN  |PARTITIONED|
-                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                      -- SORT_GROUP_BY[$$227]  |PARTITIONED|
-                                              {
-                                                -- AGGREGATE  |LOCAL|
-                                                  -- NESTED_TUPLE_SOURCE  |LOCAL|
-                                              }
-                                        -- HASH_PARTITION_EXCHANGE [$$227]  |PARTITIONED|
-                                          -- PRE_CLUSTERED_GROUP_BY[$$177]  |PARTITIONED|
-                                                  {
-                                                    -- AGGREGATE  |LOCAL|
-                                                      -- STREAM_SELECT  |LOCAL|
-                                                        -- NESTED_TUPLE_SOURCE  |LOCAL|
-                                                  }
-                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                              -- STABLE_SORT [$$177(ASC)]  |PARTITIONED|
-                                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                  -- STREAM_PROJECT  |PARTITIONED|
+                                    -- STREAM_PROJECT  |PARTITIONED|
+                                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                        -- SORT_GROUP_BY[$$226, $$227]  |PARTITIONED|
+                                                {
+                                                  -- AGGREGATE  |LOCAL|
+                                                    -- NESTED_TUPLE_SOURCE  |LOCAL|
+                                                }
+                                          -- HASH_PARTITION_EXCHANGE [$$226, $$227]  |PARTITIONED|
+                                            -- PRE_CLUSTERED_GROUP_BY[$$174, $$177]  |PARTITIONED|
+                                                    {
+                                                      -- AGGREGATE  |LOCAL|
+                                                        -- STREAM_SELECT  |LOCAL|
+                                                          -- NESTED_TUPLE_SOURCE  |LOCAL|
+                                                    }
+                                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                -- STABLE_SORT [$$174(ASC), $$177(ASC)]  |PARTITIONED|
+                                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                                     -- STREAM_PROJECT  |PARTITIONED|
                                                       -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                                         -- HYBRID_HASH_JOIN [$$152][$$151]  |PARTITIONED|
                                                           -- HASH_PARTITION_EXCHANGE [$$152]  |PARTITIONED|
-                                                            -- STREAM_PROJECT  |PARTITIONED|
-                                                              -- ASSIGN  |PARTITIONED|
-                                                                -- STREAM_PROJECT  |PARTITIONED|
-                                                                  -- STREAM_SELECT  |PARTITIONED|
-                                                                    -- STREAM_PROJECT  |PARTITIONED|
-                                                                      -- ASSIGN  |PARTITIONED|
-                                                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                          -- PRE_CLUSTERED_GROUP_BY[$$178]  |PARTITIONED|
-                                                                                  {
-                                                                                    -- AGGREGATE  |LOCAL|
+                                                            -- RUNNING_AGGREGATE  |PARTITIONED|
+                                                              -- STREAM_PROJECT  |PARTITIONED|
+                                                                -- ASSIGN  |PARTITIONED|
+                                                                  -- STREAM_PROJECT  |PARTITIONED|
+                                                                    -- STREAM_SELECT  |PARTITIONED|
+                                                                      -- STREAM_PROJECT  |PARTITIONED|
+                                                                        -- ASSIGN  |PARTITIONED|
+                                                                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                            -- PRE_CLUSTERED_GROUP_BY[$$178]  |PARTITIONED|
+                                                                                    {
                                                                                       -- AGGREGATE  |LOCAL|
-                                                                                        -- STREAM_SELECT  |LOCAL|
-                                                                                          -- NESTED_TUPLE_SOURCE  |LOCAL|
-                                                                                  }
-                                                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                              -- STABLE_SORT [$$178(ASC)]  |PARTITIONED|
-                                                                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                                  -- STREAM_PROJECT  |PARTITIONED|
-                                                                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                                      -- HYBRID_HASH_JOIN [$$178][$$181]  |PARTITIONED|
-                                                                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                                          -- STREAM_PROJECT  |PARTITIONED|
+                                                                                        -- AGGREGATE  |LOCAL|
+                                                                                          -- STREAM_SELECT  |LOCAL|
+                                                                                            -- NESTED_TUPLE_SOURCE  |LOCAL|
+                                                                                    }
+                                                                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                -- STABLE_SORT [$$178(ASC)]  |PARTITIONED|
+                                                                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                    -- STREAM_PROJECT  |PARTITIONED|
+                                                                                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                        -- HYBRID_HASH_JOIN [$$178][$$181]  |PARTITIONED|
+                                                                                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                            -- STREAM_PROJECT  |PARTITIONED|
+                                                                                              -- ASSIGN  |PARTITIONED|
+                                                                                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                                  -- REPLICATE  |PARTITIONED|
+                                                                                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                                      -- PRE_CLUSTERED_GROUP_BY[$$199]  |PARTITIONED|
+                                                                                                              {
+                                                                                                                -- AGGREGATE  |LOCAL|
+                                                                                                                  -- AGGREGATE  |LOCAL|
+                                                                                                                    -- STREAM_SELECT  |LOCAL|
+                                                                                                                      -- NESTED_TUPLE_SOURCE  |LOCAL|
+                                                                                                              }
+                                                                                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                                          -- STREAM_PROJECT  |PARTITIONED|
+                                                                                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                                              -- HYBRID_HASH_JOIN [$$199][$$200]  |PARTITIONED|
+                                                                                                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                                                  -- REPLICATE  |PARTITIONED|
+                                                                                                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                                                      -- BTREE_SEARCH (tpcds.item.item)  |PARTITIONED|
+                                                                                                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                                                          -- ASSIGN  |PARTITIONED|
+                                                                                                                            -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                                                                                                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                                                  -- STREAM_PROJECT  |PARTITIONED|
+                                                                                                                    -- ASSIGN  |PARTITIONED|
+                                                                                                                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                                                        -- REPLICATE  |PARTITIONED|
+                                                                                                                          -- HASH_PARTITION_EXCHANGE [$$198]  |PARTITIONED|
+                                                                                                                            -- STREAM_PROJECT  |PARTITIONED|
+                                                                                                                              -- ASSIGN  |PARTITIONED|
+                                                                                                                                -- STREAM_PROJECT  |PARTITIONED|
+                                                                                                                                  -- ASSIGN  |PARTITIONED|
+                                                                                                                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                                                                      -- REPLICATE  |PARTITIONED|
+                                                                                                                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                                                                          -- STREAM_PROJECT  |PARTITIONED|
+                                                                                                                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                                                                              -- DATASOURCE_SCAN (tpcds.store_sales)  |PARTITIONED|
+                                                                                                                                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                                                                                  -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                                                                                          -- HASH_PARTITION_EXCHANGE [$$181]  |PARTITIONED|
                                                                                             -- ASSIGN  |PARTITIONED|
-                                                                                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                                                -- REPLICATE  |PARTITIONED|
-                                                                                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                                                    -- PRE_CLUSTERED_GROUP_BY[$$199]  |PARTITIONED|
-                                                                                                            {
-                                                                                                              -- AGGREGATE  |LOCAL|
+                                                                                              -- STREAM_PROJECT  |PARTITIONED|
+                                                                                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                                  -- SORT_GROUP_BY[$$223, $$224]  |PARTITIONED|
+                                                                                                          {
+                                                                                                            -- AGGREGATE  |LOCAL|
+                                                                                                              -- NESTED_TUPLE_SOURCE  |LOCAL|
+                                                                                                          }
+                                                                                                    -- HASH_PARTITION_EXCHANGE [$$223, $$224]  |PARTITIONED|
+                                                                                                      -- PRE_CLUSTERED_GROUP_BY[$$193, $$194]  |PARTITIONED|
+                                                                                                              {
                                                                                                                 -- AGGREGATE  |LOCAL|
                                                                                                                   -- STREAM_SELECT  |LOCAL|
                                                                                                                     -- NESTED_TUPLE_SOURCE  |LOCAL|
-                                                                                                            }
-                                                                                                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                                                        -- STREAM_PROJECT  |PARTITIONED|
-                                                                                                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                                                            -- HYBRID_HASH_JOIN [$$199][$$200]  |PARTITIONED|
-                                                                                                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                                                                -- REPLICATE  |PARTITIONED|
-                                                                                                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                                                                    -- BTREE_SEARCH (tpcds.item.item)  |PARTITIONED|
-                                                                                                                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                                                                        -- ASSIGN  |PARTITIONED|
-                                                                                                                          -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                                                                                                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                                                                -- STREAM_PROJECT  |PARTITIONED|
-                                                                                                                  -- ASSIGN  |PARTITIONED|
+                                                                                                              }
+                                                                                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                                          -- STABLE_SORT [$$193(ASC), $$194(ASC)]  |PARTITIONED|
+                                                                                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                                              -- STREAM_PROJECT  |PARTITIONED|
+                                                                                                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                                                  -- HYBRID_HASH_JOIN [$$196][$$198]  |PARTITIONED|
+                                                                                                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                                                      -- REPLICATE  |PARTITIONED|
+                                                                                                                        -- HASH_PARTITION_EXCHANGE [$$196]  |PARTITIONED|
+                                                                                                                          -- RUNNING_AGGREGATE  |PARTITIONED|
+                                                                                                                            -- STREAM_PROJECT  |PARTITIONED|
+                                                                                                                              -- ASSIGN  |PARTITIONED|
+                                                                                                                                -- STREAM_PROJECT  |PARTITIONED|
+                                                                                                                                  -- STREAM_SELECT  |PARTITIONED|
+                                                                                                                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                                                                      -- REPLICATE  |PARTITIONED|
+                                                                                                                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                                                                          -- PRE_CLUSTERED_GROUP_BY[$$199]  |PARTITIONED|
+                                                                                                                                                  {
+                                                                                                                                                    -- AGGREGATE  |LOCAL|
+                                                                                                                                                      -- AGGREGATE  |LOCAL|
+                                                                                                                                                        -- STREAM_SELECT  |LOCAL|
+                                                                                                                                                          -- NESTED_TUPLE_SOURCE  |LOCAL|
+                                                                                                                                                  }
+                                                                                                                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                                                                              -- STREAM_PROJECT  |PARTITIONED|
+                                                                                                                                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                                                                                  -- HYBRID_HASH_JOIN [$$199][$$200]  |PARTITIONED|
+                                                                                                                                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                                                                                      -- REPLICATE  |PARTITIONED|
+                                                                                                                                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                                                                                          -- BTREE_SEARCH (tpcds.item.item)  |PARTITIONED|
+                                                                                                                                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                                                                                              -- ASSIGN  |PARTITIONED|
+                                                                                                                                                                -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                                                                                                                                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                                                                                      -- STREAM_PROJECT  |PARTITIONED|
+                                                                                                                                                        -- ASSIGN  |PARTITIONED|
+                                                                                                                                                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                                                                                            -- REPLICATE  |PARTITIONED|
+                                                                                                                                                              -- HASH_PARTITION_EXCHANGE [$$198]  |PARTITIONED|
+                                                                                                                                                                -- STREAM_PROJECT  |PARTITIONED|
+                                                                                                                                                                  -- ASSIGN  |PARTITIONED|
+                                                                                                                                                                    -- STREAM_PROJECT  |PARTITIONED|
+                                                                                                                                                                      -- ASSIGN  |PARTITIONED|
+                                                                                                                                                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                                                                                                          -- REPLICATE  |PARTITIONED|
+                                                                                                                                                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                                                                                                              -- STREAM_PROJECT  |PARTITIONED|
+                                                                                                                                                                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                                                                                                                  -- DATASOURCE_SCAN (tpcds.store_sales)  |PARTITIONED|
+                                                                                                                                                                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                                                                                                                      -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
                                                                                                                     -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                                                                                                       -- REPLICATE  |PARTITIONED|
                                                                                                                         -- HASH_PARTITION_EXCHANGE [$$198]  |PARTITIONED|
@@ -242,89 +328,6 @@
                                                                                                                                             -- DATASOURCE_SCAN (tpcds.store_sales)  |PARTITIONED|
                                                                                                                                               -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                                                                                                                                 -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                                                                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                                          -- ASSIGN  |PARTITIONED|
-                                                                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                                              -- SORT_GROUP_BY[$$224]  |PARTITIONED|
-                                                                                                      {
-                                                                                                        -- AGGREGATE  |LOCAL|
-                                                                                                          -- NESTED_TUPLE_SOURCE  |LOCAL|
-                                                                                                      }
-                                                                                                -- HASH_PARTITION_EXCHANGE [$$224]  |PARTITIONED|
-                                                                                                  -- PRE_CLUSTERED_GROUP_BY[$$194]  |PARTITIONED|
-                                                                                                          {
-                                                                                                            -- AGGREGATE  |LOCAL|
-                                                                                                              -- STREAM_SELECT  |LOCAL|
-                                                                                                                -- NESTED_TUPLE_SOURCE  |LOCAL|
-                                                                                                          }
-                                                                                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                                                      -- STABLE_SORT [$$194(ASC)]  |PARTITIONED|
-                                                                                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                                                          -- STREAM_PROJECT  |PARTITIONED|
-                                                                                                            -- STREAM_PROJECT  |PARTITIONED|
-                                                                                                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                                                                -- HYBRID_HASH_JOIN [$$196][$$198]  |PARTITIONED|
-                                                                                                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                                                                    -- REPLICATE  |PARTITIONED|
-                                                                                                                      -- HASH_PARTITION_EXCHANGE [$$196]  |PARTITIONED|
-                                                                                                                        -- STREAM_PROJECT  |PARTITIONED|
-                                                                                                                          -- ASSIGN  |PARTITIONED|
-                                                                                                                            -- STREAM_PROJECT  |PARTITIONED|
-                                                                                                                              -- STREAM_SELECT  |PARTITIONED|
-                                                                                                                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                                                                                  -- REPLICATE  |PARTITIONED|
-                                                                                                                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                                                                                      -- PRE_CLUSTERED_GROUP_BY[$$199]  |PARTITIONED|
-                                                                                                                                              {
-                                                                                                                                                -- AGGREGATE  |LOCAL|
-                                                                                                                                                  -- AGGREGATE  |LOCAL|
-                                                                                                                                                    -- STREAM_SELECT  |LOCAL|
-                                                                                                                                                      -- NESTED_TUPLE_SOURCE  |LOCAL|
-                                                                                                                                              }
-                                                                                                                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                                                                                          -- STREAM_PROJECT  |PARTITIONED|
-                                                                                                                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                                                                                              -- HYBRID_HASH_JOIN [$$199][$$200]  |PARTITIONED|
-                                                                                                                                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                                                                                                  -- REPLICATE  |PARTITIONED|
-                                                                                                                                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                                                                                                      -- BTREE_SEARCH (tpcds.item.item)  |PARTITIONED|
-                                                                                                                                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                                                                                                          -- ASSIGN  |PARTITIONED|
-                                                                                                                                                            -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                                                                                                                                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                                                                                                  -- STREAM_PROJECT  |PARTITIONED|
-                                                                                                                                                    -- ASSIGN  |PARTITIONED|
-                                                                                                                                                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                                                                                                        -- REPLICATE  |PARTITIONED|
-                                                                                                                                                          -- HASH_PARTITION_EXCHANGE [$$198]  |PARTITIONED|
-                                                                                                                                                            -- STREAM_PROJECT  |PARTITIONED|
-                                                                                                                                                              -- ASSIGN  |PARTITIONED|
-                                                                                                                                                                -- STREAM_PROJECT  |PARTITIONED|
-                                                                                                                                                                  -- ASSIGN  |PARTITIONED|
-                                                                                                                                                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                                                                                                                      -- REPLICATE  |PARTITIONED|
-                                                                                                                                                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                                                                                                                          -- STREAM_PROJECT  |PARTITIONED|
-                                                                                                                                                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                                                                                                                              -- DATASOURCE_SCAN (tpcds.store_sales)  |PARTITIONED|
-                                                                                                                                                                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                                                                                                                                  -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                                                                                                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                                                                    -- REPLICATE  |PARTITIONED|
-                                                                                                                      -- HASH_PARTITION_EXCHANGE [$$198]  |PARTITIONED|
-                                                                                                                        -- STREAM_PROJECT  |PARTITIONED|
-                                                                                                                          -- ASSIGN  |PARTITIONED|
-                                                                                                                            -- STREAM_PROJECT  |PARTITIONED|
-                                                                                                                              -- ASSIGN  |PARTITIONED|
-                                                                                                                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                                                                                  -- REPLICATE  |PARTITIONED|
-                                                                                                                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                                                                                      -- STREAM_PROJECT  |PARTITIONED|
-                                                                                                                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                                                                                          -- DATASOURCE_SCAN (tpcds.store_sales)  |PARTITIONED|
-                                                                                                                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                                                                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
                                                           -- HASH_PARTITION_EXCHANGE [$$151]  |PARTITIONED|
                                                             -- STREAM_PROJECT  |PARTITIONED|
                                                               -- ASSIGN  |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/binary/query_id/query_id.1.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/binary/query_id/query_id.1.ddl.sqlpp
deleted file mode 100644
index d3ba2fb..0000000
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/binary/query_id/query_id.1.ddl.sqlpp
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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.
- */
-
-drop dataverse tpch if exists;
-create dataverse tpch;
-
-use tpch;
-
-create type LineItemType as closed {
-  l_orderkey: int64,
-  l_partkey: int64,
-  l_suppkey: int64,
-  l_linenumber: int64,
-  l_quantity: double,
-  l_extendedprice: double,
-  l_discount: double,
-  l_tax: double,
-  l_returnflag: string,
-  l_linestatus: string,
-  l_shipdate: string,
-  l_commitdate: string,
-  l_receiptdate: string,
-  l_shipinstruct: string,
-  l_shipmode: string,
-  l_comment: string
-};
-
-create dataset LineItem(LineItemType)
-  primary key l_orderkey, l_linenumber;
-
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/common/custom-buffer-size/external_dataset.000.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/common/custom-buffer-size/external_dataset.000.ddl.sqlpp
new file mode 100644
index 0000000..22a30ca
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/common/custom-buffer-size/external_dataset.000.ddl.sqlpp
@@ -0,0 +1,66 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.
+ */
+
+drop dataverse test if exists;
+create dataverse test;
+use test;
+
+drop type test if exists;
+create type test as open {
+};
+
+drop dataset test1 if exists;
+create external dataset test1(test) using S3 (
+("accessKeyId"="dummyAccessKey"),
+("secretAccessKey"="dummySecretKey"),
+("region"="us-west-2"),
+("serviceEndpoint"="http://localhost:8001"),
+("container"="playground"),
+("definition"="json-data/reviews/single-line/json"),
+("format"="json"));
+
+drop dataset test2 if exists;
+create external dataset test2(test) using S3 (
+("accessKeyId"="dummyAccessKey"),
+("secretAccessKey"="dummySecretKey"),
+("region"="us-west-2"),
+("serviceEndpoint"="http://localhost:8001"),
+("container"="playground"),
+("definition"="json-data/reviews/multi-lines/json"),
+("format"="json"));
+
+drop dataset test3 if exists;
+create external dataset test3(test) using S3 (
+("accessKeyId"="dummyAccessKey"),
+("secretAccessKey"="dummySecretKey"),
+("region"="us-west-2"),
+("serviceEndpoint"="http://localhost:8001"),
+("container"="playground"),
+("definition"="json-data/reviews/multi-lines-with-arrays/json"),
+("format"="json"));
+
+drop dataset test4 if exists;
+create external dataset test4(test) using S3 (
+("accessKeyId"="dummyAccessKey"),
+("secretAccessKey"="dummySecretKey"),
+("region"="us-west-2"),
+("serviceEndpoint"="http://localhost:8001"),
+("container"="playground"),
+("definition"="json-data/reviews/multi-lines-with-nested-objects/json"),
+("format"="json"));
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/binary/query_id/query_id.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/common/custom-buffer-size/external_dataset.001.query.sqlpp
similarity index 87%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/binary/query_id/query_id.3.query.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/common/custom-buffer-size/external_dataset.001.query.sqlpp
index 056d96e..7c1708a 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/binary/query_id/query_id.3.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/common/custom-buffer-size/external_dataset.001.query.sqlpp
@@ -17,8 +17,7 @@
  * under the License.
  */
 
-use tpch;
+use test;
+set `compiler.externalscanmemory` "8KB";
+select count(*) `count` from test1;
 
-select distinct value print_binary(id, "hex") from LineItem
-let id = create_query_uid()
-order by id;
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/binary/query_id/query_id.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/common/custom-buffer-size/external_dataset.002.query.sqlpp
similarity index 87%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/binary/query_id/query_id.3.query.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/common/custom-buffer-size/external_dataset.002.query.sqlpp
index 056d96e..d122f42 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/binary/query_id/query_id.3.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/common/custom-buffer-size/external_dataset.002.query.sqlpp
@@ -17,8 +17,7 @@
  * under the License.
  */
 
-use tpch;
+use test;
+set `compiler.externalscanmemory` "16KB";
+select count(*) `count` from test2;
 
-select distinct value print_binary(id, "hex") from LineItem
-let id = create_query_uid()
-order by id;
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/binary/query_id/query_id.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/common/custom-buffer-size/external_dataset.003.query.sqlpp
similarity index 87%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/binary/query_id/query_id.3.query.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/common/custom-buffer-size/external_dataset.003.query.sqlpp
index 056d96e..552f943 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/binary/query_id/query_id.3.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/common/custom-buffer-size/external_dataset.003.query.sqlpp
@@ -17,8 +17,7 @@
  * under the License.
  */
 
-use tpch;
+use test;
+set `compiler.externalscanmemory` "32KB";
+select count(*) `count` from test3;
 
-select distinct value print_binary(id, "hex") from LineItem
-let id = create_query_uid()
-order by id;
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/binary/query_id/query_id.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/common/custom-buffer-size/external_dataset.004.query.sqlpp
similarity index 87%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/binary/query_id/query_id.3.query.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/common/custom-buffer-size/external_dataset.004.query.sqlpp
index 056d96e..f30af80 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/binary/query_id/query_id.3.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/common/custom-buffer-size/external_dataset.004.query.sqlpp
@@ -17,8 +17,7 @@
  * under the License.
  */
 
-use tpch;
+use test;
+set `compiler.externalscanmemory` "8KB";
+select value test3 from test3 order by id;
 
-select distinct value print_binary(id, "hex") from LineItem
-let id = create_query_uid()
-order by id;
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/binary/query_id/query_id.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/common/custom-buffer-size/external_dataset.005.query.sqlpp
similarity index 87%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/binary/query_id/query_id.3.query.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/common/custom-buffer-size/external_dataset.005.query.sqlpp
index 056d96e..af6aff0 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/binary/query_id/query_id.3.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/common/custom-buffer-size/external_dataset.005.query.sqlpp
@@ -17,8 +17,7 @@
  * under the License.
  */
 
-use tpch;
+use test;
+set `compiler.externalscanmemory` "16KB";
+select count(*) `count` from test4;
 
-select distinct value print_binary(id, "hex") from LineItem
-let id = create_query_uid()
-order by id;
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/binary/query_id/query_id.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/common/custom-buffer-size/external_dataset.006.query.sqlpp
similarity index 87%
rename from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/binary/query_id/query_id.3.query.sqlpp
rename to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/common/custom-buffer-size/external_dataset.006.query.sqlpp
index 056d96e..854ac80 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/binary/query_id/query_id.3.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/common/custom-buffer-size/external_dataset.006.query.sqlpp
@@ -17,8 +17,7 @@
  * under the License.
  */
 
-use tpch;
+use test;
+set `compiler.externalscanmemory` "10KB";
+select value test4 from test4 order by id;
 
-select distinct value print_binary(id, "hex") from LineItem
-let id = create_query_uid()
-order by id;
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/binary/query_id/query_id.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/common/custom-buffer-size/external_dataset.999.ddl.sqlpp
similarity index 87%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/binary/query_id/query_id.3.query.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/common/custom-buffer-size/external_dataset.999.ddl.sqlpp
index 056d96e..548e632 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/binary/query_id/query_id.3.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/common/custom-buffer-size/external_dataset.999.ddl.sqlpp
@@ -17,8 +17,4 @@
  * under the License.
  */
 
-use tpch;
-
-select distinct value print_binary(id, "hex") from LineItem
-let id = create_query_uid()
-order by id;
\ No newline at end of file
+drop dataverse test if exists;
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-library/py_function_error/py_function_error.2.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-library/py_function_error/py_function_error.2.ddl.sqlpp
index 0ad9fb3..74fe03f 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-library/py_function_error/py_function_error.2.ddl.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-library/py_function_error/py_function_error.2.ddl.sqlpp
@@ -23,4 +23,7 @@
   as "roundtrip", "Tests.warning" at testlib;
 
 create function roundtrip(s)
-  as "roundtrip", "Tests.roundtrip" at testlib;
\ No newline at end of file
+  as "roundtrip", "Tests.roundtrip" at testlib;
+
+create function env_test(k)
+  as "roundtrip", "Tests.env_test" at testlib;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/binary/query_id/query_id.2.update.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-library/py_function_error/py_function_error.5.query.sqlpp
similarity index 81%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/binary/query_id/query_id.2.update.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-library/py_function_error/py_function_error.5.query.sqlpp
index 5812379..7334470 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/binary/query_id/query_id.2.update.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-library/py_function_error/py_function_error.5.query.sqlpp
@@ -16,9 +16,13 @@
  * specific language governing permissions and limitations
  * under the License.
  */
+/*
+* Description  : Access a records nested records at each level.
+* Expected Res : Success
+* Date         : 04 Jun 2015
+*/
+// param max-warnings:json=0
 
-use tpch;
+use test;
 
-load dataset LineItem
-using localfs
-(("path"="asterix_nc1://data/tpch0.001/lineitem.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+env_test("FOO");
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/binary/query_id/query_id.2.update.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-library/py_function_error/py_function_error.6.query.sqlpp
similarity index 81%
rename from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/binary/query_id/query_id.2.update.sqlpp
rename to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-library/py_function_error/py_function_error.6.query.sqlpp
index 5812379..092af06 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/binary/query_id/query_id.2.update.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-library/py_function_error/py_function_error.6.query.sqlpp
@@ -16,9 +16,13 @@
  * specific language governing permissions and limitations
  * under the License.
  */
+/*
+* Description  : Access a records nested records at each level.
+* Expected Res : Success
+* Date         : 04 Jun 2015
+*/
+// param max-warnings:json=0
 
-use tpch;
+use test;
 
-load dataset LineItem
-using localfs
-(("path"="asterix_nc1://data/tpch0.001/lineitem.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+env_test("BAR");
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/leftouterjoin/query-ASTERIXDB-2857/query-ASTERIXDB-2857.1.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/leftouterjoin/query-ASTERIXDB-2857/query-ASTERIXDB-2857.1.ddl.sqlpp
new file mode 100644
index 0000000..87b5d75
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/leftouterjoin/query-ASTERIXDB-2857/query-ASTERIXDB-2857.1.ddl.sqlpp
@@ -0,0 +1,48 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.
+ */
+
+/*
+ * Test nested loop implementation of left outer join
+ */
+
+drop  dataverse test if exists;
+create  dataverse test;
+
+use test;
+
+create type tenkType as closed {
+  unique1         : integer,
+  unique2         : integer,
+  two             : integer,
+  four            : integer,
+  ten             : integer,
+  twenty          : integer,
+  hundred         : integer,
+  thousand        : integer,
+  twothousand     : integer,
+  fivethous       : integer,
+  tenthous        : integer,
+  odd100          : integer,
+  even100         : integer,
+  stringu1        : string,
+  stringu2        : string,
+  string4         : string
+};
+
+create dataset tenk(tenkType) primary key unique2;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/binary/query_id/query_id.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/leftouterjoin/query-ASTERIXDB-2857/query-ASTERIXDB-2857.2.update.sqlpp
similarity index 85%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/binary/query_id/query_id.3.query.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/leftouterjoin/query-ASTERIXDB-2857/query-ASTERIXDB-2857.2.update.sqlpp
index 056d96e..2d7e768 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/binary/query_id/query_id.3.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/leftouterjoin/query-ASTERIXDB-2857/query-ASTERIXDB-2857.2.update.sqlpp
@@ -17,8 +17,6 @@
  * under the License.
  */
 
-use tpch;
+use test;
 
-select distinct value print_binary(id, "hex") from LineItem
-let id = create_query_uid()
-order by id;
\ No newline at end of file
+load  dataset tenk using localfs ((`path`=`asterix_nc1://data/tenk.tbl`),(`format`=`delimited-text`),(`delimiter`=`|`));
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/binary/query_id/query_id.2.update.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/leftouterjoin/query-ASTERIXDB-2857/query-ASTERIXDB-2857.3.query.sqlpp
similarity index 61%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/binary/query_id/query_id.2.update.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/leftouterjoin/query-ASTERIXDB-2857/query-ASTERIXDB-2857.3.query.sqlpp
index 5812379..823a540 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/binary/query_id/query_id.2.update.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/leftouterjoin/query-ASTERIXDB-2857/query-ASTERIXDB-2857.3.query.sqlpp
@@ -17,8 +17,23 @@
  * under the License.
  */
 
-use tpch;
+/*
+ * Test nested loop implementation of left outer join
+ */
 
-load dataset LineItem
-using localfs
-(("path"="asterix_nc1://data/tpch0.001/lineitem.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+USE test;
+
+SELECT
+   t0.unique1 AS t0_unique1,
+   t1.unique1 AS t1_unique1,
+   t2.unique1 AS t2_unique1
+FROM (
+   SELECT unique1, unique2 FROM tenk WHERE unique2 < 2
+) t0
+INNER JOIN (
+   SELECT unique1, unique2 FROM tenk WHERE unique2 < 4
+) t1 ON t0.unique2 = t1.unique2
+LEFT JOIN (
+   SELECT unique1, unique2 FROM tenk WHERE unique2 < 6
+) t2 ON t0.unique2 + t2.unique2 = 2 * t1.unique2
+ORDER BY t0_unique1, t1_unique1, t2_unique1;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/binary/query_id/query_id.2.update.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/subquery/in_let/in_let.8.query.sqlpp
similarity index 66%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/binary/query_id/query_id.2.update.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/subquery/in_let/in_let.8.query.sqlpp
index 5812379..77f6027 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/binary/query_id/query_id.2.update.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/subquery/in_let/in_let.8.query.sqlpp
@@ -17,8 +17,23 @@
  * under the License.
  */
 
-use tpch;
+/*
+ * Test "rewrite_internal_queryuid_pk" option (default is true)
+ */
 
-load dataset LineItem
-using localfs
-(("path"="asterix_nc1://data/tpch0.001/lineitem.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+use test;
+
+SET `compiler.sort.parallel` "false";
+SET `rewrite_internal_queryuid_pk` "false";
+
+select c1.cid, i1.pid, i1.ts
+from cart c1 unnest c1.items i1
+where i1.ts >= 2000 and i1.pid in
+(
+  select value i2.pid
+  from cart c2 unnest c2.items i2
+  where i2.ts >= 2000
+  group by i2.pid
+  having count(*) > 1
+)
+order by c1.cid;
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/binary/query_id/query_id.2.update.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/synonym/synonym-03/synonym-03.1.ddl.sqlpp
similarity index 69%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/binary/query_id/query_id.2.update.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/synonym/synonym-03/synonym-03.1.ddl.sqlpp
index 5812379..33397c9 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/binary/query_id/query_id.2.update.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/synonym/synonym-03/synonym-03.1.ddl.sqlpp
@@ -17,8 +17,19 @@
  * under the License.
  */
 
-use tpch;
+/*
+ * Test that if the target object's dataverse is not specified then
+ * it defaults to the synonym's dataverse
+ */
 
-load dataset LineItem
-using localfs
-(("path"="asterix_nc1://data/tpch0.001/lineitem.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+drop dataverse test1 if exists;
+create dataverse test1;
+
+drop  dataverse test2 if exists;
+create  dataverse test2;
+
+use test1;
+
+create synonym test2.md_syn_1 for `Metadata`.`Synonym`;
+
+create synonym test2.md_syn_2 for md_syn_1;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/binary/query_id/query_id.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/synonym/synonym-03/synonym-03.2.query.sqlpp
similarity index 84%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/binary/query_id/query_id.3.query.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/synonym/synonym-03/synonym-03.2.query.sqlpp
index 056d96e..8e0aaf9 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/binary/query_id/query_id.3.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/synonym/synonym-03/synonym-03.2.query.sqlpp
@@ -17,8 +17,7 @@
  * under the License.
  */
 
-use tpch;
-
-select distinct value print_binary(id, "hex") from LineItem
-let id = create_query_uid()
-order by id;
\ No newline at end of file
+select DataverseName, SynonymName, ObjectDataverseName, ObjectName
+from test2.md_syn_2
+where DataverseName like "test%"
+order by SynonymName;
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/api/cluster_state_1/cluster_state_1.1.regexadm b/asterixdb/asterix-app/src/test/resources/runtimets/results/api/cluster_state_1/cluster_state_1.1.regexadm
index 0df55e5..473319c 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/api/cluster_state_1/cluster_state_1.1.regexadm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/api/cluster_state_1/cluster_state_1.1.regexadm
@@ -25,6 +25,7 @@
     "compiler\.textsearchmemory" : 163840,
     "compiler\.windowmemory" : 196608,
     "default\.dir" : "target/io/dir/asterixdb",
+    "library\.deploy\.timeout" : 1800,
     "log\.dir" : "logs/",
     "log\.level" : "INFO",
     "max\.wait\.active\.cluster" : 60,
@@ -44,6 +45,7 @@
     "replication\.timeout" : 30,
     "ssl\.enabled" : false,
     "storage.compression.block" : "snappy",
+    "storage.global.cleanup.timeout" : 600,
     "storage.lsm.bloomfilter.falsepositiverate" : 0.01,
     "txn\.commitprofiler\.enabled" : false,
     "txn\.commitprofiler\.reportinterval" : 5,
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/api/cluster_state_1_full/cluster_state_1_full.1.regexadm b/asterixdb/asterix-app/src/test/resources/runtimets/results/api/cluster_state_1_full/cluster_state_1_full.1.regexadm
index e00f4aa..171ead0 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/api/cluster_state_1_full/cluster_state_1_full.1.regexadm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/api/cluster_state_1_full/cluster_state_1_full.1.regexadm
@@ -25,6 +25,7 @@
     "compiler\.textsearchmemory" : 163840,
     "compiler\.windowmemory" : 196608,
     "default\.dir" : "target/io/dir/asterixdb",
+    "library\.deploy\.timeout" : 1800,
     "log\.dir" : "logs/",
     "log\.level" : "WARN",
     "max\.wait\.active\.cluster" : 60,
@@ -44,6 +45,7 @@
     "replication\.timeout" : 30,
     "ssl\.enabled" : false,
     "storage.compression.block" : "snappy",
+    "storage.global.cleanup.timeout" : 600,
     "storage.lsm.bloomfilter.falsepositiverate" : 0.01,
     "txn\.commitprofiler\.enabled" : false,
     "txn\.commitprofiler\.reportinterval" : 5,
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/api/cluster_state_1_less/cluster_state_1_less.1.regexadm b/asterixdb/asterix-app/src/test/resources/runtimets/results/api/cluster_state_1_less/cluster_state_1_less.1.regexadm
index c847562..4a6aff5 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/api/cluster_state_1_less/cluster_state_1_less.1.regexadm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/api/cluster_state_1_less/cluster_state_1_less.1.regexadm
@@ -25,6 +25,7 @@
     "compiler\.textsearchmemory" : 163840,
     "compiler\.windowmemory" : 196608,
     "default\.dir" : "target/io/dir/asterixdb",
+    "library\.deploy\.timeout" : 1800,
     "log\.dir" : "logs/",
     "log\.level" : "WARN",
     "max\.wait\.active\.cluster" : 60,
@@ -44,6 +45,7 @@
     "replication\.timeout" : 30,
     "ssl\.enabled" : false,
     "storage.compression.block" : "snappy",
+    "storage.global.cleanup.timeout" : 600,
     "storage.lsm.bloomfilter.falsepositiverate" : 0.01,
     "txn\.commitprofiler\.enabled" : false,
     "txn\.commitprofiler\.reportinterval" : 5,
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/binary/query_id/query_id.1.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/binary/query_id/query_id.1.adm
deleted file mode 100644
index dcfde8d..0000000
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/binary/query_id/query_id.1.adm
+++ /dev/null
@@ -1,6005 +0,0 @@
-"000000000000000000000001"
-"000000000000000000000002"
-"000000000000000000000003"
-"000000000000000000000004"
-"000000000000000000000005"
-"000000000000000000000006"
-"000000000000000000000007"
-"000000000000000000000008"
-"000000000000000000000009"
-"00000000000000000000000A"
-"00000000000000000000000B"
-"00000000000000000000000C"
-"00000000000000000000000D"
-"00000000000000000000000E"
-"00000000000000000000000F"
-"000000000000000000000010"
-"000000000000000000000011"
-"000000000000000000000012"
-"000000000000000000000013"
-"000000000000000000000014"
-"000000000000000000000015"
-"000000000000000000000016"
-"000000000000000000000017"
-"000000000000000000000018"
-"000000000000000000000019"
-"00000000000000000000001A"
-"00000000000000000000001B"
-"00000000000000000000001C"
-"00000000000000000000001D"
-"00000000000000000000001E"
-"00000000000000000000001F"
-"000000000000000000000020"
-"000000000000000000000021"
-"000000000000000000000022"
-"000000000000000000000023"
-"000000000000000000000024"
-"000000000000000000000025"
-"000000000000000000000026"
-"000000000000000000000027"
-"000000000000000000000028"
-"000000000000000000000029"
-"00000000000000000000002A"
-"00000000000000000000002B"
-"00000000000000000000002C"
-"00000000000000000000002D"
-"00000000000000000000002E"
-"00000000000000000000002F"
-"000000000000000000000030"
-"000000000000000000000031"
-"000000000000000000000032"
-"000000000000000000000033"
-"000000000000000000000034"
-"000000000000000000000035"
-"000000000000000000000036"
-"000000000000000000000037"
-"000000000000000000000038"
-"000000000000000000000039"
-"00000000000000000000003A"
-"00000000000000000000003B"
-"00000000000000000000003C"
-"00000000000000000000003D"
-"00000000000000000000003E"
-"00000000000000000000003F"
-"000000000000000000000040"
-"000000000000000000000041"
-"000000000000000000000042"
-"000000000000000000000043"
-"000000000000000000000044"
-"000000000000000000000045"
-"000000000000000000000046"
-"000000000000000000000047"
-"000000000000000000000048"
-"000000000000000000000049"
-"00000000000000000000004A"
-"00000000000000000000004B"
-"00000000000000000000004C"
-"00000000000000000000004D"
-"00000000000000000000004E"
-"00000000000000000000004F"
-"000000000000000000000050"
-"000000000000000000000051"
-"000000000000000000000052"
-"000000000000000000000053"
-"000000000000000000000054"
-"000000000000000000000055"
-"000000000000000000000056"
-"000000000000000000000057"
-"000000000000000000000058"
-"000000000000000000000059"
-"00000000000000000000005A"
-"00000000000000000000005B"
-"00000000000000000000005C"
-"00000000000000000000005D"
-"00000000000000000000005E"
-"00000000000000000000005F"
-"000000000000000000000060"
-"000000000000000000000061"
-"000000000000000000000062"
-"000000000000000000000063"
-"000000000000000000000064"
-"000000000000000000000065"
-"000000000000000000000066"
-"000000000000000000000067"
-"000000000000000000000068"
-"000000000000000000000069"
-"00000000000000000000006A"
-"00000000000000000000006B"
-"00000000000000000000006C"
-"00000000000000000000006D"
-"00000000000000000000006E"
-"00000000000000000000006F"
-"000000000000000000000070"
-"000000000000000000000071"
-"000000000000000000000072"
-"000000000000000000000073"
-"000000000000000000000074"
-"000000000000000000000075"
-"000000000000000000000076"
-"000000000000000000000077"
-"000000000000000000000078"
-"000000000000000000000079"
-"00000000000000000000007A"
-"00000000000000000000007B"
-"00000000000000000000007C"
-"00000000000000000000007D"
-"00000000000000000000007E"
-"00000000000000000000007F"
-"000000000000000000000080"
-"000000000000000000000081"
-"000000000000000000000082"
-"000000000000000000000083"
-"000000000000000000000084"
-"000000000000000000000085"
-"000000000000000000000086"
-"000000000000000000000087"
-"000000000000000000000088"
-"000000000000000000000089"
-"00000000000000000000008A"
-"00000000000000000000008B"
-"00000000000000000000008C"
-"00000000000000000000008D"
-"00000000000000000000008E"
-"00000000000000000000008F"
-"000000000000000000000090"
-"000000000000000000000091"
-"000000000000000000000092"
-"000000000000000000000093"
-"000000000000000000000094"
-"000000000000000000000095"
-"000000000000000000000096"
-"000000000000000000000097"
-"000000000000000000000098"
-"000000000000000000000099"
-"00000000000000000000009A"
-"00000000000000000000009B"
-"00000000000000000000009C"
-"00000000000000000000009D"
-"00000000000000000000009E"
-"00000000000000000000009F"
-"0000000000000000000000A0"
-"0000000000000000000000A1"
-"0000000000000000000000A2"
-"0000000000000000000000A3"
-"0000000000000000000000A4"
-"0000000000000000000000A5"
-"0000000000000000000000A6"
-"0000000000000000000000A7"
-"0000000000000000000000A8"
-"0000000000000000000000A9"
-"0000000000000000000000AA"
-"0000000000000000000000AB"
-"0000000000000000000000AC"
-"0000000000000000000000AD"
-"0000000000000000000000AE"
-"0000000000000000000000AF"
-"0000000000000000000000B0"
-"0000000000000000000000B1"
-"0000000000000000000000B2"
-"0000000000000000000000B3"
-"0000000000000000000000B4"
-"0000000000000000000000B5"
-"0000000000000000000000B6"
-"0000000000000000000000B7"
-"0000000000000000000000B8"
-"0000000000000000000000B9"
-"0000000000000000000000BA"
-"0000000000000000000000BB"
-"0000000000000000000000BC"
-"0000000000000000000000BD"
-"0000000000000000000000BE"
-"0000000000000000000000BF"
-"0000000000000000000000C0"
-"0000000000000000000000C1"
-"0000000000000000000000C2"
-"0000000000000000000000C3"
-"0000000000000000000000C4"
-"0000000000000000000000C5"
-"0000000000000000000000C6"
-"0000000000000000000000C7"
-"0000000000000000000000C8"
-"0000000000000000000000C9"
-"0000000000000000000000CA"
-"0000000000000000000000CB"
-"0000000000000000000000CC"
-"0000000000000000000000CD"
-"0000000000000000000000CE"
-"0000000000000000000000CF"
-"0000000000000000000000D0"
-"0000000000000000000000D1"
-"0000000000000000000000D2"
-"0000000000000000000000D3"
-"0000000000000000000000D4"
-"0000000000000000000000D5"
-"0000000000000000000000D6"
-"0000000000000000000000D7"
-"0000000000000000000000D8"
-"0000000000000000000000D9"
-"0000000000000000000000DA"
-"0000000000000000000000DB"
-"0000000000000000000000DC"
-"0000000000000000000000DD"
-"0000000000000000000000DE"
-"0000000000000000000000DF"
-"0000000000000000000000E0"
-"0000000000000000000000E1"
-"0000000000000000000000E2"
-"0000000000000000000000E3"
-"0000000000000000000000E4"
-"0000000000000000000000E5"
-"0000000000000000000000E6"
-"0000000000000000000000E7"
-"0000000000000000000000E8"
-"0000000000000000000000E9"
-"0000000000000000000000EA"
-"0000000000000000000000EB"
-"0000000000000000000000EC"
-"0000000000000000000000ED"
-"0000000000000000000000EE"
-"0000000000000000000000EF"
-"0000000000000000000000F0"
-"0000000000000000000000F1"
-"0000000000000000000000F2"
-"0000000000000000000000F3"
-"0000000000000000000000F4"
-"0000000000000000000000F5"
-"0000000000000000000000F6"
-"0000000000000000000000F7"
-"0000000000000000000000F8"
-"0000000000000000000000F9"
-"0000000000000000000000FA"
-"0000000000000000000000FB"
-"0000000000000000000000FC"
-"0000000000000000000000FD"
-"0000000000000000000000FE"
-"0000000000000000000000FF"
-"000000000000000000000100"
-"000000000000000000000101"
-"000000000000000000000102"
-"000000000000000000000103"
-"000000000000000000000104"
-"000000000000000000000105"
-"000000000000000000000106"
-"000000000000000000000107"
-"000000000000000000000108"
-"000000000000000000000109"
-"00000000000000000000010A"
-"00000000000000000000010B"
-"00000000000000000000010C"
-"00000000000000000000010D"
-"00000000000000000000010E"
-"00000000000000000000010F"
-"000000000000000000000110"
-"000000000000000000000111"
-"000000000000000000000112"
-"000000000000000000000113"
-"000000000000000000000114"
-"000000000000000000000115"
-"000000000000000000000116"
-"000000000000000000000117"
-"000000000000000000000118"
-"000000000000000000000119"
-"00000000000000000000011A"
-"00000000000000000000011B"
-"00000000000000000000011C"
-"00000000000000000000011D"
-"00000000000000000000011E"
-"00000000000000000000011F"
-"000000000000000000000120"
-"000000000000000000000121"
-"000000000000000000000122"
-"000000000000000000000123"
-"000000000000000000000124"
-"000000000000000000000125"
-"000000000000000000000126"
-"000000000000000000000127"
-"000000000000000000000128"
-"000000000000000000000129"
-"00000000000000000000012A"
-"00000000000000000000012B"
-"00000000000000000000012C"
-"00000000000000000000012D"
-"00000000000000000000012E"
-"00000000000000000000012F"
-"000000000000000000000130"
-"000000000000000000000131"
-"000000000000000000000132"
-"000000000000000000000133"
-"000000000000000000000134"
-"000000000000000000000135"
-"000000000000000000000136"
-"000000000000000000000137"
-"000000000000000000000138"
-"000000000000000000000139"
-"00000000000000000000013A"
-"00000000000000000000013B"
-"00000000000000000000013C"
-"00000000000000000000013D"
-"00000000000000000000013E"
-"00000000000000000000013F"
-"000000000000000000000140"
-"000000000000000000000141"
-"000000000000000000000142"
-"000000000000000000000143"
-"000000000000000000000144"
-"000000000000000000000145"
-"000000000000000000000146"
-"000000000000000000000147"
-"000000000000000000000148"
-"000000000000000000000149"
-"00000000000000000000014A"
-"00000000000000000000014B"
-"00000000000000000000014C"
-"00000000000000000000014D"
-"00000000000000000000014E"
-"00000000000000000000014F"
-"000000000000000000000150"
-"000000000000000000000151"
-"000000000000000000000152"
-"000000000000000000000153"
-"000000000000000000000154"
-"000000000000000000000155"
-"000000000000000000000156"
-"000000000000000000000157"
-"000000000000000000000158"
-"000000000000000000000159"
-"00000000000000000000015A"
-"00000000000000000000015B"
-"00000000000000000000015C"
-"00000000000000000000015D"
-"00000000000000000000015E"
-"00000000000000000000015F"
-"000000000000000000000160"
-"000000000000000000000161"
-"000000000000000000000162"
-"000000000000000000000163"
-"000000000000000000000164"
-"000000000000000000000165"
-"000000000000000000000166"
-"000000000000000000000167"
-"000000000000000000000168"
-"000000000000000000000169"
-"00000000000000000000016A"
-"00000000000000000000016B"
-"00000000000000000000016C"
-"00000000000000000000016D"
-"00000000000000000000016E"
-"00000000000000000000016F"
-"000000000000000000000170"
-"000000000000000000000171"
-"000000000000000000000172"
-"000000000000000000000173"
-"000000000000000000000174"
-"000000000000000000000175"
-"000000000000000000000176"
-"000000000000000000000177"
-"000000000000000000000178"
-"000000000000000000000179"
-"00000000000000000000017A"
-"00000000000000000000017B"
-"00000000000000000000017C"
-"00000000000000000000017D"
-"00000000000000000000017E"
-"00000000000000000000017F"
-"000000000000000000000180"
-"000000000000000000000181"
-"000000000000000000000182"
-"000000000000000000000183"
-"000000000000000000000184"
-"000000000000000000000185"
-"000000000000000000000186"
-"000000000000000000000187"
-"000000000000000000000188"
-"000000000000000000000189"
-"00000000000000000000018A"
-"00000000000000000000018B"
-"00000000000000000000018C"
-"00000000000000000000018D"
-"00000000000000000000018E"
-"00000000000000000000018F"
-"000000000000000000000190"
-"000000000000000000000191"
-"000000000000000000000192"
-"000000000000000000000193"
-"000000000000000000000194"
-"000000000000000000000195"
-"000000000000000000000196"
-"000000000000000000000197"
-"000000000000000000000198"
-"000000000000000000000199"
-"00000000000000000000019A"
-"00000000000000000000019B"
-"00000000000000000000019C"
-"00000000000000000000019D"
-"00000000000000000000019E"
-"00000000000000000000019F"
-"0000000000000000000001A0"
-"0000000000000000000001A1"
-"0000000000000000000001A2"
-"0000000000000000000001A3"
-"0000000000000000000001A4"
-"0000000000000000000001A5"
-"0000000000000000000001A6"
-"0000000000000000000001A7"
-"0000000000000000000001A8"
-"0000000000000000000001A9"
-"0000000000000000000001AA"
-"0000000000000000000001AB"
-"0000000000000000000001AC"
-"0000000000000000000001AD"
-"0000000000000000000001AE"
-"0000000000000000000001AF"
-"0000000000000000000001B0"
-"0000000000000000000001B1"
-"0000000000000000000001B2"
-"0000000000000000000001B3"
-"0000000000000000000001B4"
-"0000000000000000000001B5"
-"0000000000000000000001B6"
-"0000000000000000000001B7"
-"0000000000000000000001B8"
-"0000000000000000000001B9"
-"0000000000000000000001BA"
-"0000000000000000000001BB"
-"0000000000000000000001BC"
-"0000000000000000000001BD"
-"0000000000000000000001BE"
-"0000000000000000000001BF"
-"0000000000000000000001C0"
-"0000000000000000000001C1"
-"0000000000000000000001C2"
-"0000000000000000000001C3"
-"0000000000000000000001C4"
-"0000000000000000000001C5"
-"0000000000000000000001C6"
-"0000000000000000000001C7"
-"0000000000000000000001C8"
-"0000000000000000000001C9"
-"0000000000000000000001CA"
-"0000000000000000000001CB"
-"0000000000000000000001CC"
-"0000000000000000000001CD"
-"0000000000000000000001CE"
-"0000000000000000000001CF"
-"0000000000000000000001D0"
-"0000000000000000000001D1"
-"0000000000000000000001D2"
-"0000000000000000000001D3"
-"0000000000000000000001D4"
-"0000000000000000000001D5"
-"0000000000000000000001D6"
-"0000000000000000000001D7"
-"0000000000000000000001D8"
-"0000000000000000000001D9"
-"0000000000000000000001DA"
-"0000000000000000000001DB"
-"0000000000000000000001DC"
-"0000000000000000000001DD"
-"0000000000000000000001DE"
-"0000000000000000000001DF"
-"0000000000000000000001E0"
-"0000000000000000000001E1"
-"0000000000000000000001E2"
-"0000000000000000000001E3"
-"0000000000000000000001E4"
-"0000000000000000000001E5"
-"0000000000000000000001E6"
-"0000000000000000000001E7"
-"0000000000000000000001E8"
-"0000000000000000000001E9"
-"0000000000000000000001EA"
-"0000000000000000000001EB"
-"0000000000000000000001EC"
-"0000000000000000000001ED"
-"0000000000000000000001EE"
-"0000000000000000000001EF"
-"0000000000000000000001F0"
-"0000000000000000000001F1"
-"0000000000000000000001F2"
-"0000000000000000000001F3"
-"0000000000000000000001F4"
-"0000000000000000000001F5"
-"0000000000000000000001F6"
-"0000000000000000000001F7"
-"0000000000000000000001F8"
-"0000000000000000000001F9"
-"0000000000000000000001FA"
-"0000000000000000000001FB"
-"0000000000000000000001FC"
-"0000000000000000000001FD"
-"0000000000000000000001FE"
-"0000000000000000000001FF"
-"000000000000000000000200"
-"000000000000000000000201"
-"000000000000000000000202"
-"000000000000000000000203"
-"000000000000000000000204"
-"000000000000000000000205"
-"000000000000000000000206"
-"000000000000000000000207"
-"000000000000000000000208"
-"000000000000000000000209"
-"00000000000000000000020A"
-"00000000000000000000020B"
-"00000000000000000000020C"
-"00000000000000000000020D"
-"00000000000000000000020E"
-"00000000000000000000020F"
-"000000000000000000000210"
-"000000000000000000000211"
-"000000000000000000000212"
-"000000000000000000000213"
-"000000000000000000000214"
-"000000000000000000000215"
-"000000000000000000000216"
-"000000000000000000000217"
-"000000000000000000000218"
-"000000000000000000000219"
-"00000000000000000000021A"
-"00000000000000000000021B"
-"00000000000000000000021C"
-"00000000000000000000021D"
-"00000000000000000000021E"
-"00000000000000000000021F"
-"000000000000000000000220"
-"000000000000000000000221"
-"000000000000000000000222"
-"000000000000000000000223"
-"000000000000000000000224"
-"000000000000000000000225"
-"000000000000000000000226"
-"000000000000000000000227"
-"000000000000000000000228"
-"000000000000000000000229"
-"00000000000000000000022A"
-"00000000000000000000022B"
-"00000000000000000000022C"
-"00000000000000000000022D"
-"00000000000000000000022E"
-"00000000000000000000022F"
-"000000000000000000000230"
-"000000000000000000000231"
-"000000000000000000000232"
-"000000000000000000000233"
-"000000000000000000000234"
-"000000000000000000000235"
-"000000000000000000000236"
-"000000000000000000000237"
-"000000000000000000000238"
-"000000000000000000000239"
-"00000000000000000000023A"
-"00000000000000000000023B"
-"00000000000000000000023C"
-"00000000000000000000023D"
-"00000000000000000000023E"
-"00000000000000000000023F"
-"000000000000000000000240"
-"000000000000000000000241"
-"000000000000000000000242"
-"000000000000000000000243"
-"000000000000000000000244"
-"000000000000000000000245"
-"000000000000000000000246"
-"000000000000000000000247"
-"000000000000000000000248"
-"000000000000000000000249"
-"00000000000000000000024A"
-"00000000000000000000024B"
-"00000000000000000000024C"
-"00000000000000000000024D"
-"00000000000000000000024E"
-"00000000000000000000024F"
-"000000000000000000000250"
-"000000000000000000000251"
-"000000000000000000000252"
-"000000000000000000000253"
-"000000000000000000000254"
-"000000000000000000000255"
-"000000000000000000000256"
-"000000000000000000000257"
-"000000000000000000000258"
-"000000000000000000000259"
-"00000000000000000000025A"
-"00000000000000000000025B"
-"00000000000000000000025C"
-"00000000000000000000025D"
-"00000000000000000000025E"
-"00000000000000000000025F"
-"000000000000000000000260"
-"000000000000000000000261"
-"000000000000000000000262"
-"000000000000000000000263"
-"000000000000000000000264"
-"000000000000000000000265"
-"000000000000000000000266"
-"000000000000000000000267"
-"000000000000000000000268"
-"000000000000000000000269"
-"00000000000000000000026A"
-"00000000000000000000026B"
-"00000000000000000000026C"
-"00000000000000000000026D"
-"00000000000000000000026E"
-"00000000000000000000026F"
-"000000000000000000000270"
-"000000000000000000000271"
-"000000000000000000000272"
-"000000000000000000000273"
-"000000000000000000000274"
-"000000000000000000000275"
-"000000000000000000000276"
-"000000000000000000000277"
-"000000000000000000000278"
-"000000000000000000000279"
-"00000000000000000000027A"
-"00000000000000000000027B"
-"00000000000000000000027C"
-"00000000000000000000027D"
-"00000000000000000000027E"
-"00000000000000000000027F"
-"000000000000000000000280"
-"000000000000000000000281"
-"000000000000000000000282"
-"000000000000000000000283"
-"000000000000000000000284"
-"000000000000000000000285"
-"000000000000000000000286"
-"000000000000000000000287"
-"000000000000000000000288"
-"000000000000000000000289"
-"00000000000000000000028A"
-"00000000000000000000028B"
-"00000000000000000000028C"
-"00000000000000000000028D"
-"00000000000000000000028E"
-"00000000000000000000028F"
-"000000000000000000000290"
-"000000000000000000000291"
-"000000000000000000000292"
-"000000000000000000000293"
-"000000000000000000000294"
-"000000000000000000000295"
-"000000000000000000000296"
-"000000000000000000000297"
-"000000000000000000000298"
-"000000000000000000000299"
-"00000000000000000000029A"
-"00000000000000000000029B"
-"00000000000000000000029C"
-"00000000000000000000029D"
-"00000000000000000000029E"
-"00000000000000000000029F"
-"0000000000000000000002A0"
-"0000000000000000000002A1"
-"0000000000000000000002A2"
-"0000000000000000000002A3"
-"0000000000000000000002A4"
-"0000000000000000000002A5"
-"0000000000000000000002A6"
-"0000000000000000000002A7"
-"0000000000000000000002A8"
-"0000000000000000000002A9"
-"0000000000000000000002AA"
-"0000000000000000000002AB"
-"0000000000000000000002AC"
-"0000000000000000000002AD"
-"0000000000000000000002AE"
-"0000000000000000000002AF"
-"0000000000000000000002B0"
-"0000000000000000000002B1"
-"0000000000000000000002B2"
-"0000000000000000000002B3"
-"0000000000000000000002B4"
-"0000000000000000000002B5"
-"0000000000000000000002B6"
-"0000000000000000000002B7"
-"0000000000000000000002B8"
-"0000000000000000000002B9"
-"0000000000000000000002BA"
-"0000000000000000000002BB"
-"0000000000000000000002BC"
-"0000000000000000000002BD"
-"0000000000000000000002BE"
-"0000000000000000000002BF"
-"0000000000000000000002C0"
-"0000000000000000000002C1"
-"0000000000000000000002C2"
-"0000000000000000000002C3"
-"0000000000000000000002C4"
-"0000000000000000000002C5"
-"0000000000000000000002C6"
-"0000000000000000000002C7"
-"0000000000000000000002C8"
-"0000000000000000000002C9"
-"0000000000000000000002CA"
-"0000000000000000000002CB"
-"0000000000000000000002CC"
-"0000000000000000000002CD"
-"0000000000000000000002CE"
-"0000000000000000000002CF"
-"0000000000000000000002D0"
-"0000000000000000000002D1"
-"0000000000000000000002D2"
-"0000000000000000000002D3"
-"0000000000000000000002D4"
-"0000000000000000000002D5"
-"0000000000000000000002D6"
-"0000000000000000000002D7"
-"0000000000000000000002D8"
-"0000000000000000000002D9"
-"0000000000000000000002DA"
-"0000000000000000000002DB"
-"0000000000000000000002DC"
-"0000000000000000000002DD"
-"0000000000000000000002DE"
-"0000000000000000000002DF"
-"0000000000000000000002E0"
-"0000000000000000000002E1"
-"0000000000000000000002E2"
-"0000000000000000000002E3"
-"0000000000000000000002E4"
-"0000000000000000000002E5"
-"0000000000000000000002E6"
-"0000000000000000000002E7"
-"0000000000000000000002E8"
-"0000000000000000000002E9"
-"0000000000000000000002EA"
-"0000000000000000000002EB"
-"0000000000000000000002EC"
-"0000000000000000000002ED"
-"0000000000000000000002EE"
-"0000000000000000000002EF"
-"0000000000000000000002F0"
-"0000000000000000000002F1"
-"0000000000000000000002F2"
-"0000000000000000000002F3"
-"0000000000000000000002F4"
-"0000000000000000000002F5"
-"0000000000000000000002F6"
-"0000000000000000000002F7"
-"0000000000000000000002F8"
-"0000000000000000000002F9"
-"0000000000000000000002FA"
-"0000000000000000000002FB"
-"0000000000000000000002FC"
-"0000000000000000000002FD"
-"0000000000000000000002FE"
-"0000000000000000000002FF"
-"000000000000000000000300"
-"000000000000000000000301"
-"000000000000000000000302"
-"000000000000000000000303"
-"000000000000000000000304"
-"000000000000000000000305"
-"000000000000000000000306"
-"000000000000000000000307"
-"000000000000000000000308"
-"000000000000000000000309"
-"00000000000000000000030A"
-"00000000000000000000030B"
-"00000000000000000000030C"
-"00000000000000000000030D"
-"00000000000000000000030E"
-"00000000000000000000030F"
-"000000000000000000000310"
-"000000000000000000000311"
-"000000000000000000000312"
-"000000000000000000000313"
-"000000000000000000000314"
-"000000000000000000000315"
-"000000000000000000000316"
-"000000000000000000000317"
-"000000000000000000000318"
-"000000000000000000000319"
-"00000000000000000000031A"
-"00000000000000000000031B"
-"00000000000000000000031C"
-"00000000000000000000031D"
-"00000000000000000000031E"
-"00000000000000000000031F"
-"000000000000000000000320"
-"000000000000000000000321"
-"000000000000000000000322"
-"000000000000000000000323"
-"000000000000000000000324"
-"000000000000000000000325"
-"000000000000000000000326"
-"000000000000000000000327"
-"000000000000000000000328"
-"000000000000000000000329"
-"00000000000000000000032A"
-"00000000000000000000032B"
-"00000000000000000000032C"
-"00000000000000000000032D"
-"00000000000000000000032E"
-"00000000000000000000032F"
-"000000000000000000000330"
-"000000000000000000000331"
-"000000000000000000000332"
-"000000000000000000000333"
-"000000000000000000000334"
-"000000000000000000000335"
-"000000000000000000000336"
-"000000000000000000000337"
-"000000000000000000000338"
-"000000000000000000000339"
-"00000000000000000000033A"
-"00000000000000000000033B"
-"00000000000000000000033C"
-"00000000000000000000033D"
-"00000000000000000000033E"
-"00000000000000000000033F"
-"000000000000000000000340"
-"000000000000000000000341"
-"000000000000000000000342"
-"000000000000000000000343"
-"000000000000000000000344"
-"000000000000000000000345"
-"000000000000000000000346"
-"000000000000000000000347"
-"000000000000000000000348"
-"000000000000000000000349"
-"00000000000000000000034A"
-"00000000000000000000034B"
-"00000000000000000000034C"
-"00000000000000000000034D"
-"00000000000000000000034E"
-"00000000000000000000034F"
-"000000000000000000000350"
-"000000000000000000000351"
-"000000000000000000000352"
-"000000000000000000000353"
-"000000000000000000000354"
-"000000000000000000000355"
-"000000000000000000000356"
-"000000000000000000000357"
-"000000000000000000000358"
-"000000000000000000000359"
-"00000000000000000000035A"
-"00000000000000000000035B"
-"00000000000000000000035C"
-"00000000000000000000035D"
-"00000000000000000000035E"
-"00000000000000000000035F"
-"000000000000000000000360"
-"000000000000000000000361"
-"000000000000000000000362"
-"000000000000000000000363"
-"000000000000000000000364"
-"000000000000000000000365"
-"000000000000000000000366"
-"000000000000000000000367"
-"000000000000000000000368"
-"000000000000000000000369"
-"00000000000000000000036A"
-"00000000000000000000036B"
-"00000000000000000000036C"
-"00000000000000000000036D"
-"00000000000000000000036E"
-"00000000000000000000036F"
-"000000000000000000000370"
-"000000000000000000000371"
-"000000000000000000000372"
-"000000000000000000000373"
-"000000000000000000000374"
-"000000000000000000000375"
-"000000000000000000000376"
-"000000000000000000000377"
-"000000000000000000000378"
-"000000000000000000000379"
-"00000000000000000000037A"
-"00000000000000000000037B"
-"00000000000000000000037C"
-"00000000000000000000037D"
-"00000000000000000000037E"
-"00000000000000000000037F"
-"000000000000000000000380"
-"000000000000000000000381"
-"000000000000000000000382"
-"000000000000000000000383"
-"000000000000000000000384"
-"000000000000000000000385"
-"000000000000000000000386"
-"000000000000000000000387"
-"000000000000000000000388"
-"000000000000000000000389"
-"00000000000000000000038A"
-"00000000000000000000038B"
-"00000000000000000000038C"
-"00000000000000000000038D"
-"00000000000000000000038E"
-"00000000000000000000038F"
-"000000000000000000000390"
-"000000000000000000000391"
-"000000000000000000000392"
-"000000000000000000000393"
-"000000000000000000000394"
-"000000000000000000000395"
-"000000000000000000000396"
-"000000000000000000000397"
-"000000000000000000000398"
-"000000000000000000000399"
-"00000000000000000000039A"
-"00000000000000000000039B"
-"00000000000000000000039C"
-"00000000000000000000039D"
-"00000000000000000000039E"
-"00000000000000000000039F"
-"0000000000000000000003A0"
-"0000000000000000000003A1"
-"0000000000000000000003A2"
-"0000000000000000000003A3"
-"0000000000000000000003A4"
-"0000000000000000000003A5"
-"0000000000000000000003A6"
-"0000000000000000000003A7"
-"0000000000000000000003A8"
-"0000000000000000000003A9"
-"0000000000000000000003AA"
-"0000000000000000000003AB"
-"0000000000000000000003AC"
-"0000000000000000000003AD"
-"0000000000000000000003AE"
-"0000000000000000000003AF"
-"0000000000000000000003B0"
-"0000000000000000000003B1"
-"0000000000000000000003B2"
-"0000000000000000000003B3"
-"0000000000000000000003B4"
-"0000000000000000000003B5"
-"0000000000000000000003B6"
-"0000000000000000000003B7"
-"0000000000000000000003B8"
-"0000000000000000000003B9"
-"0000000000000000000003BA"
-"0000000000000000000003BB"
-"0000000000000000000003BC"
-"0000000000000000000003BD"
-"0000000000000000000003BE"
-"0000000000000000000003BF"
-"0000000000000000000003C0"
-"0000000000000000000003C1"
-"0000000000000000000003C2"
-"0000000000000000000003C3"
-"0000000000000000000003C4"
-"0000000000000000000003C5"
-"0000000000000000000003C6"
-"0000000000000000000003C7"
-"0000000000000000000003C8"
-"0000000000000000000003C9"
-"0000000000000000000003CA"
-"0000000000000000000003CB"
-"0000000000000000000003CC"
-"0000000000000000000003CD"
-"0000000000000000000003CE"
-"0000000000000000000003CF"
-"0000000000000000000003D0"
-"0000000000000000000003D1"
-"0000000000000000000003D2"
-"0000000000000000000003D3"
-"0000000000000000000003D4"
-"0000000000000000000003D5"
-"0000000000000000000003D6"
-"0000000000000000000003D7"
-"0000000000000000000003D8"
-"0000000000000000000003D9"
-"0000000000000000000003DA"
-"0000000000000000000003DB"
-"0000000000000000000003DC"
-"0000000000000000000003DD"
-"0000000000000000000003DE"
-"0000000000000000000003DF"
-"0000000000000000000003E0"
-"0000000000000000000003E1"
-"0000000000000000000003E2"
-"0000000000000000000003E3"
-"0000000000000000000003E4"
-"0000000000000000000003E5"
-"0000000000000000000003E6"
-"0000000000000000000003E7"
-"0000000000000000000003E8"
-"0000000000000000000003E9"
-"0000000000000000000003EA"
-"0000000000000000000003EB"
-"0000000000000000000003EC"
-"0000000000000000000003ED"
-"0000000000000000000003EE"
-"0000000000000000000003EF"
-"0000000000000000000003F0"
-"0000000000000000000003F1"
-"0000000000000000000003F2"
-"0000000000000000000003F3"
-"0000000000000000000003F4"
-"0000000000000000000003F5"
-"0000000000000000000003F6"
-"0000000000000000000003F7"
-"0000000000000000000003F8"
-"0000000000000000000003F9"
-"0000000000000000000003FA"
-"0000000000000000000003FB"
-"0000000000000000000003FC"
-"0000000000000000000003FD"
-"0000000000000000000003FE"
-"0000000000000000000003FF"
-"000000000000000000000400"
-"000000000000000000000401"
-"000000000000000000000402"
-"000000000000000000000403"
-"000000000000000000000404"
-"000000000000000000000405"
-"000000000000000000000406"
-"000000000000000000000407"
-"000000000000000000000408"
-"000000000000000000000409"
-"00000000000000000000040A"
-"00000000000000000000040B"
-"00000000000000000000040C"
-"00000000000000000000040D"
-"00000000000000000000040E"
-"00000000000000000000040F"
-"000000000000000000000410"
-"000000000000000000000411"
-"000000000000000000000412"
-"000000000000000000000413"
-"000000000000000000000414"
-"000000000000000000000415"
-"000000000000000000000416"
-"000000000000000000000417"
-"000000000000000000000418"
-"000000000000000000000419"
-"00000000000000000000041A"
-"00000000000000000000041B"
-"00000000000000000000041C"
-"00000000000000000000041D"
-"00000000000000000000041E"
-"00000000000000000000041F"
-"000000000000000000000420"
-"000000000000000000000421"
-"000000000000000000000422"
-"000000000000000000000423"
-"000000000000000000000424"
-"000000000000000000000425"
-"000000000000000000000426"
-"000000000000000000000427"
-"000000000000000000000428"
-"000000000000000000000429"
-"00000000000000000000042A"
-"00000000000000000000042B"
-"00000000000000000000042C"
-"00000000000000000000042D"
-"00000000000000000000042E"
-"00000000000000000000042F"
-"000000000000000000000430"
-"000000000000000000000431"
-"000000000000000000000432"
-"000000000000000000000433"
-"000000000000000000000434"
-"000000000000000000000435"
-"000000000000000000000436"
-"000000000000000000000437"
-"000000000000000000000438"
-"000000000000000000000439"
-"00000000000000000000043A"
-"00000000000000000000043B"
-"00000000000000000000043C"
-"00000000000000000000043D"
-"00000000000000000000043E"
-"00000000000000000000043F"
-"000000000000000000000440"
-"000000000000000000000441"
-"000000000000000000000442"
-"000000000000000000000443"
-"000000000000000000000444"
-"000000000000000000000445"
-"000000000000000000000446"
-"000000000000000000000447"
-"000000000000000000000448"
-"000000000000000000000449"
-"00000000000000000000044A"
-"00000000000000000000044B"
-"00000000000000000000044C"
-"00000000000000000000044D"
-"00000000000000000000044E"
-"00000000000000000000044F"
-"000000000000000000000450"
-"000000000000000000000451"
-"000000000000000000000452"
-"000000000000000000000453"
-"000000000000000000000454"
-"000000000000000000000455"
-"000000000000000000000456"
-"000000000000000000000457"
-"000000000000000000000458"
-"000000000000000000000459"
-"00000000000000000000045A"
-"00000000000000000000045B"
-"00000000000000000000045C"
-"00000000000000000000045D"
-"00000000000000000000045E"
-"00000000000000000000045F"
-"000000000000000000000460"
-"000000000000000000000461"
-"000000000000000000000462"
-"000000000000000000000463"
-"000000000000000000000464"
-"000000000000000000000465"
-"000000000000000000000466"
-"000000000000000000000467"
-"000000000000000000000468"
-"000000000000000000000469"
-"00000000000000000000046A"
-"00000000000000000000046B"
-"00000000000000000000046C"
-"00000000000000000000046D"
-"00000000000000000000046E"
-"00000000000000000000046F"
-"000000000000000000000470"
-"000000000000000000000471"
-"000000000000000000000472"
-"000000000000000000000473"
-"000000000000000000000474"
-"000000000000000000000475"
-"000000000000000000000476"
-"000000000000000000000477"
-"000000000000000000000478"
-"000000000000000000000479"
-"00000000000000000000047A"
-"00000000000000000000047B"
-"00000000000000000000047C"
-"00000000000000000000047D"
-"00000000000000000000047E"
-"00000000000000000000047F"
-"000000000000000000000480"
-"000000000000000000000481"
-"000000000000000000000482"
-"000000000000000000000483"
-"000000000000000000000484"
-"000000000000000000000485"
-"000000000000000000000486"
-"000000000000000000000487"
-"000000000000000000000488"
-"000000000000000000000489"
-"00000000000000000000048A"
-"00000000000000000000048B"
-"00000000000000000000048C"
-"00000000000000000000048D"
-"00000000000000000000048E"
-"00000000000000000000048F"
-"000000000000000000000490"
-"000000000000000000000491"
-"000000000000000000000492"
-"000000000000000000000493"
-"000000000000000000000494"
-"000000000000000000000495"
-"000000000000000000000496"
-"000000000000000000000497"
-"000000000000000000000498"
-"000000000000000000000499"
-"00000000000000000000049A"
-"00000000000000000000049B"
-"00000000000000000000049C"
-"00000000000000000000049D"
-"00000000000000000000049E"
-"00000000000000000000049F"
-"0000000000000000000004A0"
-"0000000000000000000004A1"
-"0000000000000000000004A2"
-"0000000000000000000004A3"
-"0000000000000000000004A4"
-"0000000000000000000004A5"
-"0000000000000000000004A6"
-"0000000000000000000004A7"
-"0000000000000000000004A8"
-"0000000000000000000004A9"
-"0000000000000000000004AA"
-"0000000000000000000004AB"
-"0000000000000000000004AC"
-"0000000000000000000004AD"
-"0000000000000000000004AE"
-"0000000000000000000004AF"
-"0000000000000000000004B0"
-"0000000000000000000004B1"
-"0000000000000000000004B2"
-"0000000000000000000004B3"
-"0000000000000000000004B4"
-"0000000000000000000004B5"
-"0000000000000000000004B6"
-"0000000000000000000004B7"
-"0000000000000000000004B8"
-"0000000000000000000004B9"
-"0000000000000000000004BA"
-"0000000000000000000004BB"
-"0000000000000000000004BC"
-"0000000000000000000004BD"
-"0000000000000000000004BE"
-"0000000000000000000004BF"
-"0000000000000000000004C0"
-"0000000000000000000004C1"
-"0000000000000000000004C2"
-"0000000000000000000004C3"
-"0000000000000000000004C4"
-"0000000000000000000004C5"
-"0000000000000000000004C6"
-"0000000000000000000004C7"
-"0000000000000000000004C8"
-"0000000000000000000004C9"
-"0000000000000000000004CA"
-"0000000000000000000004CB"
-"0000000000000000000004CC"
-"0000000000000000000004CD"
-"0000000000000000000004CE"
-"0000000000000000000004CF"
-"0000000000000000000004D0"
-"0000000000000000000004D1"
-"0000000000000000000004D2"
-"0000000000000000000004D3"
-"0000000000000000000004D4"
-"0000000000000000000004D5"
-"0000000000000000000004D6"
-"0000000000000000000004D7"
-"0000000000000000000004D8"
-"0000000000000000000004D9"
-"0000000000000000000004DA"
-"0000000000000000000004DB"
-"0000000000000000000004DC"
-"0000000000000000000004DD"
-"0000000000000000000004DE"
-"0000000000000000000004DF"
-"0000000000000000000004E0"
-"0000000000000000000004E1"
-"0000000000000000000004E2"
-"0000000000000000000004E3"
-"0000000000000000000004E4"
-"0000000000000000000004E5"
-"0000000000000000000004E6"
-"0000000000000000000004E7"
-"0000000000000000000004E8"
-"0000000000000000000004E9"
-"0000000000000000000004EA"
-"0000000000000000000004EB"
-"0000000000000000000004EC"
-"0000000000000000000004ED"
-"0000000000000000000004EE"
-"0000000000000000000004EF"
-"0000000000000000000004F0"
-"0000000000000000000004F1"
-"0000000000000000000004F2"
-"0000000000000000000004F3"
-"0000000000000000000004F4"
-"0000000000000000000004F5"
-"0000000000000000000004F6"
-"0000000000000000000004F7"
-"0000000000000000000004F8"
-"0000000000000000000004F9"
-"0000000000000000000004FA"
-"0000000000000000000004FB"
-"0000000000000000000004FC"
-"0000000000000000000004FD"
-"0000000000000000000004FE"
-"0000000000000000000004FF"
-"000000000000000000000500"
-"000000000000000000000501"
-"000000000000000000000502"
-"000000000000000000000503"
-"000000000000000000000504"
-"000000000000000000000505"
-"000000000000000000000506"
-"000000000000000000000507"
-"000000000000000000000508"
-"000000000000000000000509"
-"00000000000000000000050A"
-"00000000000000000000050B"
-"00000000000000000000050C"
-"00000000000000000000050D"
-"00000000000000000000050E"
-"00000000000000000000050F"
-"000000000000000000000510"
-"000000000000000000000511"
-"000000000000000000000512"
-"000000000000000000000513"
-"000000000000000000000514"
-"000000000000000000000515"
-"000000000000000000000516"
-"000000000000000000000517"
-"000000000000000000000518"
-"000000000000000000000519"
-"00000000000000000000051A"
-"00000000000000000000051B"
-"00000000000000000000051C"
-"00000000000000000000051D"
-"00000000000000000000051E"
-"00000000000000000000051F"
-"000000000000000000000520"
-"000000000000000000000521"
-"000000000000000000000522"
-"000000000000000000000523"
-"000000000000000000000524"
-"000000000000000000000525"
-"000000000000000000000526"
-"000000000000000000000527"
-"000000000000000000000528"
-"000000000000000000000529"
-"00000000000000000000052A"
-"00000000000000000000052B"
-"00000000000000000000052C"
-"00000000000000000000052D"
-"00000000000000000000052E"
-"00000000000000000000052F"
-"000000000000000000000530"
-"000000000000000000000531"
-"000000000000000000000532"
-"000000000000000000000533"
-"000000000000000000000534"
-"000000000000000000000535"
-"000000000000000000000536"
-"000000000000000000000537"
-"000000000000000000000538"
-"000000000000000000000539"
-"00000000000000000000053A"
-"00000000000000000000053B"
-"00000000000000000000053C"
-"00000000000000000000053D"
-"00000000000000000000053E"
-"00000000000000000000053F"
-"000000000000000000000540"
-"000000000000000000000541"
-"000000000000000000000542"
-"000000000000000000000543"
-"000000000000000000000544"
-"000000000000000000000545"
-"000000000000000000000546"
-"000000000000000000000547"
-"000000000000000000000548"
-"000000000000000000000549"
-"00000000000000000000054A"
-"00000000000000000000054B"
-"00000000000000000000054C"
-"00000000000000000000054D"
-"00000000000000000000054E"
-"00000000000000000000054F"
-"000000000000000000000550"
-"000000000000000000000551"
-"000000000000000000000552"
-"000000000000000000000553"
-"000000000000000000000554"
-"000000000000000000000555"
-"000000000000000000000556"
-"000000000000000000000557"
-"000000000000000000000558"
-"000000000000000000000559"
-"00000000000000000000055A"
-"00000000000000000000055B"
-"00000000000000000000055C"
-"00000000000000000000055D"
-"00000000000000000000055E"
-"00000000000000000000055F"
-"000000000000000000000560"
-"000000000000000000000561"
-"000000000000000000000562"
-"000000000000000000000563"
-"000000000000000000000564"
-"000000000000000000000565"
-"000000000000000000000566"
-"000000000000000000000567"
-"000000000000000000000568"
-"000000000000000000000569"
-"00000000000000000000056A"
-"00000000000000000000056B"
-"00000000000000000000056C"
-"00000000000000000000056D"
-"00000000000000000000056E"
-"00000000000000000000056F"
-"000000000000000000000570"
-"000000000000000000000571"
-"000000000000000000000572"
-"000000000000000000000573"
-"000000000000000000000574"
-"000000000000000000000575"
-"000000000000000000000576"
-"000000000000000000000577"
-"000000000000000000000578"
-"000000000000000000000579"
-"00000000000000000000057A"
-"00000000000000000000057B"
-"00000000000000000000057C"
-"00000000000000000000057D"
-"00000000000000000000057E"
-"00000000000000000000057F"
-"000000000000000000000580"
-"000000000000000000000581"
-"000000000000000000000582"
-"000000000000000000000583"
-"000000000000000000000584"
-"000000000000000000000585"
-"000000000000000000000586"
-"000000000000000000000587"
-"000000000000000000000588"
-"000000000000000000000589"
-"00000000000000000000058A"
-"00000000000000000000058B"
-"00000000000000000000058C"
-"00000000000000000000058D"
-"00000000000000000000058E"
-"00000000000000000000058F"
-"000000000000000000000590"
-"000000000000000000000591"
-"000000000000000000000592"
-"000000000000000000000593"
-"000000000000000000000594"
-"000000000000000000000595"
-"000000000000000000000596"
-"000000000000000000000597"
-"000000000000000000000598"
-"000000000000000000000599"
-"00000000000000000000059A"
-"00000000000000000000059B"
-"00000000000000000000059C"
-"00000000000000000000059D"
-"00000000000000000000059E"
-"00000000000000000000059F"
-"0000000000000000000005A0"
-"0000000000000000000005A1"
-"0000000000000000000005A2"
-"0000000000000000000005A3"
-"0000000000000000000005A4"
-"0000000000000000000005A5"
-"0000000000000000000005A6"
-"0000000000000000000005A7"
-"0000000000000000000005A8"
-"0000000000000000000005A9"
-"0000000000000000000005AA"
-"0000000000000000000005AB"
-"0000000000000000000005AC"
-"0000000000000000000005AD"
-"0000000000000000000005AE"
-"0000000000000000000005AF"
-"0000000000000000000005B0"
-"0000000000000000000005B1"
-"0000000000000000000005B2"
-"0000000000000000000005B3"
-"0000000000000000000005B4"
-"0000000000000000000005B5"
-"0000000000000000000005B6"
-"0000000000000000000005B7"
-"0000000000000000000005B8"
-"0000000000000000000005B9"
-"0000000000000000000005BA"
-"0000000000000000000005BB"
-"0000000000000000000005BC"
-"0000000000000000000005BD"
-"0000000000000000000005BE"
-"0000000000000000000005BF"
-"0000000000000000000005C0"
-"0000000000000000000005C1"
-"0000000000000000000005C2"
-"0000000000000000000005C3"
-"0000000000000000000005C4"
-"0000000000000000000005C5"
-"0000000000000000000005C6"
-"0000000000000000000005C7"
-"0000000000000000000005C8"
-"0000000000000000000005C9"
-"0000000000000000000005CA"
-"0000000000000000000005CB"
-"0000000000000000000005CC"
-"0000000000000000000005CD"
-"0000000000000000000005CE"
-"0000000000000000000005CF"
-"0000000000000000000005D0"
-"0000000000000000000005D1"
-"0000000000000000000005D2"
-"0000000000000000000005D3"
-"0000000000000000000005D4"
-"0000000000000000000005D5"
-"0000000000000000000005D6"
-"0000000000000000000005D7"
-"0000000000000000000005D8"
-"0000000000000000000005D9"
-"0000000000000000000005DA"
-"0000000000000000000005DB"
-"0000000000000000000005DC"
-"0000000000000000000005DD"
-"0000000000000000000005DE"
-"0000000000000000000005DF"
-"0000000000000000000005E0"
-"0000000000000000000005E1"
-"0000000000000000000005E2"
-"0000000000000000000005E3"
-"0000000000000000000005E4"
-"0000000000000000000005E5"
-"0000000000000000000005E6"
-"0000000000000000000005E7"
-"000000010000000000000001"
-"000000010000000000000002"
-"000000010000000000000003"
-"000000010000000000000004"
-"000000010000000000000005"
-"000000010000000000000006"
-"000000010000000000000007"
-"000000010000000000000008"
-"000000010000000000000009"
-"00000001000000000000000A"
-"00000001000000000000000B"
-"00000001000000000000000C"
-"00000001000000000000000D"
-"00000001000000000000000E"
-"00000001000000000000000F"
-"000000010000000000000010"
-"000000010000000000000011"
-"000000010000000000000012"
-"000000010000000000000013"
-"000000010000000000000014"
-"000000010000000000000015"
-"000000010000000000000016"
-"000000010000000000000017"
-"000000010000000000000018"
-"000000010000000000000019"
-"00000001000000000000001A"
-"00000001000000000000001B"
-"00000001000000000000001C"
-"00000001000000000000001D"
-"00000001000000000000001E"
-"00000001000000000000001F"
-"000000010000000000000020"
-"000000010000000000000021"
-"000000010000000000000022"
-"000000010000000000000023"
-"000000010000000000000024"
-"000000010000000000000025"
-"000000010000000000000026"
-"000000010000000000000027"
-"000000010000000000000028"
-"000000010000000000000029"
-"00000001000000000000002A"
-"00000001000000000000002B"
-"00000001000000000000002C"
-"00000001000000000000002D"
-"00000001000000000000002E"
-"00000001000000000000002F"
-"000000010000000000000030"
-"000000010000000000000031"
-"000000010000000000000032"
-"000000010000000000000033"
-"000000010000000000000034"
-"000000010000000000000035"
-"000000010000000000000036"
-"000000010000000000000037"
-"000000010000000000000038"
-"000000010000000000000039"
-"00000001000000000000003A"
-"00000001000000000000003B"
-"00000001000000000000003C"
-"00000001000000000000003D"
-"00000001000000000000003E"
-"00000001000000000000003F"
-"000000010000000000000040"
-"000000010000000000000041"
-"000000010000000000000042"
-"000000010000000000000043"
-"000000010000000000000044"
-"000000010000000000000045"
-"000000010000000000000046"
-"000000010000000000000047"
-"000000010000000000000048"
-"000000010000000000000049"
-"00000001000000000000004A"
-"00000001000000000000004B"
-"00000001000000000000004C"
-"00000001000000000000004D"
-"00000001000000000000004E"
-"00000001000000000000004F"
-"000000010000000000000050"
-"000000010000000000000051"
-"000000010000000000000052"
-"000000010000000000000053"
-"000000010000000000000054"
-"000000010000000000000055"
-"000000010000000000000056"
-"000000010000000000000057"
-"000000010000000000000058"
-"000000010000000000000059"
-"00000001000000000000005A"
-"00000001000000000000005B"
-"00000001000000000000005C"
-"00000001000000000000005D"
-"00000001000000000000005E"
-"00000001000000000000005F"
-"000000010000000000000060"
-"000000010000000000000061"
-"000000010000000000000062"
-"000000010000000000000063"
-"000000010000000000000064"
-"000000010000000000000065"
-"000000010000000000000066"
-"000000010000000000000067"
-"000000010000000000000068"
-"000000010000000000000069"
-"00000001000000000000006A"
-"00000001000000000000006B"
-"00000001000000000000006C"
-"00000001000000000000006D"
-"00000001000000000000006E"
-"00000001000000000000006F"
-"000000010000000000000070"
-"000000010000000000000071"
-"000000010000000000000072"
-"000000010000000000000073"
-"000000010000000000000074"
-"000000010000000000000075"
-"000000010000000000000076"
-"000000010000000000000077"
-"000000010000000000000078"
-"000000010000000000000079"
-"00000001000000000000007A"
-"00000001000000000000007B"
-"00000001000000000000007C"
-"00000001000000000000007D"
-"00000001000000000000007E"
-"00000001000000000000007F"
-"000000010000000000000080"
-"000000010000000000000081"
-"000000010000000000000082"
-"000000010000000000000083"
-"000000010000000000000084"
-"000000010000000000000085"
-"000000010000000000000086"
-"000000010000000000000087"
-"000000010000000000000088"
-"000000010000000000000089"
-"00000001000000000000008A"
-"00000001000000000000008B"
-"00000001000000000000008C"
-"00000001000000000000008D"
-"00000001000000000000008E"
-"00000001000000000000008F"
-"000000010000000000000090"
-"000000010000000000000091"
-"000000010000000000000092"
-"000000010000000000000093"
-"000000010000000000000094"
-"000000010000000000000095"
-"000000010000000000000096"
-"000000010000000000000097"
-"000000010000000000000098"
-"000000010000000000000099"
-"00000001000000000000009A"
-"00000001000000000000009B"
-"00000001000000000000009C"
-"00000001000000000000009D"
-"00000001000000000000009E"
-"00000001000000000000009F"
-"0000000100000000000000A0"
-"0000000100000000000000A1"
-"0000000100000000000000A2"
-"0000000100000000000000A3"
-"0000000100000000000000A4"
-"0000000100000000000000A5"
-"0000000100000000000000A6"
-"0000000100000000000000A7"
-"0000000100000000000000A8"
-"0000000100000000000000A9"
-"0000000100000000000000AA"
-"0000000100000000000000AB"
-"0000000100000000000000AC"
-"0000000100000000000000AD"
-"0000000100000000000000AE"
-"0000000100000000000000AF"
-"0000000100000000000000B0"
-"0000000100000000000000B1"
-"0000000100000000000000B2"
-"0000000100000000000000B3"
-"0000000100000000000000B4"
-"0000000100000000000000B5"
-"0000000100000000000000B6"
-"0000000100000000000000B7"
-"0000000100000000000000B8"
-"0000000100000000000000B9"
-"0000000100000000000000BA"
-"0000000100000000000000BB"
-"0000000100000000000000BC"
-"0000000100000000000000BD"
-"0000000100000000000000BE"
-"0000000100000000000000BF"
-"0000000100000000000000C0"
-"0000000100000000000000C1"
-"0000000100000000000000C2"
-"0000000100000000000000C3"
-"0000000100000000000000C4"
-"0000000100000000000000C5"
-"0000000100000000000000C6"
-"0000000100000000000000C7"
-"0000000100000000000000C8"
-"0000000100000000000000C9"
-"0000000100000000000000CA"
-"0000000100000000000000CB"
-"0000000100000000000000CC"
-"0000000100000000000000CD"
-"0000000100000000000000CE"
-"0000000100000000000000CF"
-"0000000100000000000000D0"
-"0000000100000000000000D1"
-"0000000100000000000000D2"
-"0000000100000000000000D3"
-"0000000100000000000000D4"
-"0000000100000000000000D5"
-"0000000100000000000000D6"
-"0000000100000000000000D7"
-"0000000100000000000000D8"
-"0000000100000000000000D9"
-"0000000100000000000000DA"
-"0000000100000000000000DB"
-"0000000100000000000000DC"
-"0000000100000000000000DD"
-"0000000100000000000000DE"
-"0000000100000000000000DF"
-"0000000100000000000000E0"
-"0000000100000000000000E1"
-"0000000100000000000000E2"
-"0000000100000000000000E3"
-"0000000100000000000000E4"
-"0000000100000000000000E5"
-"0000000100000000000000E6"
-"0000000100000000000000E7"
-"0000000100000000000000E8"
-"0000000100000000000000E9"
-"0000000100000000000000EA"
-"0000000100000000000000EB"
-"0000000100000000000000EC"
-"0000000100000000000000ED"
-"0000000100000000000000EE"
-"0000000100000000000000EF"
-"0000000100000000000000F0"
-"0000000100000000000000F1"
-"0000000100000000000000F2"
-"0000000100000000000000F3"
-"0000000100000000000000F4"
-"0000000100000000000000F5"
-"0000000100000000000000F6"
-"0000000100000000000000F7"
-"0000000100000000000000F8"
-"0000000100000000000000F9"
-"0000000100000000000000FA"
-"0000000100000000000000FB"
-"0000000100000000000000FC"
-"0000000100000000000000FD"
-"0000000100000000000000FE"
-"0000000100000000000000FF"
-"000000010000000000000100"
-"000000010000000000000101"
-"000000010000000000000102"
-"000000010000000000000103"
-"000000010000000000000104"
-"000000010000000000000105"
-"000000010000000000000106"
-"000000010000000000000107"
-"000000010000000000000108"
-"000000010000000000000109"
-"00000001000000000000010A"
-"00000001000000000000010B"
-"00000001000000000000010C"
-"00000001000000000000010D"
-"00000001000000000000010E"
-"00000001000000000000010F"
-"000000010000000000000110"
-"000000010000000000000111"
-"000000010000000000000112"
-"000000010000000000000113"
-"000000010000000000000114"
-"000000010000000000000115"
-"000000010000000000000116"
-"000000010000000000000117"
-"000000010000000000000118"
-"000000010000000000000119"
-"00000001000000000000011A"
-"00000001000000000000011B"
-"00000001000000000000011C"
-"00000001000000000000011D"
-"00000001000000000000011E"
-"00000001000000000000011F"
-"000000010000000000000120"
-"000000010000000000000121"
-"000000010000000000000122"
-"000000010000000000000123"
-"000000010000000000000124"
-"000000010000000000000125"
-"000000010000000000000126"
-"000000010000000000000127"
-"000000010000000000000128"
-"000000010000000000000129"
-"00000001000000000000012A"
-"00000001000000000000012B"
-"00000001000000000000012C"
-"00000001000000000000012D"
-"00000001000000000000012E"
-"00000001000000000000012F"
-"000000010000000000000130"
-"000000010000000000000131"
-"000000010000000000000132"
-"000000010000000000000133"
-"000000010000000000000134"
-"000000010000000000000135"
-"000000010000000000000136"
-"000000010000000000000137"
-"000000010000000000000138"
-"000000010000000000000139"
-"00000001000000000000013A"
-"00000001000000000000013B"
-"00000001000000000000013C"
-"00000001000000000000013D"
-"00000001000000000000013E"
-"00000001000000000000013F"
-"000000010000000000000140"
-"000000010000000000000141"
-"000000010000000000000142"
-"000000010000000000000143"
-"000000010000000000000144"
-"000000010000000000000145"
-"000000010000000000000146"
-"000000010000000000000147"
-"000000010000000000000148"
-"000000010000000000000149"
-"00000001000000000000014A"
-"00000001000000000000014B"
-"00000001000000000000014C"
-"00000001000000000000014D"
-"00000001000000000000014E"
-"00000001000000000000014F"
-"000000010000000000000150"
-"000000010000000000000151"
-"000000010000000000000152"
-"000000010000000000000153"
-"000000010000000000000154"
-"000000010000000000000155"
-"000000010000000000000156"
-"000000010000000000000157"
-"000000010000000000000158"
-"000000010000000000000159"
-"00000001000000000000015A"
-"00000001000000000000015B"
-"00000001000000000000015C"
-"00000001000000000000015D"
-"00000001000000000000015E"
-"00000001000000000000015F"
-"000000010000000000000160"
-"000000010000000000000161"
-"000000010000000000000162"
-"000000010000000000000163"
-"000000010000000000000164"
-"000000010000000000000165"
-"000000010000000000000166"
-"000000010000000000000167"
-"000000010000000000000168"
-"000000010000000000000169"
-"00000001000000000000016A"
-"00000001000000000000016B"
-"00000001000000000000016C"
-"00000001000000000000016D"
-"00000001000000000000016E"
-"00000001000000000000016F"
-"000000010000000000000170"
-"000000010000000000000171"
-"000000010000000000000172"
-"000000010000000000000173"
-"000000010000000000000174"
-"000000010000000000000175"
-"000000010000000000000176"
-"000000010000000000000177"
-"000000010000000000000178"
-"000000010000000000000179"
-"00000001000000000000017A"
-"00000001000000000000017B"
-"00000001000000000000017C"
-"00000001000000000000017D"
-"00000001000000000000017E"
-"00000001000000000000017F"
-"000000010000000000000180"
-"000000010000000000000181"
-"000000010000000000000182"
-"000000010000000000000183"
-"000000010000000000000184"
-"000000010000000000000185"
-"000000010000000000000186"
-"000000010000000000000187"
-"000000010000000000000188"
-"000000010000000000000189"
-"00000001000000000000018A"
-"00000001000000000000018B"
-"00000001000000000000018C"
-"00000001000000000000018D"
-"00000001000000000000018E"
-"00000001000000000000018F"
-"000000010000000000000190"
-"000000010000000000000191"
-"000000010000000000000192"
-"000000010000000000000193"
-"000000010000000000000194"
-"000000010000000000000195"
-"000000010000000000000196"
-"000000010000000000000197"
-"000000010000000000000198"
-"000000010000000000000199"
-"00000001000000000000019A"
-"00000001000000000000019B"
-"00000001000000000000019C"
-"00000001000000000000019D"
-"00000001000000000000019E"
-"00000001000000000000019F"
-"0000000100000000000001A0"
-"0000000100000000000001A1"
-"0000000100000000000001A2"
-"0000000100000000000001A3"
-"0000000100000000000001A4"
-"0000000100000000000001A5"
-"0000000100000000000001A6"
-"0000000100000000000001A7"
-"0000000100000000000001A8"
-"0000000100000000000001A9"
-"0000000100000000000001AA"
-"0000000100000000000001AB"
-"0000000100000000000001AC"
-"0000000100000000000001AD"
-"0000000100000000000001AE"
-"0000000100000000000001AF"
-"0000000100000000000001B0"
-"0000000100000000000001B1"
-"0000000100000000000001B2"
-"0000000100000000000001B3"
-"0000000100000000000001B4"
-"0000000100000000000001B5"
-"0000000100000000000001B6"
-"0000000100000000000001B7"
-"0000000100000000000001B8"
-"0000000100000000000001B9"
-"0000000100000000000001BA"
-"0000000100000000000001BB"
-"0000000100000000000001BC"
-"0000000100000000000001BD"
-"0000000100000000000001BE"
-"0000000100000000000001BF"
-"0000000100000000000001C0"
-"0000000100000000000001C1"
-"0000000100000000000001C2"
-"0000000100000000000001C3"
-"0000000100000000000001C4"
-"0000000100000000000001C5"
-"0000000100000000000001C6"
-"0000000100000000000001C7"
-"0000000100000000000001C8"
-"0000000100000000000001C9"
-"0000000100000000000001CA"
-"0000000100000000000001CB"
-"0000000100000000000001CC"
-"0000000100000000000001CD"
-"0000000100000000000001CE"
-"0000000100000000000001CF"
-"0000000100000000000001D0"
-"0000000100000000000001D1"
-"0000000100000000000001D2"
-"0000000100000000000001D3"
-"0000000100000000000001D4"
-"0000000100000000000001D5"
-"0000000100000000000001D6"
-"0000000100000000000001D7"
-"0000000100000000000001D8"
-"0000000100000000000001D9"
-"0000000100000000000001DA"
-"0000000100000000000001DB"
-"0000000100000000000001DC"
-"0000000100000000000001DD"
-"0000000100000000000001DE"
-"0000000100000000000001DF"
-"0000000100000000000001E0"
-"0000000100000000000001E1"
-"0000000100000000000001E2"
-"0000000100000000000001E3"
-"0000000100000000000001E4"
-"0000000100000000000001E5"
-"0000000100000000000001E6"
-"0000000100000000000001E7"
-"0000000100000000000001E8"
-"0000000100000000000001E9"
-"0000000100000000000001EA"
-"0000000100000000000001EB"
-"0000000100000000000001EC"
-"0000000100000000000001ED"
-"0000000100000000000001EE"
-"0000000100000000000001EF"
-"0000000100000000000001F0"
-"0000000100000000000001F1"
-"0000000100000000000001F2"
-"0000000100000000000001F3"
-"0000000100000000000001F4"
-"0000000100000000000001F5"
-"0000000100000000000001F6"
-"0000000100000000000001F7"
-"0000000100000000000001F8"
-"0000000100000000000001F9"
-"0000000100000000000001FA"
-"0000000100000000000001FB"
-"0000000100000000000001FC"
-"0000000100000000000001FD"
-"0000000100000000000001FE"
-"0000000100000000000001FF"
-"000000010000000000000200"
-"000000010000000000000201"
-"000000010000000000000202"
-"000000010000000000000203"
-"000000010000000000000204"
-"000000010000000000000205"
-"000000010000000000000206"
-"000000010000000000000207"
-"000000010000000000000208"
-"000000010000000000000209"
-"00000001000000000000020A"
-"00000001000000000000020B"
-"00000001000000000000020C"
-"00000001000000000000020D"
-"00000001000000000000020E"
-"00000001000000000000020F"
-"000000010000000000000210"
-"000000010000000000000211"
-"000000010000000000000212"
-"000000010000000000000213"
-"000000010000000000000214"
-"000000010000000000000215"
-"000000010000000000000216"
-"000000010000000000000217"
-"000000010000000000000218"
-"000000010000000000000219"
-"00000001000000000000021A"
-"00000001000000000000021B"
-"00000001000000000000021C"
-"00000001000000000000021D"
-"00000001000000000000021E"
-"00000001000000000000021F"
-"000000010000000000000220"
-"000000010000000000000221"
-"000000010000000000000222"
-"000000010000000000000223"
-"000000010000000000000224"
-"000000010000000000000225"
-"000000010000000000000226"
-"000000010000000000000227"
-"000000010000000000000228"
-"000000010000000000000229"
-"00000001000000000000022A"
-"00000001000000000000022B"
-"00000001000000000000022C"
-"00000001000000000000022D"
-"00000001000000000000022E"
-"00000001000000000000022F"
-"000000010000000000000230"
-"000000010000000000000231"
-"000000010000000000000232"
-"000000010000000000000233"
-"000000010000000000000234"
-"000000010000000000000235"
-"000000010000000000000236"
-"000000010000000000000237"
-"000000010000000000000238"
-"000000010000000000000239"
-"00000001000000000000023A"
-"00000001000000000000023B"
-"00000001000000000000023C"
-"00000001000000000000023D"
-"00000001000000000000023E"
-"00000001000000000000023F"
-"000000010000000000000240"
-"000000010000000000000241"
-"000000010000000000000242"
-"000000010000000000000243"
-"000000010000000000000244"
-"000000010000000000000245"
-"000000010000000000000246"
-"000000010000000000000247"
-"000000010000000000000248"
-"000000010000000000000249"
-"00000001000000000000024A"
-"00000001000000000000024B"
-"00000001000000000000024C"
-"00000001000000000000024D"
-"00000001000000000000024E"
-"00000001000000000000024F"
-"000000010000000000000250"
-"000000010000000000000251"
-"000000010000000000000252"
-"000000010000000000000253"
-"000000010000000000000254"
-"000000010000000000000255"
-"000000010000000000000256"
-"000000010000000000000257"
-"000000010000000000000258"
-"000000010000000000000259"
-"00000001000000000000025A"
-"00000001000000000000025B"
-"00000001000000000000025C"
-"00000001000000000000025D"
-"00000001000000000000025E"
-"00000001000000000000025F"
-"000000010000000000000260"
-"000000010000000000000261"
-"000000010000000000000262"
-"000000010000000000000263"
-"000000010000000000000264"
-"000000010000000000000265"
-"000000010000000000000266"
-"000000010000000000000267"
-"000000010000000000000268"
-"000000010000000000000269"
-"00000001000000000000026A"
-"00000001000000000000026B"
-"00000001000000000000026C"
-"00000001000000000000026D"
-"00000001000000000000026E"
-"00000001000000000000026F"
-"000000010000000000000270"
-"000000010000000000000271"
-"000000010000000000000272"
-"000000010000000000000273"
-"000000010000000000000274"
-"000000010000000000000275"
-"000000010000000000000276"
-"000000010000000000000277"
-"000000010000000000000278"
-"000000010000000000000279"
-"00000001000000000000027A"
-"00000001000000000000027B"
-"00000001000000000000027C"
-"00000001000000000000027D"
-"00000001000000000000027E"
-"00000001000000000000027F"
-"000000010000000000000280"
-"000000010000000000000281"
-"000000010000000000000282"
-"000000010000000000000283"
-"000000010000000000000284"
-"000000010000000000000285"
-"000000010000000000000286"
-"000000010000000000000287"
-"000000010000000000000288"
-"000000010000000000000289"
-"00000001000000000000028A"
-"00000001000000000000028B"
-"00000001000000000000028C"
-"00000001000000000000028D"
-"00000001000000000000028E"
-"00000001000000000000028F"
-"000000010000000000000290"
-"000000010000000000000291"
-"000000010000000000000292"
-"000000010000000000000293"
-"000000010000000000000294"
-"000000010000000000000295"
-"000000010000000000000296"
-"000000010000000000000297"
-"000000010000000000000298"
-"000000010000000000000299"
-"00000001000000000000029A"
-"00000001000000000000029B"
-"00000001000000000000029C"
-"00000001000000000000029D"
-"00000001000000000000029E"
-"00000001000000000000029F"
-"0000000100000000000002A0"
-"0000000100000000000002A1"
-"0000000100000000000002A2"
-"0000000100000000000002A3"
-"0000000100000000000002A4"
-"0000000100000000000002A5"
-"0000000100000000000002A6"
-"0000000100000000000002A7"
-"0000000100000000000002A8"
-"0000000100000000000002A9"
-"0000000100000000000002AA"
-"0000000100000000000002AB"
-"0000000100000000000002AC"
-"0000000100000000000002AD"
-"0000000100000000000002AE"
-"0000000100000000000002AF"
-"0000000100000000000002B0"
-"0000000100000000000002B1"
-"0000000100000000000002B2"
-"0000000100000000000002B3"
-"0000000100000000000002B4"
-"0000000100000000000002B5"
-"0000000100000000000002B6"
-"0000000100000000000002B7"
-"0000000100000000000002B8"
-"0000000100000000000002B9"
-"0000000100000000000002BA"
-"0000000100000000000002BB"
-"0000000100000000000002BC"
-"0000000100000000000002BD"
-"0000000100000000000002BE"
-"0000000100000000000002BF"
-"0000000100000000000002C0"
-"0000000100000000000002C1"
-"0000000100000000000002C2"
-"0000000100000000000002C3"
-"0000000100000000000002C4"
-"0000000100000000000002C5"
-"0000000100000000000002C6"
-"0000000100000000000002C7"
-"0000000100000000000002C8"
-"0000000100000000000002C9"
-"0000000100000000000002CA"
-"0000000100000000000002CB"
-"0000000100000000000002CC"
-"0000000100000000000002CD"
-"0000000100000000000002CE"
-"0000000100000000000002CF"
-"0000000100000000000002D0"
-"0000000100000000000002D1"
-"0000000100000000000002D2"
-"0000000100000000000002D3"
-"0000000100000000000002D4"
-"0000000100000000000002D5"
-"0000000100000000000002D6"
-"0000000100000000000002D7"
-"0000000100000000000002D8"
-"0000000100000000000002D9"
-"0000000100000000000002DA"
-"0000000100000000000002DB"
-"0000000100000000000002DC"
-"0000000100000000000002DD"
-"0000000100000000000002DE"
-"0000000100000000000002DF"
-"0000000100000000000002E0"
-"0000000100000000000002E1"
-"0000000100000000000002E2"
-"0000000100000000000002E3"
-"0000000100000000000002E4"
-"0000000100000000000002E5"
-"0000000100000000000002E6"
-"0000000100000000000002E7"
-"0000000100000000000002E8"
-"0000000100000000000002E9"
-"0000000100000000000002EA"
-"0000000100000000000002EB"
-"0000000100000000000002EC"
-"0000000100000000000002ED"
-"0000000100000000000002EE"
-"0000000100000000000002EF"
-"0000000100000000000002F0"
-"0000000100000000000002F1"
-"0000000100000000000002F2"
-"0000000100000000000002F3"
-"0000000100000000000002F4"
-"0000000100000000000002F5"
-"0000000100000000000002F6"
-"0000000100000000000002F7"
-"0000000100000000000002F8"
-"0000000100000000000002F9"
-"0000000100000000000002FA"
-"0000000100000000000002FB"
-"0000000100000000000002FC"
-"0000000100000000000002FD"
-"0000000100000000000002FE"
-"0000000100000000000002FF"
-"000000010000000000000300"
-"000000010000000000000301"
-"000000010000000000000302"
-"000000010000000000000303"
-"000000010000000000000304"
-"000000010000000000000305"
-"000000010000000000000306"
-"000000010000000000000307"
-"000000010000000000000308"
-"000000010000000000000309"
-"00000001000000000000030A"
-"00000001000000000000030B"
-"00000001000000000000030C"
-"00000001000000000000030D"
-"00000001000000000000030E"
-"00000001000000000000030F"
-"000000010000000000000310"
-"000000010000000000000311"
-"000000010000000000000312"
-"000000010000000000000313"
-"000000010000000000000314"
-"000000010000000000000315"
-"000000010000000000000316"
-"000000010000000000000317"
-"000000010000000000000318"
-"000000010000000000000319"
-"00000001000000000000031A"
-"00000001000000000000031B"
-"00000001000000000000031C"
-"00000001000000000000031D"
-"00000001000000000000031E"
-"00000001000000000000031F"
-"000000010000000000000320"
-"000000010000000000000321"
-"000000010000000000000322"
-"000000010000000000000323"
-"000000010000000000000324"
-"000000010000000000000325"
-"000000010000000000000326"
-"000000010000000000000327"
-"000000010000000000000328"
-"000000010000000000000329"
-"00000001000000000000032A"
-"00000001000000000000032B"
-"00000001000000000000032C"
-"00000001000000000000032D"
-"00000001000000000000032E"
-"00000001000000000000032F"
-"000000010000000000000330"
-"000000010000000000000331"
-"000000010000000000000332"
-"000000010000000000000333"
-"000000010000000000000334"
-"000000010000000000000335"
-"000000010000000000000336"
-"000000010000000000000337"
-"000000010000000000000338"
-"000000010000000000000339"
-"00000001000000000000033A"
-"00000001000000000000033B"
-"00000001000000000000033C"
-"00000001000000000000033D"
-"00000001000000000000033E"
-"00000001000000000000033F"
-"000000010000000000000340"
-"000000010000000000000341"
-"000000010000000000000342"
-"000000010000000000000343"
-"000000010000000000000344"
-"000000010000000000000345"
-"000000010000000000000346"
-"000000010000000000000347"
-"000000010000000000000348"
-"000000010000000000000349"
-"00000001000000000000034A"
-"00000001000000000000034B"
-"00000001000000000000034C"
-"00000001000000000000034D"
-"00000001000000000000034E"
-"00000001000000000000034F"
-"000000010000000000000350"
-"000000010000000000000351"
-"000000010000000000000352"
-"000000010000000000000353"
-"000000010000000000000354"
-"000000010000000000000355"
-"000000010000000000000356"
-"000000010000000000000357"
-"000000010000000000000358"
-"000000010000000000000359"
-"00000001000000000000035A"
-"00000001000000000000035B"
-"00000001000000000000035C"
-"00000001000000000000035D"
-"00000001000000000000035E"
-"00000001000000000000035F"
-"000000010000000000000360"
-"000000010000000000000361"
-"000000010000000000000362"
-"000000010000000000000363"
-"000000010000000000000364"
-"000000010000000000000365"
-"000000010000000000000366"
-"000000010000000000000367"
-"000000010000000000000368"
-"000000010000000000000369"
-"00000001000000000000036A"
-"00000001000000000000036B"
-"00000001000000000000036C"
-"00000001000000000000036D"
-"00000001000000000000036E"
-"00000001000000000000036F"
-"000000010000000000000370"
-"000000010000000000000371"
-"000000010000000000000372"
-"000000010000000000000373"
-"000000010000000000000374"
-"000000010000000000000375"
-"000000010000000000000376"
-"000000010000000000000377"
-"000000010000000000000378"
-"000000010000000000000379"
-"00000001000000000000037A"
-"00000001000000000000037B"
-"00000001000000000000037C"
-"00000001000000000000037D"
-"00000001000000000000037E"
-"00000001000000000000037F"
-"000000010000000000000380"
-"000000010000000000000381"
-"000000010000000000000382"
-"000000010000000000000383"
-"000000010000000000000384"
-"000000010000000000000385"
-"000000010000000000000386"
-"000000010000000000000387"
-"000000010000000000000388"
-"000000010000000000000389"
-"00000001000000000000038A"
-"00000001000000000000038B"
-"00000001000000000000038C"
-"00000001000000000000038D"
-"00000001000000000000038E"
-"00000001000000000000038F"
-"000000010000000000000390"
-"000000010000000000000391"
-"000000010000000000000392"
-"000000010000000000000393"
-"000000010000000000000394"
-"000000010000000000000395"
-"000000010000000000000396"
-"000000010000000000000397"
-"000000010000000000000398"
-"000000010000000000000399"
-"00000001000000000000039A"
-"00000001000000000000039B"
-"00000001000000000000039C"
-"00000001000000000000039D"
-"00000001000000000000039E"
-"00000001000000000000039F"
-"0000000100000000000003A0"
-"0000000100000000000003A1"
-"0000000100000000000003A2"
-"0000000100000000000003A3"
-"0000000100000000000003A4"
-"0000000100000000000003A5"
-"0000000100000000000003A6"
-"0000000100000000000003A7"
-"0000000100000000000003A8"
-"0000000100000000000003A9"
-"0000000100000000000003AA"
-"0000000100000000000003AB"
-"0000000100000000000003AC"
-"0000000100000000000003AD"
-"0000000100000000000003AE"
-"0000000100000000000003AF"
-"0000000100000000000003B0"
-"0000000100000000000003B1"
-"0000000100000000000003B2"
-"0000000100000000000003B3"
-"0000000100000000000003B4"
-"0000000100000000000003B5"
-"0000000100000000000003B6"
-"0000000100000000000003B7"
-"0000000100000000000003B8"
-"0000000100000000000003B9"
-"0000000100000000000003BA"
-"0000000100000000000003BB"
-"0000000100000000000003BC"
-"0000000100000000000003BD"
-"0000000100000000000003BE"
-"0000000100000000000003BF"
-"0000000100000000000003C0"
-"0000000100000000000003C1"
-"0000000100000000000003C2"
-"0000000100000000000003C3"
-"0000000100000000000003C4"
-"0000000100000000000003C5"
-"0000000100000000000003C6"
-"0000000100000000000003C7"
-"0000000100000000000003C8"
-"0000000100000000000003C9"
-"0000000100000000000003CA"
-"0000000100000000000003CB"
-"0000000100000000000003CC"
-"0000000100000000000003CD"
-"0000000100000000000003CE"
-"0000000100000000000003CF"
-"0000000100000000000003D0"
-"0000000100000000000003D1"
-"0000000100000000000003D2"
-"0000000100000000000003D3"
-"0000000100000000000003D4"
-"0000000100000000000003D5"
-"0000000100000000000003D6"
-"0000000100000000000003D7"
-"0000000100000000000003D8"
-"0000000100000000000003D9"
-"0000000100000000000003DA"
-"0000000100000000000003DB"
-"0000000100000000000003DC"
-"0000000100000000000003DD"
-"0000000100000000000003DE"
-"0000000100000000000003DF"
-"0000000100000000000003E0"
-"0000000100000000000003E1"
-"0000000100000000000003E2"
-"0000000100000000000003E3"
-"0000000100000000000003E4"
-"0000000100000000000003E5"
-"0000000100000000000003E6"
-"0000000100000000000003E7"
-"0000000100000000000003E8"
-"0000000100000000000003E9"
-"0000000100000000000003EA"
-"0000000100000000000003EB"
-"0000000100000000000003EC"
-"0000000100000000000003ED"
-"0000000100000000000003EE"
-"0000000100000000000003EF"
-"0000000100000000000003F0"
-"0000000100000000000003F1"
-"0000000100000000000003F2"
-"0000000100000000000003F3"
-"0000000100000000000003F4"
-"0000000100000000000003F5"
-"0000000100000000000003F6"
-"0000000100000000000003F7"
-"0000000100000000000003F8"
-"0000000100000000000003F9"
-"0000000100000000000003FA"
-"0000000100000000000003FB"
-"0000000100000000000003FC"
-"0000000100000000000003FD"
-"0000000100000000000003FE"
-"0000000100000000000003FF"
-"000000010000000000000400"
-"000000010000000000000401"
-"000000010000000000000402"
-"000000010000000000000403"
-"000000010000000000000404"
-"000000010000000000000405"
-"000000010000000000000406"
-"000000010000000000000407"
-"000000010000000000000408"
-"000000010000000000000409"
-"00000001000000000000040A"
-"00000001000000000000040B"
-"00000001000000000000040C"
-"00000001000000000000040D"
-"00000001000000000000040E"
-"00000001000000000000040F"
-"000000010000000000000410"
-"000000010000000000000411"
-"000000010000000000000412"
-"000000010000000000000413"
-"000000010000000000000414"
-"000000010000000000000415"
-"000000010000000000000416"
-"000000010000000000000417"
-"000000010000000000000418"
-"000000010000000000000419"
-"00000001000000000000041A"
-"00000001000000000000041B"
-"00000001000000000000041C"
-"00000001000000000000041D"
-"00000001000000000000041E"
-"00000001000000000000041F"
-"000000010000000000000420"
-"000000010000000000000421"
-"000000010000000000000422"
-"000000010000000000000423"
-"000000010000000000000424"
-"000000010000000000000425"
-"000000010000000000000426"
-"000000010000000000000427"
-"000000010000000000000428"
-"000000010000000000000429"
-"00000001000000000000042A"
-"00000001000000000000042B"
-"00000001000000000000042C"
-"00000001000000000000042D"
-"00000001000000000000042E"
-"00000001000000000000042F"
-"000000010000000000000430"
-"000000010000000000000431"
-"000000010000000000000432"
-"000000010000000000000433"
-"000000010000000000000434"
-"000000010000000000000435"
-"000000010000000000000436"
-"000000010000000000000437"
-"000000010000000000000438"
-"000000010000000000000439"
-"00000001000000000000043A"
-"00000001000000000000043B"
-"00000001000000000000043C"
-"00000001000000000000043D"
-"00000001000000000000043E"
-"00000001000000000000043F"
-"000000010000000000000440"
-"000000010000000000000441"
-"000000010000000000000442"
-"000000010000000000000443"
-"000000010000000000000444"
-"000000010000000000000445"
-"000000010000000000000446"
-"000000010000000000000447"
-"000000010000000000000448"
-"000000010000000000000449"
-"00000001000000000000044A"
-"00000001000000000000044B"
-"00000001000000000000044C"
-"00000001000000000000044D"
-"00000001000000000000044E"
-"00000001000000000000044F"
-"000000010000000000000450"
-"000000010000000000000451"
-"000000010000000000000452"
-"000000010000000000000453"
-"000000010000000000000454"
-"000000010000000000000455"
-"000000010000000000000456"
-"000000010000000000000457"
-"000000010000000000000458"
-"000000010000000000000459"
-"00000001000000000000045A"
-"00000001000000000000045B"
-"00000001000000000000045C"
-"00000001000000000000045D"
-"00000001000000000000045E"
-"00000001000000000000045F"
-"000000010000000000000460"
-"000000010000000000000461"
-"000000010000000000000462"
-"000000010000000000000463"
-"000000010000000000000464"
-"000000010000000000000465"
-"000000010000000000000466"
-"000000010000000000000467"
-"000000010000000000000468"
-"000000010000000000000469"
-"00000001000000000000046A"
-"00000001000000000000046B"
-"00000001000000000000046C"
-"00000001000000000000046D"
-"00000001000000000000046E"
-"00000001000000000000046F"
-"000000010000000000000470"
-"000000010000000000000471"
-"000000010000000000000472"
-"000000010000000000000473"
-"000000010000000000000474"
-"000000010000000000000475"
-"000000010000000000000476"
-"000000010000000000000477"
-"000000010000000000000478"
-"000000010000000000000479"
-"00000001000000000000047A"
-"00000001000000000000047B"
-"00000001000000000000047C"
-"00000001000000000000047D"
-"00000001000000000000047E"
-"00000001000000000000047F"
-"000000010000000000000480"
-"000000010000000000000481"
-"000000010000000000000482"
-"000000010000000000000483"
-"000000010000000000000484"
-"000000010000000000000485"
-"000000010000000000000486"
-"000000010000000000000487"
-"000000010000000000000488"
-"000000010000000000000489"
-"00000001000000000000048A"
-"00000001000000000000048B"
-"00000001000000000000048C"
-"00000001000000000000048D"
-"00000001000000000000048E"
-"00000001000000000000048F"
-"000000010000000000000490"
-"000000010000000000000491"
-"000000010000000000000492"
-"000000010000000000000493"
-"000000010000000000000494"
-"000000010000000000000495"
-"000000010000000000000496"
-"000000010000000000000497"
-"000000010000000000000498"
-"000000010000000000000499"
-"00000001000000000000049A"
-"00000001000000000000049B"
-"00000001000000000000049C"
-"00000001000000000000049D"
-"00000001000000000000049E"
-"00000001000000000000049F"
-"0000000100000000000004A0"
-"0000000100000000000004A1"
-"0000000100000000000004A2"
-"0000000100000000000004A3"
-"0000000100000000000004A4"
-"0000000100000000000004A5"
-"0000000100000000000004A6"
-"0000000100000000000004A7"
-"0000000100000000000004A8"
-"0000000100000000000004A9"
-"0000000100000000000004AA"
-"0000000100000000000004AB"
-"0000000100000000000004AC"
-"0000000100000000000004AD"
-"0000000100000000000004AE"
-"0000000100000000000004AF"
-"0000000100000000000004B0"
-"0000000100000000000004B1"
-"0000000100000000000004B2"
-"0000000100000000000004B3"
-"0000000100000000000004B4"
-"0000000100000000000004B5"
-"0000000100000000000004B6"
-"0000000100000000000004B7"
-"0000000100000000000004B8"
-"0000000100000000000004B9"
-"0000000100000000000004BA"
-"0000000100000000000004BB"
-"0000000100000000000004BC"
-"0000000100000000000004BD"
-"0000000100000000000004BE"
-"0000000100000000000004BF"
-"0000000100000000000004C0"
-"0000000100000000000004C1"
-"0000000100000000000004C2"
-"0000000100000000000004C3"
-"0000000100000000000004C4"
-"0000000100000000000004C5"
-"0000000100000000000004C6"
-"0000000100000000000004C7"
-"0000000100000000000004C8"
-"0000000100000000000004C9"
-"0000000100000000000004CA"
-"0000000100000000000004CB"
-"0000000100000000000004CC"
-"0000000100000000000004CD"
-"0000000100000000000004CE"
-"0000000100000000000004CF"
-"0000000100000000000004D0"
-"0000000100000000000004D1"
-"0000000100000000000004D2"
-"0000000100000000000004D3"
-"0000000100000000000004D4"
-"0000000100000000000004D5"
-"0000000100000000000004D6"
-"0000000100000000000004D7"
-"0000000100000000000004D8"
-"0000000100000000000004D9"
-"0000000100000000000004DA"
-"0000000100000000000004DB"
-"0000000100000000000004DC"
-"0000000100000000000004DD"
-"0000000100000000000004DE"
-"0000000100000000000004DF"
-"0000000100000000000004E0"
-"0000000100000000000004E1"
-"0000000100000000000004E2"
-"0000000100000000000004E3"
-"0000000100000000000004E4"
-"0000000100000000000004E5"
-"0000000100000000000004E6"
-"0000000100000000000004E7"
-"0000000100000000000004E8"
-"0000000100000000000004E9"
-"0000000100000000000004EA"
-"0000000100000000000004EB"
-"0000000100000000000004EC"
-"0000000100000000000004ED"
-"0000000100000000000004EE"
-"0000000100000000000004EF"
-"0000000100000000000004F0"
-"0000000100000000000004F1"
-"0000000100000000000004F2"
-"0000000100000000000004F3"
-"0000000100000000000004F4"
-"0000000100000000000004F5"
-"0000000100000000000004F6"
-"0000000100000000000004F7"
-"0000000100000000000004F8"
-"0000000100000000000004F9"
-"0000000100000000000004FA"
-"0000000100000000000004FB"
-"0000000100000000000004FC"
-"0000000100000000000004FD"
-"0000000100000000000004FE"
-"0000000100000000000004FF"
-"000000010000000000000500"
-"000000010000000000000501"
-"000000010000000000000502"
-"000000010000000000000503"
-"000000010000000000000504"
-"000000010000000000000505"
-"000000010000000000000506"
-"000000010000000000000507"
-"000000010000000000000508"
-"000000010000000000000509"
-"00000001000000000000050A"
-"00000001000000000000050B"
-"00000001000000000000050C"
-"00000001000000000000050D"
-"00000001000000000000050E"
-"00000001000000000000050F"
-"000000010000000000000510"
-"000000010000000000000511"
-"000000010000000000000512"
-"000000010000000000000513"
-"000000010000000000000514"
-"000000010000000000000515"
-"000000010000000000000516"
-"000000010000000000000517"
-"000000010000000000000518"
-"000000010000000000000519"
-"00000001000000000000051A"
-"00000001000000000000051B"
-"00000001000000000000051C"
-"00000001000000000000051D"
-"00000001000000000000051E"
-"00000001000000000000051F"
-"000000010000000000000520"
-"000000010000000000000521"
-"000000010000000000000522"
-"000000010000000000000523"
-"000000010000000000000524"
-"000000010000000000000525"
-"000000010000000000000526"
-"000000010000000000000527"
-"000000010000000000000528"
-"000000010000000000000529"
-"00000001000000000000052A"
-"00000001000000000000052B"
-"00000001000000000000052C"
-"00000001000000000000052D"
-"00000001000000000000052E"
-"00000001000000000000052F"
-"000000010000000000000530"
-"000000010000000000000531"
-"000000010000000000000532"
-"000000010000000000000533"
-"000000010000000000000534"
-"000000010000000000000535"
-"000000010000000000000536"
-"000000010000000000000537"
-"000000010000000000000538"
-"000000010000000000000539"
-"00000001000000000000053A"
-"00000001000000000000053B"
-"00000001000000000000053C"
-"00000001000000000000053D"
-"00000001000000000000053E"
-"00000001000000000000053F"
-"000000010000000000000540"
-"000000010000000000000541"
-"000000010000000000000542"
-"000000010000000000000543"
-"000000010000000000000544"
-"000000010000000000000545"
-"000000010000000000000546"
-"000000010000000000000547"
-"000000010000000000000548"
-"000000010000000000000549"
-"00000001000000000000054A"
-"00000001000000000000054B"
-"00000001000000000000054C"
-"00000001000000000000054D"
-"00000001000000000000054E"
-"00000001000000000000054F"
-"000000010000000000000550"
-"000000010000000000000551"
-"000000010000000000000552"
-"000000010000000000000553"
-"000000010000000000000554"
-"000000010000000000000555"
-"000000010000000000000556"
-"000000010000000000000557"
-"000000010000000000000558"
-"000000010000000000000559"
-"00000001000000000000055A"
-"00000001000000000000055B"
-"00000001000000000000055C"
-"00000001000000000000055D"
-"00000001000000000000055E"
-"00000001000000000000055F"
-"000000010000000000000560"
-"000000010000000000000561"
-"000000010000000000000562"
-"000000010000000000000563"
-"000000010000000000000564"
-"000000010000000000000565"
-"000000010000000000000566"
-"000000010000000000000567"
-"000000010000000000000568"
-"000000010000000000000569"
-"00000001000000000000056A"
-"00000001000000000000056B"
-"00000001000000000000056C"
-"00000001000000000000056D"
-"00000001000000000000056E"
-"00000001000000000000056F"
-"000000010000000000000570"
-"000000010000000000000571"
-"000000010000000000000572"
-"000000010000000000000573"
-"000000010000000000000574"
-"000000010000000000000575"
-"000000010000000000000576"
-"000000010000000000000577"
-"000000010000000000000578"
-"000000010000000000000579"
-"00000001000000000000057A"
-"00000001000000000000057B"
-"00000001000000000000057C"
-"00000001000000000000057D"
-"00000001000000000000057E"
-"00000001000000000000057F"
-"000000010000000000000580"
-"000000010000000000000581"
-"000000010000000000000582"
-"000000010000000000000583"
-"000000010000000000000584"
-"000000010000000000000585"
-"000000010000000000000586"
-"000000010000000000000587"
-"000000010000000000000588"
-"000000010000000000000589"
-"00000001000000000000058A"
-"00000001000000000000058B"
-"00000001000000000000058C"
-"00000001000000000000058D"
-"00000001000000000000058E"
-"00000001000000000000058F"
-"000000010000000000000590"
-"000000010000000000000591"
-"000000010000000000000592"
-"000000010000000000000593"
-"000000010000000000000594"
-"000000010000000000000595"
-"000000010000000000000596"
-"000000010000000000000597"
-"000000010000000000000598"
-"000000010000000000000599"
-"00000001000000000000059A"
-"00000001000000000000059B"
-"00000001000000000000059C"
-"00000001000000000000059D"
-"00000001000000000000059E"
-"00000001000000000000059F"
-"0000000100000000000005A0"
-"0000000100000000000005A1"
-"0000000100000000000005A2"
-"0000000100000000000005A3"
-"0000000100000000000005A4"
-"0000000100000000000005A5"
-"0000000100000000000005A6"
-"0000000100000000000005A7"
-"0000000100000000000005A8"
-"0000000100000000000005A9"
-"0000000100000000000005AA"
-"0000000100000000000005AB"
-"0000000100000000000005AC"
-"0000000100000000000005AD"
-"0000000100000000000005AE"
-"0000000100000000000005AF"
-"0000000100000000000005B0"
-"0000000100000000000005B1"
-"0000000100000000000005B2"
-"0000000100000000000005B3"
-"0000000100000000000005B4"
-"0000000100000000000005B5"
-"0000000100000000000005B6"
-"0000000100000000000005B7"
-"0000000100000000000005B8"
-"0000000100000000000005B9"
-"0000000100000000000005BA"
-"0000000100000000000005BB"
-"0000000100000000000005BC"
-"0000000100000000000005BD"
-"0000000100000000000005BE"
-"0000000100000000000005BF"
-"0000000100000000000005C0"
-"0000000100000000000005C1"
-"0000000100000000000005C2"
-"0000000100000000000005C3"
-"0000000100000000000005C4"
-"0000000100000000000005C5"
-"0000000100000000000005C6"
-"0000000100000000000005C7"
-"0000000100000000000005C8"
-"0000000100000000000005C9"
-"0000000100000000000005CA"
-"0000000100000000000005CB"
-"0000000100000000000005CC"
-"0000000100000000000005CD"
-"0000000100000000000005CE"
-"0000000100000000000005CF"
-"0000000100000000000005D0"
-"0000000100000000000005D1"
-"0000000100000000000005D2"
-"0000000100000000000005D3"
-"0000000100000000000005D4"
-"0000000100000000000005D5"
-"0000000100000000000005D6"
-"0000000100000000000005D7"
-"0000000100000000000005D8"
-"0000000100000000000005D9"
-"0000000100000000000005DA"
-"0000000100000000000005DB"
-"0000000100000000000005DC"
-"0000000100000000000005DD"
-"0000000100000000000005DE"
-"0000000100000000000005DF"
-"0000000100000000000005E0"
-"0000000100000000000005E1"
-"0000000100000000000005E2"
-"0000000100000000000005E3"
-"0000000100000000000005E4"
-"0000000100000000000005E5"
-"0000000100000000000005E6"
-"0000000100000000000005E7"
-"0000000100000000000005E8"
-"0000000100000000000005E9"
-"0000000100000000000005EA"
-"0000000100000000000005EB"
-"0000000100000000000005EC"
-"0000000100000000000005ED"
-"0000000100000000000005EE"
-"0000000100000000000005EF"
-"0000000100000000000005F0"
-"0000000100000000000005F1"
-"0000000100000000000005F2"
-"0000000100000000000005F3"
-"0000000100000000000005F4"
-"000000020000000000000001"
-"000000020000000000000002"
-"000000020000000000000003"
-"000000020000000000000004"
-"000000020000000000000005"
-"000000020000000000000006"
-"000000020000000000000007"
-"000000020000000000000008"
-"000000020000000000000009"
-"00000002000000000000000A"
-"00000002000000000000000B"
-"00000002000000000000000C"
-"00000002000000000000000D"
-"00000002000000000000000E"
-"00000002000000000000000F"
-"000000020000000000000010"
-"000000020000000000000011"
-"000000020000000000000012"
-"000000020000000000000013"
-"000000020000000000000014"
-"000000020000000000000015"
-"000000020000000000000016"
-"000000020000000000000017"
-"000000020000000000000018"
-"000000020000000000000019"
-"00000002000000000000001A"
-"00000002000000000000001B"
-"00000002000000000000001C"
-"00000002000000000000001D"
-"00000002000000000000001E"
-"00000002000000000000001F"
-"000000020000000000000020"
-"000000020000000000000021"
-"000000020000000000000022"
-"000000020000000000000023"
-"000000020000000000000024"
-"000000020000000000000025"
-"000000020000000000000026"
-"000000020000000000000027"
-"000000020000000000000028"
-"000000020000000000000029"
-"00000002000000000000002A"
-"00000002000000000000002B"
-"00000002000000000000002C"
-"00000002000000000000002D"
-"00000002000000000000002E"
-"00000002000000000000002F"
-"000000020000000000000030"
-"000000020000000000000031"
-"000000020000000000000032"
-"000000020000000000000033"
-"000000020000000000000034"
-"000000020000000000000035"
-"000000020000000000000036"
-"000000020000000000000037"
-"000000020000000000000038"
-"000000020000000000000039"
-"00000002000000000000003A"
-"00000002000000000000003B"
-"00000002000000000000003C"
-"00000002000000000000003D"
-"00000002000000000000003E"
-"00000002000000000000003F"
-"000000020000000000000040"
-"000000020000000000000041"
-"000000020000000000000042"
-"000000020000000000000043"
-"000000020000000000000044"
-"000000020000000000000045"
-"000000020000000000000046"
-"000000020000000000000047"
-"000000020000000000000048"
-"000000020000000000000049"
-"00000002000000000000004A"
-"00000002000000000000004B"
-"00000002000000000000004C"
-"00000002000000000000004D"
-"00000002000000000000004E"
-"00000002000000000000004F"
-"000000020000000000000050"
-"000000020000000000000051"
-"000000020000000000000052"
-"000000020000000000000053"
-"000000020000000000000054"
-"000000020000000000000055"
-"000000020000000000000056"
-"000000020000000000000057"
-"000000020000000000000058"
-"000000020000000000000059"
-"00000002000000000000005A"
-"00000002000000000000005B"
-"00000002000000000000005C"
-"00000002000000000000005D"
-"00000002000000000000005E"
-"00000002000000000000005F"
-"000000020000000000000060"
-"000000020000000000000061"
-"000000020000000000000062"
-"000000020000000000000063"
-"000000020000000000000064"
-"000000020000000000000065"
-"000000020000000000000066"
-"000000020000000000000067"
-"000000020000000000000068"
-"000000020000000000000069"
-"00000002000000000000006A"
-"00000002000000000000006B"
-"00000002000000000000006C"
-"00000002000000000000006D"
-"00000002000000000000006E"
-"00000002000000000000006F"
-"000000020000000000000070"
-"000000020000000000000071"
-"000000020000000000000072"
-"000000020000000000000073"
-"000000020000000000000074"
-"000000020000000000000075"
-"000000020000000000000076"
-"000000020000000000000077"
-"000000020000000000000078"
-"000000020000000000000079"
-"00000002000000000000007A"
-"00000002000000000000007B"
-"00000002000000000000007C"
-"00000002000000000000007D"
-"00000002000000000000007E"
-"00000002000000000000007F"
-"000000020000000000000080"
-"000000020000000000000081"
-"000000020000000000000082"
-"000000020000000000000083"
-"000000020000000000000084"
-"000000020000000000000085"
-"000000020000000000000086"
-"000000020000000000000087"
-"000000020000000000000088"
-"000000020000000000000089"
-"00000002000000000000008A"
-"00000002000000000000008B"
-"00000002000000000000008C"
-"00000002000000000000008D"
-"00000002000000000000008E"
-"00000002000000000000008F"
-"000000020000000000000090"
-"000000020000000000000091"
-"000000020000000000000092"
-"000000020000000000000093"
-"000000020000000000000094"
-"000000020000000000000095"
-"000000020000000000000096"
-"000000020000000000000097"
-"000000020000000000000098"
-"000000020000000000000099"
-"00000002000000000000009A"
-"00000002000000000000009B"
-"00000002000000000000009C"
-"00000002000000000000009D"
-"00000002000000000000009E"
-"00000002000000000000009F"
-"0000000200000000000000A0"
-"0000000200000000000000A1"
-"0000000200000000000000A2"
-"0000000200000000000000A3"
-"0000000200000000000000A4"
-"0000000200000000000000A5"
-"0000000200000000000000A6"
-"0000000200000000000000A7"
-"0000000200000000000000A8"
-"0000000200000000000000A9"
-"0000000200000000000000AA"
-"0000000200000000000000AB"
-"0000000200000000000000AC"
-"0000000200000000000000AD"
-"0000000200000000000000AE"
-"0000000200000000000000AF"
-"0000000200000000000000B0"
-"0000000200000000000000B1"
-"0000000200000000000000B2"
-"0000000200000000000000B3"
-"0000000200000000000000B4"
-"0000000200000000000000B5"
-"0000000200000000000000B6"
-"0000000200000000000000B7"
-"0000000200000000000000B8"
-"0000000200000000000000B9"
-"0000000200000000000000BA"
-"0000000200000000000000BB"
-"0000000200000000000000BC"
-"0000000200000000000000BD"
-"0000000200000000000000BE"
-"0000000200000000000000BF"
-"0000000200000000000000C0"
-"0000000200000000000000C1"
-"0000000200000000000000C2"
-"0000000200000000000000C3"
-"0000000200000000000000C4"
-"0000000200000000000000C5"
-"0000000200000000000000C6"
-"0000000200000000000000C7"
-"0000000200000000000000C8"
-"0000000200000000000000C9"
-"0000000200000000000000CA"
-"0000000200000000000000CB"
-"0000000200000000000000CC"
-"0000000200000000000000CD"
-"0000000200000000000000CE"
-"0000000200000000000000CF"
-"0000000200000000000000D0"
-"0000000200000000000000D1"
-"0000000200000000000000D2"
-"0000000200000000000000D3"
-"0000000200000000000000D4"
-"0000000200000000000000D5"
-"0000000200000000000000D6"
-"0000000200000000000000D7"
-"0000000200000000000000D8"
-"0000000200000000000000D9"
-"0000000200000000000000DA"
-"0000000200000000000000DB"
-"0000000200000000000000DC"
-"0000000200000000000000DD"
-"0000000200000000000000DE"
-"0000000200000000000000DF"
-"0000000200000000000000E0"
-"0000000200000000000000E1"
-"0000000200000000000000E2"
-"0000000200000000000000E3"
-"0000000200000000000000E4"
-"0000000200000000000000E5"
-"0000000200000000000000E6"
-"0000000200000000000000E7"
-"0000000200000000000000E8"
-"0000000200000000000000E9"
-"0000000200000000000000EA"
-"0000000200000000000000EB"
-"0000000200000000000000EC"
-"0000000200000000000000ED"
-"0000000200000000000000EE"
-"0000000200000000000000EF"
-"0000000200000000000000F0"
-"0000000200000000000000F1"
-"0000000200000000000000F2"
-"0000000200000000000000F3"
-"0000000200000000000000F4"
-"0000000200000000000000F5"
-"0000000200000000000000F6"
-"0000000200000000000000F7"
-"0000000200000000000000F8"
-"0000000200000000000000F9"
-"0000000200000000000000FA"
-"0000000200000000000000FB"
-"0000000200000000000000FC"
-"0000000200000000000000FD"
-"0000000200000000000000FE"
-"0000000200000000000000FF"
-"000000020000000000000100"
-"000000020000000000000101"
-"000000020000000000000102"
-"000000020000000000000103"
-"000000020000000000000104"
-"000000020000000000000105"
-"000000020000000000000106"
-"000000020000000000000107"
-"000000020000000000000108"
-"000000020000000000000109"
-"00000002000000000000010A"
-"00000002000000000000010B"
-"00000002000000000000010C"
-"00000002000000000000010D"
-"00000002000000000000010E"
-"00000002000000000000010F"
-"000000020000000000000110"
-"000000020000000000000111"
-"000000020000000000000112"
-"000000020000000000000113"
-"000000020000000000000114"
-"000000020000000000000115"
-"000000020000000000000116"
-"000000020000000000000117"
-"000000020000000000000118"
-"000000020000000000000119"
-"00000002000000000000011A"
-"00000002000000000000011B"
-"00000002000000000000011C"
-"00000002000000000000011D"
-"00000002000000000000011E"
-"00000002000000000000011F"
-"000000020000000000000120"
-"000000020000000000000121"
-"000000020000000000000122"
-"000000020000000000000123"
-"000000020000000000000124"
-"000000020000000000000125"
-"000000020000000000000126"
-"000000020000000000000127"
-"000000020000000000000128"
-"000000020000000000000129"
-"00000002000000000000012A"
-"00000002000000000000012B"
-"00000002000000000000012C"
-"00000002000000000000012D"
-"00000002000000000000012E"
-"00000002000000000000012F"
-"000000020000000000000130"
-"000000020000000000000131"
-"000000020000000000000132"
-"000000020000000000000133"
-"000000020000000000000134"
-"000000020000000000000135"
-"000000020000000000000136"
-"000000020000000000000137"
-"000000020000000000000138"
-"000000020000000000000139"
-"00000002000000000000013A"
-"00000002000000000000013B"
-"00000002000000000000013C"
-"00000002000000000000013D"
-"00000002000000000000013E"
-"00000002000000000000013F"
-"000000020000000000000140"
-"000000020000000000000141"
-"000000020000000000000142"
-"000000020000000000000143"
-"000000020000000000000144"
-"000000020000000000000145"
-"000000020000000000000146"
-"000000020000000000000147"
-"000000020000000000000148"
-"000000020000000000000149"
-"00000002000000000000014A"
-"00000002000000000000014B"
-"00000002000000000000014C"
-"00000002000000000000014D"
-"00000002000000000000014E"
-"00000002000000000000014F"
-"000000020000000000000150"
-"000000020000000000000151"
-"000000020000000000000152"
-"000000020000000000000153"
-"000000020000000000000154"
-"000000020000000000000155"
-"000000020000000000000156"
-"000000020000000000000157"
-"000000020000000000000158"
-"000000020000000000000159"
-"00000002000000000000015A"
-"00000002000000000000015B"
-"00000002000000000000015C"
-"00000002000000000000015D"
-"00000002000000000000015E"
-"00000002000000000000015F"
-"000000020000000000000160"
-"000000020000000000000161"
-"000000020000000000000162"
-"000000020000000000000163"
-"000000020000000000000164"
-"000000020000000000000165"
-"000000020000000000000166"
-"000000020000000000000167"
-"000000020000000000000168"
-"000000020000000000000169"
-"00000002000000000000016A"
-"00000002000000000000016B"
-"00000002000000000000016C"
-"00000002000000000000016D"
-"00000002000000000000016E"
-"00000002000000000000016F"
-"000000020000000000000170"
-"000000020000000000000171"
-"000000020000000000000172"
-"000000020000000000000173"
-"000000020000000000000174"
-"000000020000000000000175"
-"000000020000000000000176"
-"000000020000000000000177"
-"000000020000000000000178"
-"000000020000000000000179"
-"00000002000000000000017A"
-"00000002000000000000017B"
-"00000002000000000000017C"
-"00000002000000000000017D"
-"00000002000000000000017E"
-"00000002000000000000017F"
-"000000020000000000000180"
-"000000020000000000000181"
-"000000020000000000000182"
-"000000020000000000000183"
-"000000020000000000000184"
-"000000020000000000000185"
-"000000020000000000000186"
-"000000020000000000000187"
-"000000020000000000000188"
-"000000020000000000000189"
-"00000002000000000000018A"
-"00000002000000000000018B"
-"00000002000000000000018C"
-"00000002000000000000018D"
-"00000002000000000000018E"
-"00000002000000000000018F"
-"000000020000000000000190"
-"000000020000000000000191"
-"000000020000000000000192"
-"000000020000000000000193"
-"000000020000000000000194"
-"000000020000000000000195"
-"000000020000000000000196"
-"000000020000000000000197"
-"000000020000000000000198"
-"000000020000000000000199"
-"00000002000000000000019A"
-"00000002000000000000019B"
-"00000002000000000000019C"
-"00000002000000000000019D"
-"00000002000000000000019E"
-"00000002000000000000019F"
-"0000000200000000000001A0"
-"0000000200000000000001A1"
-"0000000200000000000001A2"
-"0000000200000000000001A3"
-"0000000200000000000001A4"
-"0000000200000000000001A5"
-"0000000200000000000001A6"
-"0000000200000000000001A7"
-"0000000200000000000001A8"
-"0000000200000000000001A9"
-"0000000200000000000001AA"
-"0000000200000000000001AB"
-"0000000200000000000001AC"
-"0000000200000000000001AD"
-"0000000200000000000001AE"
-"0000000200000000000001AF"
-"0000000200000000000001B0"
-"0000000200000000000001B1"
-"0000000200000000000001B2"
-"0000000200000000000001B3"
-"0000000200000000000001B4"
-"0000000200000000000001B5"
-"0000000200000000000001B6"
-"0000000200000000000001B7"
-"0000000200000000000001B8"
-"0000000200000000000001B9"
-"0000000200000000000001BA"
-"0000000200000000000001BB"
-"0000000200000000000001BC"
-"0000000200000000000001BD"
-"0000000200000000000001BE"
-"0000000200000000000001BF"
-"0000000200000000000001C0"
-"0000000200000000000001C1"
-"0000000200000000000001C2"
-"0000000200000000000001C3"
-"0000000200000000000001C4"
-"0000000200000000000001C5"
-"0000000200000000000001C6"
-"0000000200000000000001C7"
-"0000000200000000000001C8"
-"0000000200000000000001C9"
-"0000000200000000000001CA"
-"0000000200000000000001CB"
-"0000000200000000000001CC"
-"0000000200000000000001CD"
-"0000000200000000000001CE"
-"0000000200000000000001CF"
-"0000000200000000000001D0"
-"0000000200000000000001D1"
-"0000000200000000000001D2"
-"0000000200000000000001D3"
-"0000000200000000000001D4"
-"0000000200000000000001D5"
-"0000000200000000000001D6"
-"0000000200000000000001D7"
-"0000000200000000000001D8"
-"0000000200000000000001D9"
-"0000000200000000000001DA"
-"0000000200000000000001DB"
-"0000000200000000000001DC"
-"0000000200000000000001DD"
-"0000000200000000000001DE"
-"0000000200000000000001DF"
-"0000000200000000000001E0"
-"0000000200000000000001E1"
-"0000000200000000000001E2"
-"0000000200000000000001E3"
-"0000000200000000000001E4"
-"0000000200000000000001E5"
-"0000000200000000000001E6"
-"0000000200000000000001E7"
-"0000000200000000000001E8"
-"0000000200000000000001E9"
-"0000000200000000000001EA"
-"0000000200000000000001EB"
-"0000000200000000000001EC"
-"0000000200000000000001ED"
-"0000000200000000000001EE"
-"0000000200000000000001EF"
-"0000000200000000000001F0"
-"0000000200000000000001F1"
-"0000000200000000000001F2"
-"0000000200000000000001F3"
-"0000000200000000000001F4"
-"0000000200000000000001F5"
-"0000000200000000000001F6"
-"0000000200000000000001F7"
-"0000000200000000000001F8"
-"0000000200000000000001F9"
-"0000000200000000000001FA"
-"0000000200000000000001FB"
-"0000000200000000000001FC"
-"0000000200000000000001FD"
-"0000000200000000000001FE"
-"0000000200000000000001FF"
-"000000020000000000000200"
-"000000020000000000000201"
-"000000020000000000000202"
-"000000020000000000000203"
-"000000020000000000000204"
-"000000020000000000000205"
-"000000020000000000000206"
-"000000020000000000000207"
-"000000020000000000000208"
-"000000020000000000000209"
-"00000002000000000000020A"
-"00000002000000000000020B"
-"00000002000000000000020C"
-"00000002000000000000020D"
-"00000002000000000000020E"
-"00000002000000000000020F"
-"000000020000000000000210"
-"000000020000000000000211"
-"000000020000000000000212"
-"000000020000000000000213"
-"000000020000000000000214"
-"000000020000000000000215"
-"000000020000000000000216"
-"000000020000000000000217"
-"000000020000000000000218"
-"000000020000000000000219"
-"00000002000000000000021A"
-"00000002000000000000021B"
-"00000002000000000000021C"
-"00000002000000000000021D"
-"00000002000000000000021E"
-"00000002000000000000021F"
-"000000020000000000000220"
-"000000020000000000000221"
-"000000020000000000000222"
-"000000020000000000000223"
-"000000020000000000000224"
-"000000020000000000000225"
-"000000020000000000000226"
-"000000020000000000000227"
-"000000020000000000000228"
-"000000020000000000000229"
-"00000002000000000000022A"
-"00000002000000000000022B"
-"00000002000000000000022C"
-"00000002000000000000022D"
-"00000002000000000000022E"
-"00000002000000000000022F"
-"000000020000000000000230"
-"000000020000000000000231"
-"000000020000000000000232"
-"000000020000000000000233"
-"000000020000000000000234"
-"000000020000000000000235"
-"000000020000000000000236"
-"000000020000000000000237"
-"000000020000000000000238"
-"000000020000000000000239"
-"00000002000000000000023A"
-"00000002000000000000023B"
-"00000002000000000000023C"
-"00000002000000000000023D"
-"00000002000000000000023E"
-"00000002000000000000023F"
-"000000020000000000000240"
-"000000020000000000000241"
-"000000020000000000000242"
-"000000020000000000000243"
-"000000020000000000000244"
-"000000020000000000000245"
-"000000020000000000000246"
-"000000020000000000000247"
-"000000020000000000000248"
-"000000020000000000000249"
-"00000002000000000000024A"
-"00000002000000000000024B"
-"00000002000000000000024C"
-"00000002000000000000024D"
-"00000002000000000000024E"
-"00000002000000000000024F"
-"000000020000000000000250"
-"000000020000000000000251"
-"000000020000000000000252"
-"000000020000000000000253"
-"000000020000000000000254"
-"000000020000000000000255"
-"000000020000000000000256"
-"000000020000000000000257"
-"000000020000000000000258"
-"000000020000000000000259"
-"00000002000000000000025A"
-"00000002000000000000025B"
-"00000002000000000000025C"
-"00000002000000000000025D"
-"00000002000000000000025E"
-"00000002000000000000025F"
-"000000020000000000000260"
-"000000020000000000000261"
-"000000020000000000000262"
-"000000020000000000000263"
-"000000020000000000000264"
-"000000020000000000000265"
-"000000020000000000000266"
-"000000020000000000000267"
-"000000020000000000000268"
-"000000020000000000000269"
-"00000002000000000000026A"
-"00000002000000000000026B"
-"00000002000000000000026C"
-"00000002000000000000026D"
-"00000002000000000000026E"
-"00000002000000000000026F"
-"000000020000000000000270"
-"000000020000000000000271"
-"000000020000000000000272"
-"000000020000000000000273"
-"000000020000000000000274"
-"000000020000000000000275"
-"000000020000000000000276"
-"000000020000000000000277"
-"000000020000000000000278"
-"000000020000000000000279"
-"00000002000000000000027A"
-"00000002000000000000027B"
-"00000002000000000000027C"
-"00000002000000000000027D"
-"00000002000000000000027E"
-"00000002000000000000027F"
-"000000020000000000000280"
-"000000020000000000000281"
-"000000020000000000000282"
-"000000020000000000000283"
-"000000020000000000000284"
-"000000020000000000000285"
-"000000020000000000000286"
-"000000020000000000000287"
-"000000020000000000000288"
-"000000020000000000000289"
-"00000002000000000000028A"
-"00000002000000000000028B"
-"00000002000000000000028C"
-"00000002000000000000028D"
-"00000002000000000000028E"
-"00000002000000000000028F"
-"000000020000000000000290"
-"000000020000000000000291"
-"000000020000000000000292"
-"000000020000000000000293"
-"000000020000000000000294"
-"000000020000000000000295"
-"000000020000000000000296"
-"000000020000000000000297"
-"000000020000000000000298"
-"000000020000000000000299"
-"00000002000000000000029A"
-"00000002000000000000029B"
-"00000002000000000000029C"
-"00000002000000000000029D"
-"00000002000000000000029E"
-"00000002000000000000029F"
-"0000000200000000000002A0"
-"0000000200000000000002A1"
-"0000000200000000000002A2"
-"0000000200000000000002A3"
-"0000000200000000000002A4"
-"0000000200000000000002A5"
-"0000000200000000000002A6"
-"0000000200000000000002A7"
-"0000000200000000000002A8"
-"0000000200000000000002A9"
-"0000000200000000000002AA"
-"0000000200000000000002AB"
-"0000000200000000000002AC"
-"0000000200000000000002AD"
-"0000000200000000000002AE"
-"0000000200000000000002AF"
-"0000000200000000000002B0"
-"0000000200000000000002B1"
-"0000000200000000000002B2"
-"0000000200000000000002B3"
-"0000000200000000000002B4"
-"0000000200000000000002B5"
-"0000000200000000000002B6"
-"0000000200000000000002B7"
-"0000000200000000000002B8"
-"0000000200000000000002B9"
-"0000000200000000000002BA"
-"0000000200000000000002BB"
-"0000000200000000000002BC"
-"0000000200000000000002BD"
-"0000000200000000000002BE"
-"0000000200000000000002BF"
-"0000000200000000000002C0"
-"0000000200000000000002C1"
-"0000000200000000000002C2"
-"0000000200000000000002C3"
-"0000000200000000000002C4"
-"0000000200000000000002C5"
-"0000000200000000000002C6"
-"0000000200000000000002C7"
-"0000000200000000000002C8"
-"0000000200000000000002C9"
-"0000000200000000000002CA"
-"0000000200000000000002CB"
-"0000000200000000000002CC"
-"0000000200000000000002CD"
-"0000000200000000000002CE"
-"0000000200000000000002CF"
-"0000000200000000000002D0"
-"0000000200000000000002D1"
-"0000000200000000000002D2"
-"0000000200000000000002D3"
-"0000000200000000000002D4"
-"0000000200000000000002D5"
-"0000000200000000000002D6"
-"0000000200000000000002D7"
-"0000000200000000000002D8"
-"0000000200000000000002D9"
-"0000000200000000000002DA"
-"0000000200000000000002DB"
-"0000000200000000000002DC"
-"0000000200000000000002DD"
-"0000000200000000000002DE"
-"0000000200000000000002DF"
-"0000000200000000000002E0"
-"0000000200000000000002E1"
-"0000000200000000000002E2"
-"0000000200000000000002E3"
-"0000000200000000000002E4"
-"0000000200000000000002E5"
-"0000000200000000000002E6"
-"0000000200000000000002E7"
-"0000000200000000000002E8"
-"0000000200000000000002E9"
-"0000000200000000000002EA"
-"0000000200000000000002EB"
-"0000000200000000000002EC"
-"0000000200000000000002ED"
-"0000000200000000000002EE"
-"0000000200000000000002EF"
-"0000000200000000000002F0"
-"0000000200000000000002F1"
-"0000000200000000000002F2"
-"0000000200000000000002F3"
-"0000000200000000000002F4"
-"0000000200000000000002F5"
-"0000000200000000000002F6"
-"0000000200000000000002F7"
-"0000000200000000000002F8"
-"0000000200000000000002F9"
-"0000000200000000000002FA"
-"0000000200000000000002FB"
-"0000000200000000000002FC"
-"0000000200000000000002FD"
-"0000000200000000000002FE"
-"0000000200000000000002FF"
-"000000020000000000000300"
-"000000020000000000000301"
-"000000020000000000000302"
-"000000020000000000000303"
-"000000020000000000000304"
-"000000020000000000000305"
-"000000020000000000000306"
-"000000020000000000000307"
-"000000020000000000000308"
-"000000020000000000000309"
-"00000002000000000000030A"
-"00000002000000000000030B"
-"00000002000000000000030C"
-"00000002000000000000030D"
-"00000002000000000000030E"
-"00000002000000000000030F"
-"000000020000000000000310"
-"000000020000000000000311"
-"000000020000000000000312"
-"000000020000000000000313"
-"000000020000000000000314"
-"000000020000000000000315"
-"000000020000000000000316"
-"000000020000000000000317"
-"000000020000000000000318"
-"000000020000000000000319"
-"00000002000000000000031A"
-"00000002000000000000031B"
-"00000002000000000000031C"
-"00000002000000000000031D"
-"00000002000000000000031E"
-"00000002000000000000031F"
-"000000020000000000000320"
-"000000020000000000000321"
-"000000020000000000000322"
-"000000020000000000000323"
-"000000020000000000000324"
-"000000020000000000000325"
-"000000020000000000000326"
-"000000020000000000000327"
-"000000020000000000000328"
-"000000020000000000000329"
-"00000002000000000000032A"
-"00000002000000000000032B"
-"00000002000000000000032C"
-"00000002000000000000032D"
-"00000002000000000000032E"
-"00000002000000000000032F"
-"000000020000000000000330"
-"000000020000000000000331"
-"000000020000000000000332"
-"000000020000000000000333"
-"000000020000000000000334"
-"000000020000000000000335"
-"000000020000000000000336"
-"000000020000000000000337"
-"000000020000000000000338"
-"000000020000000000000339"
-"00000002000000000000033A"
-"00000002000000000000033B"
-"00000002000000000000033C"
-"00000002000000000000033D"
-"00000002000000000000033E"
-"00000002000000000000033F"
-"000000020000000000000340"
-"000000020000000000000341"
-"000000020000000000000342"
-"000000020000000000000343"
-"000000020000000000000344"
-"000000020000000000000345"
-"000000020000000000000346"
-"000000020000000000000347"
-"000000020000000000000348"
-"000000020000000000000349"
-"00000002000000000000034A"
-"00000002000000000000034B"
-"00000002000000000000034C"
-"00000002000000000000034D"
-"00000002000000000000034E"
-"00000002000000000000034F"
-"000000020000000000000350"
-"000000020000000000000351"
-"000000020000000000000352"
-"000000020000000000000353"
-"000000020000000000000354"
-"000000020000000000000355"
-"000000020000000000000356"
-"000000020000000000000357"
-"000000020000000000000358"
-"000000020000000000000359"
-"00000002000000000000035A"
-"00000002000000000000035B"
-"00000002000000000000035C"
-"00000002000000000000035D"
-"00000002000000000000035E"
-"00000002000000000000035F"
-"000000020000000000000360"
-"000000020000000000000361"
-"000000020000000000000362"
-"000000020000000000000363"
-"000000020000000000000364"
-"000000020000000000000365"
-"000000020000000000000366"
-"000000020000000000000367"
-"000000020000000000000368"
-"000000020000000000000369"
-"00000002000000000000036A"
-"00000002000000000000036B"
-"00000002000000000000036C"
-"00000002000000000000036D"
-"00000002000000000000036E"
-"00000002000000000000036F"
-"000000020000000000000370"
-"000000020000000000000371"
-"000000020000000000000372"
-"000000020000000000000373"
-"000000020000000000000374"
-"000000020000000000000375"
-"000000020000000000000376"
-"000000020000000000000377"
-"000000020000000000000378"
-"000000020000000000000379"
-"00000002000000000000037A"
-"00000002000000000000037B"
-"00000002000000000000037C"
-"00000002000000000000037D"
-"00000002000000000000037E"
-"00000002000000000000037F"
-"000000020000000000000380"
-"000000020000000000000381"
-"000000020000000000000382"
-"000000020000000000000383"
-"000000020000000000000384"
-"000000020000000000000385"
-"000000020000000000000386"
-"000000020000000000000387"
-"000000020000000000000388"
-"000000020000000000000389"
-"00000002000000000000038A"
-"00000002000000000000038B"
-"00000002000000000000038C"
-"00000002000000000000038D"
-"00000002000000000000038E"
-"00000002000000000000038F"
-"000000020000000000000390"
-"000000020000000000000391"
-"000000020000000000000392"
-"000000020000000000000393"
-"000000020000000000000394"
-"000000020000000000000395"
-"000000020000000000000396"
-"000000020000000000000397"
-"000000020000000000000398"
-"000000020000000000000399"
-"00000002000000000000039A"
-"00000002000000000000039B"
-"00000002000000000000039C"
-"00000002000000000000039D"
-"00000002000000000000039E"
-"00000002000000000000039F"
-"0000000200000000000003A0"
-"0000000200000000000003A1"
-"0000000200000000000003A2"
-"0000000200000000000003A3"
-"0000000200000000000003A4"
-"0000000200000000000003A5"
-"0000000200000000000003A6"
-"0000000200000000000003A7"
-"0000000200000000000003A8"
-"0000000200000000000003A9"
-"0000000200000000000003AA"
-"0000000200000000000003AB"
-"0000000200000000000003AC"
-"0000000200000000000003AD"
-"0000000200000000000003AE"
-"0000000200000000000003AF"
-"0000000200000000000003B0"
-"0000000200000000000003B1"
-"0000000200000000000003B2"
-"0000000200000000000003B3"
-"0000000200000000000003B4"
-"0000000200000000000003B5"
-"0000000200000000000003B6"
-"0000000200000000000003B7"
-"0000000200000000000003B8"
-"0000000200000000000003B9"
-"0000000200000000000003BA"
-"0000000200000000000003BB"
-"0000000200000000000003BC"
-"0000000200000000000003BD"
-"0000000200000000000003BE"
-"0000000200000000000003BF"
-"0000000200000000000003C0"
-"0000000200000000000003C1"
-"0000000200000000000003C2"
-"0000000200000000000003C3"
-"0000000200000000000003C4"
-"0000000200000000000003C5"
-"0000000200000000000003C6"
-"0000000200000000000003C7"
-"0000000200000000000003C8"
-"0000000200000000000003C9"
-"0000000200000000000003CA"
-"0000000200000000000003CB"
-"0000000200000000000003CC"
-"0000000200000000000003CD"
-"0000000200000000000003CE"
-"0000000200000000000003CF"
-"0000000200000000000003D0"
-"0000000200000000000003D1"
-"0000000200000000000003D2"
-"0000000200000000000003D3"
-"0000000200000000000003D4"
-"0000000200000000000003D5"
-"0000000200000000000003D6"
-"0000000200000000000003D7"
-"0000000200000000000003D8"
-"0000000200000000000003D9"
-"0000000200000000000003DA"
-"0000000200000000000003DB"
-"0000000200000000000003DC"
-"0000000200000000000003DD"
-"0000000200000000000003DE"
-"0000000200000000000003DF"
-"0000000200000000000003E0"
-"0000000200000000000003E1"
-"0000000200000000000003E2"
-"0000000200000000000003E3"
-"0000000200000000000003E4"
-"0000000200000000000003E5"
-"0000000200000000000003E6"
-"0000000200000000000003E7"
-"0000000200000000000003E8"
-"0000000200000000000003E9"
-"0000000200000000000003EA"
-"0000000200000000000003EB"
-"0000000200000000000003EC"
-"0000000200000000000003ED"
-"0000000200000000000003EE"
-"0000000200000000000003EF"
-"0000000200000000000003F0"
-"0000000200000000000003F1"
-"0000000200000000000003F2"
-"0000000200000000000003F3"
-"0000000200000000000003F4"
-"0000000200000000000003F5"
-"0000000200000000000003F6"
-"0000000200000000000003F7"
-"0000000200000000000003F8"
-"0000000200000000000003F9"
-"0000000200000000000003FA"
-"0000000200000000000003FB"
-"0000000200000000000003FC"
-"0000000200000000000003FD"
-"0000000200000000000003FE"
-"0000000200000000000003FF"
-"000000020000000000000400"
-"000000020000000000000401"
-"000000020000000000000402"
-"000000020000000000000403"
-"000000020000000000000404"
-"000000020000000000000405"
-"000000020000000000000406"
-"000000020000000000000407"
-"000000020000000000000408"
-"000000020000000000000409"
-"00000002000000000000040A"
-"00000002000000000000040B"
-"00000002000000000000040C"
-"00000002000000000000040D"
-"00000002000000000000040E"
-"00000002000000000000040F"
-"000000020000000000000410"
-"000000020000000000000411"
-"000000020000000000000412"
-"000000020000000000000413"
-"000000020000000000000414"
-"000000020000000000000415"
-"000000020000000000000416"
-"000000020000000000000417"
-"000000020000000000000418"
-"000000020000000000000419"
-"00000002000000000000041A"
-"00000002000000000000041B"
-"00000002000000000000041C"
-"00000002000000000000041D"
-"00000002000000000000041E"
-"00000002000000000000041F"
-"000000020000000000000420"
-"000000020000000000000421"
-"000000020000000000000422"
-"000000020000000000000423"
-"000000020000000000000424"
-"000000020000000000000425"
-"000000020000000000000426"
-"000000020000000000000427"
-"000000020000000000000428"
-"000000020000000000000429"
-"00000002000000000000042A"
-"00000002000000000000042B"
-"00000002000000000000042C"
-"00000002000000000000042D"
-"00000002000000000000042E"
-"00000002000000000000042F"
-"000000020000000000000430"
-"000000020000000000000431"
-"000000020000000000000432"
-"000000020000000000000433"
-"000000020000000000000434"
-"000000020000000000000435"
-"000000020000000000000436"
-"000000020000000000000437"
-"000000020000000000000438"
-"000000020000000000000439"
-"00000002000000000000043A"
-"00000002000000000000043B"
-"00000002000000000000043C"
-"00000002000000000000043D"
-"00000002000000000000043E"
-"00000002000000000000043F"
-"000000020000000000000440"
-"000000020000000000000441"
-"000000020000000000000442"
-"000000020000000000000443"
-"000000020000000000000444"
-"000000020000000000000445"
-"000000020000000000000446"
-"000000020000000000000447"
-"000000020000000000000448"
-"000000020000000000000449"
-"00000002000000000000044A"
-"00000002000000000000044B"
-"00000002000000000000044C"
-"00000002000000000000044D"
-"00000002000000000000044E"
-"00000002000000000000044F"
-"000000020000000000000450"
-"000000020000000000000451"
-"000000020000000000000452"
-"000000020000000000000453"
-"000000020000000000000454"
-"000000020000000000000455"
-"000000020000000000000456"
-"000000020000000000000457"
-"000000020000000000000458"
-"000000020000000000000459"
-"00000002000000000000045A"
-"00000002000000000000045B"
-"00000002000000000000045C"
-"00000002000000000000045D"
-"00000002000000000000045E"
-"00000002000000000000045F"
-"000000020000000000000460"
-"000000020000000000000461"
-"000000020000000000000462"
-"000000020000000000000463"
-"000000020000000000000464"
-"000000020000000000000465"
-"000000020000000000000466"
-"000000020000000000000467"
-"000000020000000000000468"
-"000000020000000000000469"
-"00000002000000000000046A"
-"00000002000000000000046B"
-"00000002000000000000046C"
-"00000002000000000000046D"
-"00000002000000000000046E"
-"00000002000000000000046F"
-"000000020000000000000470"
-"000000020000000000000471"
-"000000020000000000000472"
-"000000020000000000000473"
-"000000020000000000000474"
-"000000020000000000000475"
-"000000020000000000000476"
-"000000020000000000000477"
-"000000020000000000000478"
-"000000020000000000000479"
-"00000002000000000000047A"
-"00000002000000000000047B"
-"00000002000000000000047C"
-"00000002000000000000047D"
-"00000002000000000000047E"
-"00000002000000000000047F"
-"000000020000000000000480"
-"000000020000000000000481"
-"000000020000000000000482"
-"000000020000000000000483"
-"000000020000000000000484"
-"000000020000000000000485"
-"000000020000000000000486"
-"000000020000000000000487"
-"000000020000000000000488"
-"000000020000000000000489"
-"00000002000000000000048A"
-"00000002000000000000048B"
-"00000002000000000000048C"
-"00000002000000000000048D"
-"00000002000000000000048E"
-"00000002000000000000048F"
-"000000020000000000000490"
-"000000020000000000000491"
-"000000020000000000000492"
-"000000020000000000000493"
-"000000020000000000000494"
-"000000020000000000000495"
-"000000020000000000000496"
-"000000020000000000000497"
-"000000020000000000000498"
-"000000020000000000000499"
-"00000002000000000000049A"
-"00000002000000000000049B"
-"00000002000000000000049C"
-"00000002000000000000049D"
-"00000002000000000000049E"
-"00000002000000000000049F"
-"0000000200000000000004A0"
-"0000000200000000000004A1"
-"0000000200000000000004A2"
-"0000000200000000000004A3"
-"0000000200000000000004A4"
-"0000000200000000000004A5"
-"0000000200000000000004A6"
-"0000000200000000000004A7"
-"0000000200000000000004A8"
-"0000000200000000000004A9"
-"0000000200000000000004AA"
-"0000000200000000000004AB"
-"0000000200000000000004AC"
-"0000000200000000000004AD"
-"0000000200000000000004AE"
-"0000000200000000000004AF"
-"0000000200000000000004B0"
-"0000000200000000000004B1"
-"0000000200000000000004B2"
-"0000000200000000000004B3"
-"0000000200000000000004B4"
-"0000000200000000000004B5"
-"0000000200000000000004B6"
-"0000000200000000000004B7"
-"0000000200000000000004B8"
-"0000000200000000000004B9"
-"0000000200000000000004BA"
-"0000000200000000000004BB"
-"0000000200000000000004BC"
-"0000000200000000000004BD"
-"0000000200000000000004BE"
-"0000000200000000000004BF"
-"0000000200000000000004C0"
-"0000000200000000000004C1"
-"0000000200000000000004C2"
-"0000000200000000000004C3"
-"0000000200000000000004C4"
-"0000000200000000000004C5"
-"0000000200000000000004C6"
-"0000000200000000000004C7"
-"0000000200000000000004C8"
-"0000000200000000000004C9"
-"0000000200000000000004CA"
-"0000000200000000000004CB"
-"0000000200000000000004CC"
-"0000000200000000000004CD"
-"0000000200000000000004CE"
-"0000000200000000000004CF"
-"0000000200000000000004D0"
-"0000000200000000000004D1"
-"0000000200000000000004D2"
-"0000000200000000000004D3"
-"0000000200000000000004D4"
-"0000000200000000000004D5"
-"0000000200000000000004D6"
-"0000000200000000000004D7"
-"0000000200000000000004D8"
-"0000000200000000000004D9"
-"0000000200000000000004DA"
-"0000000200000000000004DB"
-"0000000200000000000004DC"
-"0000000200000000000004DD"
-"0000000200000000000004DE"
-"0000000200000000000004DF"
-"0000000200000000000004E0"
-"0000000200000000000004E1"
-"0000000200000000000004E2"
-"0000000200000000000004E3"
-"0000000200000000000004E4"
-"0000000200000000000004E5"
-"0000000200000000000004E6"
-"0000000200000000000004E7"
-"0000000200000000000004E8"
-"0000000200000000000004E9"
-"0000000200000000000004EA"
-"0000000200000000000004EB"
-"0000000200000000000004EC"
-"0000000200000000000004ED"
-"0000000200000000000004EE"
-"0000000200000000000004EF"
-"0000000200000000000004F0"
-"0000000200000000000004F1"
-"0000000200000000000004F2"
-"0000000200000000000004F3"
-"0000000200000000000004F4"
-"0000000200000000000004F5"
-"0000000200000000000004F6"
-"0000000200000000000004F7"
-"0000000200000000000004F8"
-"0000000200000000000004F9"
-"0000000200000000000004FA"
-"0000000200000000000004FB"
-"0000000200000000000004FC"
-"0000000200000000000004FD"
-"0000000200000000000004FE"
-"0000000200000000000004FF"
-"000000020000000000000500"
-"000000020000000000000501"
-"000000020000000000000502"
-"000000020000000000000503"
-"000000020000000000000504"
-"000000020000000000000505"
-"000000020000000000000506"
-"000000020000000000000507"
-"000000020000000000000508"
-"000000020000000000000509"
-"00000002000000000000050A"
-"00000002000000000000050B"
-"00000002000000000000050C"
-"00000002000000000000050D"
-"00000002000000000000050E"
-"00000002000000000000050F"
-"000000020000000000000510"
-"000000020000000000000511"
-"000000020000000000000512"
-"000000020000000000000513"
-"000000020000000000000514"
-"000000020000000000000515"
-"000000020000000000000516"
-"000000020000000000000517"
-"000000020000000000000518"
-"000000020000000000000519"
-"00000002000000000000051A"
-"00000002000000000000051B"
-"00000002000000000000051C"
-"00000002000000000000051D"
-"00000002000000000000051E"
-"00000002000000000000051F"
-"000000020000000000000520"
-"000000020000000000000521"
-"000000020000000000000522"
-"000000020000000000000523"
-"000000020000000000000524"
-"000000020000000000000525"
-"000000020000000000000526"
-"000000020000000000000527"
-"000000020000000000000528"
-"000000020000000000000529"
-"00000002000000000000052A"
-"00000002000000000000052B"
-"00000002000000000000052C"
-"00000002000000000000052D"
-"00000002000000000000052E"
-"00000002000000000000052F"
-"000000020000000000000530"
-"000000020000000000000531"
-"000000020000000000000532"
-"000000020000000000000533"
-"000000020000000000000534"
-"000000020000000000000535"
-"000000020000000000000536"
-"000000020000000000000537"
-"000000020000000000000538"
-"000000020000000000000539"
-"00000002000000000000053A"
-"00000002000000000000053B"
-"00000002000000000000053C"
-"00000002000000000000053D"
-"00000002000000000000053E"
-"00000002000000000000053F"
-"000000020000000000000540"
-"000000020000000000000541"
-"000000020000000000000542"
-"000000020000000000000543"
-"000000020000000000000544"
-"000000020000000000000545"
-"000000020000000000000546"
-"000000020000000000000547"
-"000000020000000000000548"
-"000000020000000000000549"
-"00000002000000000000054A"
-"00000002000000000000054B"
-"00000002000000000000054C"
-"00000002000000000000054D"
-"00000002000000000000054E"
-"00000002000000000000054F"
-"000000020000000000000550"
-"000000020000000000000551"
-"000000020000000000000552"
-"000000020000000000000553"
-"000000020000000000000554"
-"000000020000000000000555"
-"000000020000000000000556"
-"000000020000000000000557"
-"000000020000000000000558"
-"000000020000000000000559"
-"00000002000000000000055A"
-"00000002000000000000055B"
-"00000002000000000000055C"
-"00000002000000000000055D"
-"00000002000000000000055E"
-"00000002000000000000055F"
-"000000020000000000000560"
-"000000020000000000000561"
-"000000020000000000000562"
-"000000020000000000000563"
-"000000020000000000000564"
-"000000020000000000000565"
-"000000020000000000000566"
-"000000020000000000000567"
-"000000020000000000000568"
-"000000020000000000000569"
-"00000002000000000000056A"
-"00000002000000000000056B"
-"00000002000000000000056C"
-"00000002000000000000056D"
-"00000002000000000000056E"
-"00000002000000000000056F"
-"000000020000000000000570"
-"000000020000000000000571"
-"000000020000000000000572"
-"000000020000000000000573"
-"000000020000000000000574"
-"000000020000000000000575"
-"000000020000000000000576"
-"000000020000000000000577"
-"000000020000000000000578"
-"000000020000000000000579"
-"00000002000000000000057A"
-"00000002000000000000057B"
-"00000002000000000000057C"
-"00000002000000000000057D"
-"00000002000000000000057E"
-"00000002000000000000057F"
-"000000020000000000000580"
-"000000020000000000000581"
-"000000020000000000000582"
-"000000020000000000000583"
-"000000020000000000000584"
-"000000020000000000000585"
-"000000020000000000000586"
-"000000020000000000000587"
-"000000020000000000000588"
-"000000020000000000000589"
-"00000002000000000000058A"
-"00000002000000000000058B"
-"00000002000000000000058C"
-"00000002000000000000058D"
-"00000002000000000000058E"
-"00000002000000000000058F"
-"000000020000000000000590"
-"000000020000000000000591"
-"000000020000000000000592"
-"000000020000000000000593"
-"000000020000000000000594"
-"000000020000000000000595"
-"000000020000000000000596"
-"000000020000000000000597"
-"000000020000000000000598"
-"000000020000000000000599"
-"00000002000000000000059A"
-"00000002000000000000059B"
-"00000002000000000000059C"
-"00000002000000000000059D"
-"00000002000000000000059E"
-"00000002000000000000059F"
-"0000000200000000000005A0"
-"0000000200000000000005A1"
-"0000000200000000000005A2"
-"0000000200000000000005A3"
-"0000000200000000000005A4"
-"0000000200000000000005A5"
-"0000000200000000000005A6"
-"0000000200000000000005A7"
-"0000000200000000000005A8"
-"0000000200000000000005A9"
-"0000000200000000000005AA"
-"0000000200000000000005AB"
-"0000000200000000000005AC"
-"0000000200000000000005AD"
-"0000000200000000000005AE"
-"0000000200000000000005AF"
-"0000000200000000000005B0"
-"0000000200000000000005B1"
-"0000000200000000000005B2"
-"0000000200000000000005B3"
-"0000000200000000000005B4"
-"0000000200000000000005B5"
-"0000000200000000000005B6"
-"0000000200000000000005B7"
-"0000000200000000000005B8"
-"0000000200000000000005B9"
-"0000000200000000000005BA"
-"000000030000000000000001"
-"000000030000000000000002"
-"000000030000000000000003"
-"000000030000000000000004"
-"000000030000000000000005"
-"000000030000000000000006"
-"000000030000000000000007"
-"000000030000000000000008"
-"000000030000000000000009"
-"00000003000000000000000A"
-"00000003000000000000000B"
-"00000003000000000000000C"
-"00000003000000000000000D"
-"00000003000000000000000E"
-"00000003000000000000000F"
-"000000030000000000000010"
-"000000030000000000000011"
-"000000030000000000000012"
-"000000030000000000000013"
-"000000030000000000000014"
-"000000030000000000000015"
-"000000030000000000000016"
-"000000030000000000000017"
-"000000030000000000000018"
-"000000030000000000000019"
-"00000003000000000000001A"
-"00000003000000000000001B"
-"00000003000000000000001C"
-"00000003000000000000001D"
-"00000003000000000000001E"
-"00000003000000000000001F"
-"000000030000000000000020"
-"000000030000000000000021"
-"000000030000000000000022"
-"000000030000000000000023"
-"000000030000000000000024"
-"000000030000000000000025"
-"000000030000000000000026"
-"000000030000000000000027"
-"000000030000000000000028"
-"000000030000000000000029"
-"00000003000000000000002A"
-"00000003000000000000002B"
-"00000003000000000000002C"
-"00000003000000000000002D"
-"00000003000000000000002E"
-"00000003000000000000002F"
-"000000030000000000000030"
-"000000030000000000000031"
-"000000030000000000000032"
-"000000030000000000000033"
-"000000030000000000000034"
-"000000030000000000000035"
-"000000030000000000000036"
-"000000030000000000000037"
-"000000030000000000000038"
-"000000030000000000000039"
-"00000003000000000000003A"
-"00000003000000000000003B"
-"00000003000000000000003C"
-"00000003000000000000003D"
-"00000003000000000000003E"
-"00000003000000000000003F"
-"000000030000000000000040"
-"000000030000000000000041"
-"000000030000000000000042"
-"000000030000000000000043"
-"000000030000000000000044"
-"000000030000000000000045"
-"000000030000000000000046"
-"000000030000000000000047"
-"000000030000000000000048"
-"000000030000000000000049"
-"00000003000000000000004A"
-"00000003000000000000004B"
-"00000003000000000000004C"
-"00000003000000000000004D"
-"00000003000000000000004E"
-"00000003000000000000004F"
-"000000030000000000000050"
-"000000030000000000000051"
-"000000030000000000000052"
-"000000030000000000000053"
-"000000030000000000000054"
-"000000030000000000000055"
-"000000030000000000000056"
-"000000030000000000000057"
-"000000030000000000000058"
-"000000030000000000000059"
-"00000003000000000000005A"
-"00000003000000000000005B"
-"00000003000000000000005C"
-"00000003000000000000005D"
-"00000003000000000000005E"
-"00000003000000000000005F"
-"000000030000000000000060"
-"000000030000000000000061"
-"000000030000000000000062"
-"000000030000000000000063"
-"000000030000000000000064"
-"000000030000000000000065"
-"000000030000000000000066"
-"000000030000000000000067"
-"000000030000000000000068"
-"000000030000000000000069"
-"00000003000000000000006A"
-"00000003000000000000006B"
-"00000003000000000000006C"
-"00000003000000000000006D"
-"00000003000000000000006E"
-"00000003000000000000006F"
-"000000030000000000000070"
-"000000030000000000000071"
-"000000030000000000000072"
-"000000030000000000000073"
-"000000030000000000000074"
-"000000030000000000000075"
-"000000030000000000000076"
-"000000030000000000000077"
-"000000030000000000000078"
-"000000030000000000000079"
-"00000003000000000000007A"
-"00000003000000000000007B"
-"00000003000000000000007C"
-"00000003000000000000007D"
-"00000003000000000000007E"
-"00000003000000000000007F"
-"000000030000000000000080"
-"000000030000000000000081"
-"000000030000000000000082"
-"000000030000000000000083"
-"000000030000000000000084"
-"000000030000000000000085"
-"000000030000000000000086"
-"000000030000000000000087"
-"000000030000000000000088"
-"000000030000000000000089"
-"00000003000000000000008A"
-"00000003000000000000008B"
-"00000003000000000000008C"
-"00000003000000000000008D"
-"00000003000000000000008E"
-"00000003000000000000008F"
-"000000030000000000000090"
-"000000030000000000000091"
-"000000030000000000000092"
-"000000030000000000000093"
-"000000030000000000000094"
-"000000030000000000000095"
-"000000030000000000000096"
-"000000030000000000000097"
-"000000030000000000000098"
-"000000030000000000000099"
-"00000003000000000000009A"
-"00000003000000000000009B"
-"00000003000000000000009C"
-"00000003000000000000009D"
-"00000003000000000000009E"
-"00000003000000000000009F"
-"0000000300000000000000A0"
-"0000000300000000000000A1"
-"0000000300000000000000A2"
-"0000000300000000000000A3"
-"0000000300000000000000A4"
-"0000000300000000000000A5"
-"0000000300000000000000A6"
-"0000000300000000000000A7"
-"0000000300000000000000A8"
-"0000000300000000000000A9"
-"0000000300000000000000AA"
-"0000000300000000000000AB"
-"0000000300000000000000AC"
-"0000000300000000000000AD"
-"0000000300000000000000AE"
-"0000000300000000000000AF"
-"0000000300000000000000B0"
-"0000000300000000000000B1"
-"0000000300000000000000B2"
-"0000000300000000000000B3"
-"0000000300000000000000B4"
-"0000000300000000000000B5"
-"0000000300000000000000B6"
-"0000000300000000000000B7"
-"0000000300000000000000B8"
-"0000000300000000000000B9"
-"0000000300000000000000BA"
-"0000000300000000000000BB"
-"0000000300000000000000BC"
-"0000000300000000000000BD"
-"0000000300000000000000BE"
-"0000000300000000000000BF"
-"0000000300000000000000C0"
-"0000000300000000000000C1"
-"0000000300000000000000C2"
-"0000000300000000000000C3"
-"0000000300000000000000C4"
-"0000000300000000000000C5"
-"0000000300000000000000C6"
-"0000000300000000000000C7"
-"0000000300000000000000C8"
-"0000000300000000000000C9"
-"0000000300000000000000CA"
-"0000000300000000000000CB"
-"0000000300000000000000CC"
-"0000000300000000000000CD"
-"0000000300000000000000CE"
-"0000000300000000000000CF"
-"0000000300000000000000D0"
-"0000000300000000000000D1"
-"0000000300000000000000D2"
-"0000000300000000000000D3"
-"0000000300000000000000D4"
-"0000000300000000000000D5"
-"0000000300000000000000D6"
-"0000000300000000000000D7"
-"0000000300000000000000D8"
-"0000000300000000000000D9"
-"0000000300000000000000DA"
-"0000000300000000000000DB"
-"0000000300000000000000DC"
-"0000000300000000000000DD"
-"0000000300000000000000DE"
-"0000000300000000000000DF"
-"0000000300000000000000E0"
-"0000000300000000000000E1"
-"0000000300000000000000E2"
-"0000000300000000000000E3"
-"0000000300000000000000E4"
-"0000000300000000000000E5"
-"0000000300000000000000E6"
-"0000000300000000000000E7"
-"0000000300000000000000E8"
-"0000000300000000000000E9"
-"0000000300000000000000EA"
-"0000000300000000000000EB"
-"0000000300000000000000EC"
-"0000000300000000000000ED"
-"0000000300000000000000EE"
-"0000000300000000000000EF"
-"0000000300000000000000F0"
-"0000000300000000000000F1"
-"0000000300000000000000F2"
-"0000000300000000000000F3"
-"0000000300000000000000F4"
-"0000000300000000000000F5"
-"0000000300000000000000F6"
-"0000000300000000000000F7"
-"0000000300000000000000F8"
-"0000000300000000000000F9"
-"0000000300000000000000FA"
-"0000000300000000000000FB"
-"0000000300000000000000FC"
-"0000000300000000000000FD"
-"0000000300000000000000FE"
-"0000000300000000000000FF"
-"000000030000000000000100"
-"000000030000000000000101"
-"000000030000000000000102"
-"000000030000000000000103"
-"000000030000000000000104"
-"000000030000000000000105"
-"000000030000000000000106"
-"000000030000000000000107"
-"000000030000000000000108"
-"000000030000000000000109"
-"00000003000000000000010A"
-"00000003000000000000010B"
-"00000003000000000000010C"
-"00000003000000000000010D"
-"00000003000000000000010E"
-"00000003000000000000010F"
-"000000030000000000000110"
-"000000030000000000000111"
-"000000030000000000000112"
-"000000030000000000000113"
-"000000030000000000000114"
-"000000030000000000000115"
-"000000030000000000000116"
-"000000030000000000000117"
-"000000030000000000000118"
-"000000030000000000000119"
-"00000003000000000000011A"
-"00000003000000000000011B"
-"00000003000000000000011C"
-"00000003000000000000011D"
-"00000003000000000000011E"
-"00000003000000000000011F"
-"000000030000000000000120"
-"000000030000000000000121"
-"000000030000000000000122"
-"000000030000000000000123"
-"000000030000000000000124"
-"000000030000000000000125"
-"000000030000000000000126"
-"000000030000000000000127"
-"000000030000000000000128"
-"000000030000000000000129"
-"00000003000000000000012A"
-"00000003000000000000012B"
-"00000003000000000000012C"
-"00000003000000000000012D"
-"00000003000000000000012E"
-"00000003000000000000012F"
-"000000030000000000000130"
-"000000030000000000000131"
-"000000030000000000000132"
-"000000030000000000000133"
-"000000030000000000000134"
-"000000030000000000000135"
-"000000030000000000000136"
-"000000030000000000000137"
-"000000030000000000000138"
-"000000030000000000000139"
-"00000003000000000000013A"
-"00000003000000000000013B"
-"00000003000000000000013C"
-"00000003000000000000013D"
-"00000003000000000000013E"
-"00000003000000000000013F"
-"000000030000000000000140"
-"000000030000000000000141"
-"000000030000000000000142"
-"000000030000000000000143"
-"000000030000000000000144"
-"000000030000000000000145"
-"000000030000000000000146"
-"000000030000000000000147"
-"000000030000000000000148"
-"000000030000000000000149"
-"00000003000000000000014A"
-"00000003000000000000014B"
-"00000003000000000000014C"
-"00000003000000000000014D"
-"00000003000000000000014E"
-"00000003000000000000014F"
-"000000030000000000000150"
-"000000030000000000000151"
-"000000030000000000000152"
-"000000030000000000000153"
-"000000030000000000000154"
-"000000030000000000000155"
-"000000030000000000000156"
-"000000030000000000000157"
-"000000030000000000000158"
-"000000030000000000000159"
-"00000003000000000000015A"
-"00000003000000000000015B"
-"00000003000000000000015C"
-"00000003000000000000015D"
-"00000003000000000000015E"
-"00000003000000000000015F"
-"000000030000000000000160"
-"000000030000000000000161"
-"000000030000000000000162"
-"000000030000000000000163"
-"000000030000000000000164"
-"000000030000000000000165"
-"000000030000000000000166"
-"000000030000000000000167"
-"000000030000000000000168"
-"000000030000000000000169"
-"00000003000000000000016A"
-"00000003000000000000016B"
-"00000003000000000000016C"
-"00000003000000000000016D"
-"00000003000000000000016E"
-"00000003000000000000016F"
-"000000030000000000000170"
-"000000030000000000000171"
-"000000030000000000000172"
-"000000030000000000000173"
-"000000030000000000000174"
-"000000030000000000000175"
-"000000030000000000000176"
-"000000030000000000000177"
-"000000030000000000000178"
-"000000030000000000000179"
-"00000003000000000000017A"
-"00000003000000000000017B"
-"00000003000000000000017C"
-"00000003000000000000017D"
-"00000003000000000000017E"
-"00000003000000000000017F"
-"000000030000000000000180"
-"000000030000000000000181"
-"000000030000000000000182"
-"000000030000000000000183"
-"000000030000000000000184"
-"000000030000000000000185"
-"000000030000000000000186"
-"000000030000000000000187"
-"000000030000000000000188"
-"000000030000000000000189"
-"00000003000000000000018A"
-"00000003000000000000018B"
-"00000003000000000000018C"
-"00000003000000000000018D"
-"00000003000000000000018E"
-"00000003000000000000018F"
-"000000030000000000000190"
-"000000030000000000000191"
-"000000030000000000000192"
-"000000030000000000000193"
-"000000030000000000000194"
-"000000030000000000000195"
-"000000030000000000000196"
-"000000030000000000000197"
-"000000030000000000000198"
-"000000030000000000000199"
-"00000003000000000000019A"
-"00000003000000000000019B"
-"00000003000000000000019C"
-"00000003000000000000019D"
-"00000003000000000000019E"
-"00000003000000000000019F"
-"0000000300000000000001A0"
-"0000000300000000000001A1"
-"0000000300000000000001A2"
-"0000000300000000000001A3"
-"0000000300000000000001A4"
-"0000000300000000000001A5"
-"0000000300000000000001A6"
-"0000000300000000000001A7"
-"0000000300000000000001A8"
-"0000000300000000000001A9"
-"0000000300000000000001AA"
-"0000000300000000000001AB"
-"0000000300000000000001AC"
-"0000000300000000000001AD"
-"0000000300000000000001AE"
-"0000000300000000000001AF"
-"0000000300000000000001B0"
-"0000000300000000000001B1"
-"0000000300000000000001B2"
-"0000000300000000000001B3"
-"0000000300000000000001B4"
-"0000000300000000000001B5"
-"0000000300000000000001B6"
-"0000000300000000000001B7"
-"0000000300000000000001B8"
-"0000000300000000000001B9"
-"0000000300000000000001BA"
-"0000000300000000000001BB"
-"0000000300000000000001BC"
-"0000000300000000000001BD"
-"0000000300000000000001BE"
-"0000000300000000000001BF"
-"0000000300000000000001C0"
-"0000000300000000000001C1"
-"0000000300000000000001C2"
-"0000000300000000000001C3"
-"0000000300000000000001C4"
-"0000000300000000000001C5"
-"0000000300000000000001C6"
-"0000000300000000000001C7"
-"0000000300000000000001C8"
-"0000000300000000000001C9"
-"0000000300000000000001CA"
-"0000000300000000000001CB"
-"0000000300000000000001CC"
-"0000000300000000000001CD"
-"0000000300000000000001CE"
-"0000000300000000000001CF"
-"0000000300000000000001D0"
-"0000000300000000000001D1"
-"0000000300000000000001D2"
-"0000000300000000000001D3"
-"0000000300000000000001D4"
-"0000000300000000000001D5"
-"0000000300000000000001D6"
-"0000000300000000000001D7"
-"0000000300000000000001D8"
-"0000000300000000000001D9"
-"0000000300000000000001DA"
-"0000000300000000000001DB"
-"0000000300000000000001DC"
-"0000000300000000000001DD"
-"0000000300000000000001DE"
-"0000000300000000000001DF"
-"0000000300000000000001E0"
-"0000000300000000000001E1"
-"0000000300000000000001E2"
-"0000000300000000000001E3"
-"0000000300000000000001E4"
-"0000000300000000000001E5"
-"0000000300000000000001E6"
-"0000000300000000000001E7"
-"0000000300000000000001E8"
-"0000000300000000000001E9"
-"0000000300000000000001EA"
-"0000000300000000000001EB"
-"0000000300000000000001EC"
-"0000000300000000000001ED"
-"0000000300000000000001EE"
-"0000000300000000000001EF"
-"0000000300000000000001F0"
-"0000000300000000000001F1"
-"0000000300000000000001F2"
-"0000000300000000000001F3"
-"0000000300000000000001F4"
-"0000000300000000000001F5"
-"0000000300000000000001F6"
-"0000000300000000000001F7"
-"0000000300000000000001F8"
-"0000000300000000000001F9"
-"0000000300000000000001FA"
-"0000000300000000000001FB"
-"0000000300000000000001FC"
-"0000000300000000000001FD"
-"0000000300000000000001FE"
-"0000000300000000000001FF"
-"000000030000000000000200"
-"000000030000000000000201"
-"000000030000000000000202"
-"000000030000000000000203"
-"000000030000000000000204"
-"000000030000000000000205"
-"000000030000000000000206"
-"000000030000000000000207"
-"000000030000000000000208"
-"000000030000000000000209"
-"00000003000000000000020A"
-"00000003000000000000020B"
-"00000003000000000000020C"
-"00000003000000000000020D"
-"00000003000000000000020E"
-"00000003000000000000020F"
-"000000030000000000000210"
-"000000030000000000000211"
-"000000030000000000000212"
-"000000030000000000000213"
-"000000030000000000000214"
-"000000030000000000000215"
-"000000030000000000000216"
-"000000030000000000000217"
-"000000030000000000000218"
-"000000030000000000000219"
-"00000003000000000000021A"
-"00000003000000000000021B"
-"00000003000000000000021C"
-"00000003000000000000021D"
-"00000003000000000000021E"
-"00000003000000000000021F"
-"000000030000000000000220"
-"000000030000000000000221"
-"000000030000000000000222"
-"000000030000000000000223"
-"000000030000000000000224"
-"000000030000000000000225"
-"000000030000000000000226"
-"000000030000000000000227"
-"000000030000000000000228"
-"000000030000000000000229"
-"00000003000000000000022A"
-"00000003000000000000022B"
-"00000003000000000000022C"
-"00000003000000000000022D"
-"00000003000000000000022E"
-"00000003000000000000022F"
-"000000030000000000000230"
-"000000030000000000000231"
-"000000030000000000000232"
-"000000030000000000000233"
-"000000030000000000000234"
-"000000030000000000000235"
-"000000030000000000000236"
-"000000030000000000000237"
-"000000030000000000000238"
-"000000030000000000000239"
-"00000003000000000000023A"
-"00000003000000000000023B"
-"00000003000000000000023C"
-"00000003000000000000023D"
-"00000003000000000000023E"
-"00000003000000000000023F"
-"000000030000000000000240"
-"000000030000000000000241"
-"000000030000000000000242"
-"000000030000000000000243"
-"000000030000000000000244"
-"000000030000000000000245"
-"000000030000000000000246"
-"000000030000000000000247"
-"000000030000000000000248"
-"000000030000000000000249"
-"00000003000000000000024A"
-"00000003000000000000024B"
-"00000003000000000000024C"
-"00000003000000000000024D"
-"00000003000000000000024E"
-"00000003000000000000024F"
-"000000030000000000000250"
-"000000030000000000000251"
-"000000030000000000000252"
-"000000030000000000000253"
-"000000030000000000000254"
-"000000030000000000000255"
-"000000030000000000000256"
-"000000030000000000000257"
-"000000030000000000000258"
-"000000030000000000000259"
-"00000003000000000000025A"
-"00000003000000000000025B"
-"00000003000000000000025C"
-"00000003000000000000025D"
-"00000003000000000000025E"
-"00000003000000000000025F"
-"000000030000000000000260"
-"000000030000000000000261"
-"000000030000000000000262"
-"000000030000000000000263"
-"000000030000000000000264"
-"000000030000000000000265"
-"000000030000000000000266"
-"000000030000000000000267"
-"000000030000000000000268"
-"000000030000000000000269"
-"00000003000000000000026A"
-"00000003000000000000026B"
-"00000003000000000000026C"
-"00000003000000000000026D"
-"00000003000000000000026E"
-"00000003000000000000026F"
-"000000030000000000000270"
-"000000030000000000000271"
-"000000030000000000000272"
-"000000030000000000000273"
-"000000030000000000000274"
-"000000030000000000000275"
-"000000030000000000000276"
-"000000030000000000000277"
-"000000030000000000000278"
-"000000030000000000000279"
-"00000003000000000000027A"
-"00000003000000000000027B"
-"00000003000000000000027C"
-"00000003000000000000027D"
-"00000003000000000000027E"
-"00000003000000000000027F"
-"000000030000000000000280"
-"000000030000000000000281"
-"000000030000000000000282"
-"000000030000000000000283"
-"000000030000000000000284"
-"000000030000000000000285"
-"000000030000000000000286"
-"000000030000000000000287"
-"000000030000000000000288"
-"000000030000000000000289"
-"00000003000000000000028A"
-"00000003000000000000028B"
-"00000003000000000000028C"
-"00000003000000000000028D"
-"00000003000000000000028E"
-"00000003000000000000028F"
-"000000030000000000000290"
-"000000030000000000000291"
-"000000030000000000000292"
-"000000030000000000000293"
-"000000030000000000000294"
-"000000030000000000000295"
-"000000030000000000000296"
-"000000030000000000000297"
-"000000030000000000000298"
-"000000030000000000000299"
-"00000003000000000000029A"
-"00000003000000000000029B"
-"00000003000000000000029C"
-"00000003000000000000029D"
-"00000003000000000000029E"
-"00000003000000000000029F"
-"0000000300000000000002A0"
-"0000000300000000000002A1"
-"0000000300000000000002A2"
-"0000000300000000000002A3"
-"0000000300000000000002A4"
-"0000000300000000000002A5"
-"0000000300000000000002A6"
-"0000000300000000000002A7"
-"0000000300000000000002A8"
-"0000000300000000000002A9"
-"0000000300000000000002AA"
-"0000000300000000000002AB"
-"0000000300000000000002AC"
-"0000000300000000000002AD"
-"0000000300000000000002AE"
-"0000000300000000000002AF"
-"0000000300000000000002B0"
-"0000000300000000000002B1"
-"0000000300000000000002B2"
-"0000000300000000000002B3"
-"0000000300000000000002B4"
-"0000000300000000000002B5"
-"0000000300000000000002B6"
-"0000000300000000000002B7"
-"0000000300000000000002B8"
-"0000000300000000000002B9"
-"0000000300000000000002BA"
-"0000000300000000000002BB"
-"0000000300000000000002BC"
-"0000000300000000000002BD"
-"0000000300000000000002BE"
-"0000000300000000000002BF"
-"0000000300000000000002C0"
-"0000000300000000000002C1"
-"0000000300000000000002C2"
-"0000000300000000000002C3"
-"0000000300000000000002C4"
-"0000000300000000000002C5"
-"0000000300000000000002C6"
-"0000000300000000000002C7"
-"0000000300000000000002C8"
-"0000000300000000000002C9"
-"0000000300000000000002CA"
-"0000000300000000000002CB"
-"0000000300000000000002CC"
-"0000000300000000000002CD"
-"0000000300000000000002CE"
-"0000000300000000000002CF"
-"0000000300000000000002D0"
-"0000000300000000000002D1"
-"0000000300000000000002D2"
-"0000000300000000000002D3"
-"0000000300000000000002D4"
-"0000000300000000000002D5"
-"0000000300000000000002D6"
-"0000000300000000000002D7"
-"0000000300000000000002D8"
-"0000000300000000000002D9"
-"0000000300000000000002DA"
-"0000000300000000000002DB"
-"0000000300000000000002DC"
-"0000000300000000000002DD"
-"0000000300000000000002DE"
-"0000000300000000000002DF"
-"0000000300000000000002E0"
-"0000000300000000000002E1"
-"0000000300000000000002E2"
-"0000000300000000000002E3"
-"0000000300000000000002E4"
-"0000000300000000000002E5"
-"0000000300000000000002E6"
-"0000000300000000000002E7"
-"0000000300000000000002E8"
-"0000000300000000000002E9"
-"0000000300000000000002EA"
-"0000000300000000000002EB"
-"0000000300000000000002EC"
-"0000000300000000000002ED"
-"0000000300000000000002EE"
-"0000000300000000000002EF"
-"0000000300000000000002F0"
-"0000000300000000000002F1"
-"0000000300000000000002F2"
-"0000000300000000000002F3"
-"0000000300000000000002F4"
-"0000000300000000000002F5"
-"0000000300000000000002F6"
-"0000000300000000000002F7"
-"0000000300000000000002F8"
-"0000000300000000000002F9"
-"0000000300000000000002FA"
-"0000000300000000000002FB"
-"0000000300000000000002FC"
-"0000000300000000000002FD"
-"0000000300000000000002FE"
-"0000000300000000000002FF"
-"000000030000000000000300"
-"000000030000000000000301"
-"000000030000000000000302"
-"000000030000000000000303"
-"000000030000000000000304"
-"000000030000000000000305"
-"000000030000000000000306"
-"000000030000000000000307"
-"000000030000000000000308"
-"000000030000000000000309"
-"00000003000000000000030A"
-"00000003000000000000030B"
-"00000003000000000000030C"
-"00000003000000000000030D"
-"00000003000000000000030E"
-"00000003000000000000030F"
-"000000030000000000000310"
-"000000030000000000000311"
-"000000030000000000000312"
-"000000030000000000000313"
-"000000030000000000000314"
-"000000030000000000000315"
-"000000030000000000000316"
-"000000030000000000000317"
-"000000030000000000000318"
-"000000030000000000000319"
-"00000003000000000000031A"
-"00000003000000000000031B"
-"00000003000000000000031C"
-"00000003000000000000031D"
-"00000003000000000000031E"
-"00000003000000000000031F"
-"000000030000000000000320"
-"000000030000000000000321"
-"000000030000000000000322"
-"000000030000000000000323"
-"000000030000000000000324"
-"000000030000000000000325"
-"000000030000000000000326"
-"000000030000000000000327"
-"000000030000000000000328"
-"000000030000000000000329"
-"00000003000000000000032A"
-"00000003000000000000032B"
-"00000003000000000000032C"
-"00000003000000000000032D"
-"00000003000000000000032E"
-"00000003000000000000032F"
-"000000030000000000000330"
-"000000030000000000000331"
-"000000030000000000000332"
-"000000030000000000000333"
-"000000030000000000000334"
-"000000030000000000000335"
-"000000030000000000000336"
-"000000030000000000000337"
-"000000030000000000000338"
-"000000030000000000000339"
-"00000003000000000000033A"
-"00000003000000000000033B"
-"00000003000000000000033C"
-"00000003000000000000033D"
-"00000003000000000000033E"
-"00000003000000000000033F"
-"000000030000000000000340"
-"000000030000000000000341"
-"000000030000000000000342"
-"000000030000000000000343"
-"000000030000000000000344"
-"000000030000000000000345"
-"000000030000000000000346"
-"000000030000000000000347"
-"000000030000000000000348"
-"000000030000000000000349"
-"00000003000000000000034A"
-"00000003000000000000034B"
-"00000003000000000000034C"
-"00000003000000000000034D"
-"00000003000000000000034E"
-"00000003000000000000034F"
-"000000030000000000000350"
-"000000030000000000000351"
-"000000030000000000000352"
-"000000030000000000000353"
-"000000030000000000000354"
-"000000030000000000000355"
-"000000030000000000000356"
-"000000030000000000000357"
-"000000030000000000000358"
-"000000030000000000000359"
-"00000003000000000000035A"
-"00000003000000000000035B"
-"00000003000000000000035C"
-"00000003000000000000035D"
-"00000003000000000000035E"
-"00000003000000000000035F"
-"000000030000000000000360"
-"000000030000000000000361"
-"000000030000000000000362"
-"000000030000000000000363"
-"000000030000000000000364"
-"000000030000000000000365"
-"000000030000000000000366"
-"000000030000000000000367"
-"000000030000000000000368"
-"000000030000000000000369"
-"00000003000000000000036A"
-"00000003000000000000036B"
-"00000003000000000000036C"
-"00000003000000000000036D"
-"00000003000000000000036E"
-"00000003000000000000036F"
-"000000030000000000000370"
-"000000030000000000000371"
-"000000030000000000000372"
-"000000030000000000000373"
-"000000030000000000000374"
-"000000030000000000000375"
-"000000030000000000000376"
-"000000030000000000000377"
-"000000030000000000000378"
-"000000030000000000000379"
-"00000003000000000000037A"
-"00000003000000000000037B"
-"00000003000000000000037C"
-"00000003000000000000037D"
-"00000003000000000000037E"
-"00000003000000000000037F"
-"000000030000000000000380"
-"000000030000000000000381"
-"000000030000000000000382"
-"000000030000000000000383"
-"000000030000000000000384"
-"000000030000000000000385"
-"000000030000000000000386"
-"000000030000000000000387"
-"000000030000000000000388"
-"000000030000000000000389"
-"00000003000000000000038A"
-"00000003000000000000038B"
-"00000003000000000000038C"
-"00000003000000000000038D"
-"00000003000000000000038E"
-"00000003000000000000038F"
-"000000030000000000000390"
-"000000030000000000000391"
-"000000030000000000000392"
-"000000030000000000000393"
-"000000030000000000000394"
-"000000030000000000000395"
-"000000030000000000000396"
-"000000030000000000000397"
-"000000030000000000000398"
-"000000030000000000000399"
-"00000003000000000000039A"
-"00000003000000000000039B"
-"00000003000000000000039C"
-"00000003000000000000039D"
-"00000003000000000000039E"
-"00000003000000000000039F"
-"0000000300000000000003A0"
-"0000000300000000000003A1"
-"0000000300000000000003A2"
-"0000000300000000000003A3"
-"0000000300000000000003A4"
-"0000000300000000000003A5"
-"0000000300000000000003A6"
-"0000000300000000000003A7"
-"0000000300000000000003A8"
-"0000000300000000000003A9"
-"0000000300000000000003AA"
-"0000000300000000000003AB"
-"0000000300000000000003AC"
-"0000000300000000000003AD"
-"0000000300000000000003AE"
-"0000000300000000000003AF"
-"0000000300000000000003B0"
-"0000000300000000000003B1"
-"0000000300000000000003B2"
-"0000000300000000000003B3"
-"0000000300000000000003B4"
-"0000000300000000000003B5"
-"0000000300000000000003B6"
-"0000000300000000000003B7"
-"0000000300000000000003B8"
-"0000000300000000000003B9"
-"0000000300000000000003BA"
-"0000000300000000000003BB"
-"0000000300000000000003BC"
-"0000000300000000000003BD"
-"0000000300000000000003BE"
-"0000000300000000000003BF"
-"0000000300000000000003C0"
-"0000000300000000000003C1"
-"0000000300000000000003C2"
-"0000000300000000000003C3"
-"0000000300000000000003C4"
-"0000000300000000000003C5"
-"0000000300000000000003C6"
-"0000000300000000000003C7"
-"0000000300000000000003C8"
-"0000000300000000000003C9"
-"0000000300000000000003CA"
-"0000000300000000000003CB"
-"0000000300000000000003CC"
-"0000000300000000000003CD"
-"0000000300000000000003CE"
-"0000000300000000000003CF"
-"0000000300000000000003D0"
-"0000000300000000000003D1"
-"0000000300000000000003D2"
-"0000000300000000000003D3"
-"0000000300000000000003D4"
-"0000000300000000000003D5"
-"0000000300000000000003D6"
-"0000000300000000000003D7"
-"0000000300000000000003D8"
-"0000000300000000000003D9"
-"0000000300000000000003DA"
-"0000000300000000000003DB"
-"0000000300000000000003DC"
-"0000000300000000000003DD"
-"0000000300000000000003DE"
-"0000000300000000000003DF"
-"0000000300000000000003E0"
-"0000000300000000000003E1"
-"0000000300000000000003E2"
-"0000000300000000000003E3"
-"0000000300000000000003E4"
-"0000000300000000000003E5"
-"0000000300000000000003E6"
-"0000000300000000000003E7"
-"0000000300000000000003E8"
-"0000000300000000000003E9"
-"0000000300000000000003EA"
-"0000000300000000000003EB"
-"0000000300000000000003EC"
-"0000000300000000000003ED"
-"0000000300000000000003EE"
-"0000000300000000000003EF"
-"0000000300000000000003F0"
-"0000000300000000000003F1"
-"0000000300000000000003F2"
-"0000000300000000000003F3"
-"0000000300000000000003F4"
-"0000000300000000000003F5"
-"0000000300000000000003F6"
-"0000000300000000000003F7"
-"0000000300000000000003F8"
-"0000000300000000000003F9"
-"0000000300000000000003FA"
-"0000000300000000000003FB"
-"0000000300000000000003FC"
-"0000000300000000000003FD"
-"0000000300000000000003FE"
-"0000000300000000000003FF"
-"000000030000000000000400"
-"000000030000000000000401"
-"000000030000000000000402"
-"000000030000000000000403"
-"000000030000000000000404"
-"000000030000000000000405"
-"000000030000000000000406"
-"000000030000000000000407"
-"000000030000000000000408"
-"000000030000000000000409"
-"00000003000000000000040A"
-"00000003000000000000040B"
-"00000003000000000000040C"
-"00000003000000000000040D"
-"00000003000000000000040E"
-"00000003000000000000040F"
-"000000030000000000000410"
-"000000030000000000000411"
-"000000030000000000000412"
-"000000030000000000000413"
-"000000030000000000000414"
-"000000030000000000000415"
-"000000030000000000000416"
-"000000030000000000000417"
-"000000030000000000000418"
-"000000030000000000000419"
-"00000003000000000000041A"
-"00000003000000000000041B"
-"00000003000000000000041C"
-"00000003000000000000041D"
-"00000003000000000000041E"
-"00000003000000000000041F"
-"000000030000000000000420"
-"000000030000000000000421"
-"000000030000000000000422"
-"000000030000000000000423"
-"000000030000000000000424"
-"000000030000000000000425"
-"000000030000000000000426"
-"000000030000000000000427"
-"000000030000000000000428"
-"000000030000000000000429"
-"00000003000000000000042A"
-"00000003000000000000042B"
-"00000003000000000000042C"
-"00000003000000000000042D"
-"00000003000000000000042E"
-"00000003000000000000042F"
-"000000030000000000000430"
-"000000030000000000000431"
-"000000030000000000000432"
-"000000030000000000000433"
-"000000030000000000000434"
-"000000030000000000000435"
-"000000030000000000000436"
-"000000030000000000000437"
-"000000030000000000000438"
-"000000030000000000000439"
-"00000003000000000000043A"
-"00000003000000000000043B"
-"00000003000000000000043C"
-"00000003000000000000043D"
-"00000003000000000000043E"
-"00000003000000000000043F"
-"000000030000000000000440"
-"000000030000000000000441"
-"000000030000000000000442"
-"000000030000000000000443"
-"000000030000000000000444"
-"000000030000000000000445"
-"000000030000000000000446"
-"000000030000000000000447"
-"000000030000000000000448"
-"000000030000000000000449"
-"00000003000000000000044A"
-"00000003000000000000044B"
-"00000003000000000000044C"
-"00000003000000000000044D"
-"00000003000000000000044E"
-"00000003000000000000044F"
-"000000030000000000000450"
-"000000030000000000000451"
-"000000030000000000000452"
-"000000030000000000000453"
-"000000030000000000000454"
-"000000030000000000000455"
-"000000030000000000000456"
-"000000030000000000000457"
-"000000030000000000000458"
-"000000030000000000000459"
-"00000003000000000000045A"
-"00000003000000000000045B"
-"00000003000000000000045C"
-"00000003000000000000045D"
-"00000003000000000000045E"
-"00000003000000000000045F"
-"000000030000000000000460"
-"000000030000000000000461"
-"000000030000000000000462"
-"000000030000000000000463"
-"000000030000000000000464"
-"000000030000000000000465"
-"000000030000000000000466"
-"000000030000000000000467"
-"000000030000000000000468"
-"000000030000000000000469"
-"00000003000000000000046A"
-"00000003000000000000046B"
-"00000003000000000000046C"
-"00000003000000000000046D"
-"00000003000000000000046E"
-"00000003000000000000046F"
-"000000030000000000000470"
-"000000030000000000000471"
-"000000030000000000000472"
-"000000030000000000000473"
-"000000030000000000000474"
-"000000030000000000000475"
-"000000030000000000000476"
-"000000030000000000000477"
-"000000030000000000000478"
-"000000030000000000000479"
-"00000003000000000000047A"
-"00000003000000000000047B"
-"00000003000000000000047C"
-"00000003000000000000047D"
-"00000003000000000000047E"
-"00000003000000000000047F"
-"000000030000000000000480"
-"000000030000000000000481"
-"000000030000000000000482"
-"000000030000000000000483"
-"000000030000000000000484"
-"000000030000000000000485"
-"000000030000000000000486"
-"000000030000000000000487"
-"000000030000000000000488"
-"000000030000000000000489"
-"00000003000000000000048A"
-"00000003000000000000048B"
-"00000003000000000000048C"
-"00000003000000000000048D"
-"00000003000000000000048E"
-"00000003000000000000048F"
-"000000030000000000000490"
-"000000030000000000000491"
-"000000030000000000000492"
-"000000030000000000000493"
-"000000030000000000000494"
-"000000030000000000000495"
-"000000030000000000000496"
-"000000030000000000000497"
-"000000030000000000000498"
-"000000030000000000000499"
-"00000003000000000000049A"
-"00000003000000000000049B"
-"00000003000000000000049C"
-"00000003000000000000049D"
-"00000003000000000000049E"
-"00000003000000000000049F"
-"0000000300000000000004A0"
-"0000000300000000000004A1"
-"0000000300000000000004A2"
-"0000000300000000000004A3"
-"0000000300000000000004A4"
-"0000000300000000000004A5"
-"0000000300000000000004A6"
-"0000000300000000000004A7"
-"0000000300000000000004A8"
-"0000000300000000000004A9"
-"0000000300000000000004AA"
-"0000000300000000000004AB"
-"0000000300000000000004AC"
-"0000000300000000000004AD"
-"0000000300000000000004AE"
-"0000000300000000000004AF"
-"0000000300000000000004B0"
-"0000000300000000000004B1"
-"0000000300000000000004B2"
-"0000000300000000000004B3"
-"0000000300000000000004B4"
-"0000000300000000000004B5"
-"0000000300000000000004B6"
-"0000000300000000000004B7"
-"0000000300000000000004B8"
-"0000000300000000000004B9"
-"0000000300000000000004BA"
-"0000000300000000000004BB"
-"0000000300000000000004BC"
-"0000000300000000000004BD"
-"0000000300000000000004BE"
-"0000000300000000000004BF"
-"0000000300000000000004C0"
-"0000000300000000000004C1"
-"0000000300000000000004C2"
-"0000000300000000000004C3"
-"0000000300000000000004C4"
-"0000000300000000000004C5"
-"0000000300000000000004C6"
-"0000000300000000000004C7"
-"0000000300000000000004C8"
-"0000000300000000000004C9"
-"0000000300000000000004CA"
-"0000000300000000000004CB"
-"0000000300000000000004CC"
-"0000000300000000000004CD"
-"0000000300000000000004CE"
-"0000000300000000000004CF"
-"0000000300000000000004D0"
-"0000000300000000000004D1"
-"0000000300000000000004D2"
-"0000000300000000000004D3"
-"0000000300000000000004D4"
-"0000000300000000000004D5"
-"0000000300000000000004D6"
-"0000000300000000000004D7"
-"0000000300000000000004D8"
-"0000000300000000000004D9"
-"0000000300000000000004DA"
-"0000000300000000000004DB"
-"0000000300000000000004DC"
-"0000000300000000000004DD"
-"0000000300000000000004DE"
-"0000000300000000000004DF"
-"0000000300000000000004E0"
-"0000000300000000000004E1"
-"0000000300000000000004E2"
-"0000000300000000000004E3"
-"0000000300000000000004E4"
-"0000000300000000000004E5"
-"0000000300000000000004E6"
-"0000000300000000000004E7"
-"0000000300000000000004E8"
-"0000000300000000000004E9"
-"0000000300000000000004EA"
-"0000000300000000000004EB"
-"0000000300000000000004EC"
-"0000000300000000000004ED"
-"0000000300000000000004EE"
-"0000000300000000000004EF"
-"0000000300000000000004F0"
-"0000000300000000000004F1"
-"0000000300000000000004F2"
-"0000000300000000000004F3"
-"0000000300000000000004F4"
-"0000000300000000000004F5"
-"0000000300000000000004F6"
-"0000000300000000000004F7"
-"0000000300000000000004F8"
-"0000000300000000000004F9"
-"0000000300000000000004FA"
-"0000000300000000000004FB"
-"0000000300000000000004FC"
-"0000000300000000000004FD"
-"0000000300000000000004FE"
-"0000000300000000000004FF"
-"000000030000000000000500"
-"000000030000000000000501"
-"000000030000000000000502"
-"000000030000000000000503"
-"000000030000000000000504"
-"000000030000000000000505"
-"000000030000000000000506"
-"000000030000000000000507"
-"000000030000000000000508"
-"000000030000000000000509"
-"00000003000000000000050A"
-"00000003000000000000050B"
-"00000003000000000000050C"
-"00000003000000000000050D"
-"00000003000000000000050E"
-"00000003000000000000050F"
-"000000030000000000000510"
-"000000030000000000000511"
-"000000030000000000000512"
-"000000030000000000000513"
-"000000030000000000000514"
-"000000030000000000000515"
-"000000030000000000000516"
-"000000030000000000000517"
-"000000030000000000000518"
-"000000030000000000000519"
-"00000003000000000000051A"
-"00000003000000000000051B"
-"00000003000000000000051C"
-"00000003000000000000051D"
-"00000003000000000000051E"
-"00000003000000000000051F"
-"000000030000000000000520"
-"000000030000000000000521"
-"000000030000000000000522"
-"000000030000000000000523"
-"000000030000000000000524"
-"000000030000000000000525"
-"000000030000000000000526"
-"000000030000000000000527"
-"000000030000000000000528"
-"000000030000000000000529"
-"00000003000000000000052A"
-"00000003000000000000052B"
-"00000003000000000000052C"
-"00000003000000000000052D"
-"00000003000000000000052E"
-"00000003000000000000052F"
-"000000030000000000000530"
-"000000030000000000000531"
-"000000030000000000000532"
-"000000030000000000000533"
-"000000030000000000000534"
-"000000030000000000000535"
-"000000030000000000000536"
-"000000030000000000000537"
-"000000030000000000000538"
-"000000030000000000000539"
-"00000003000000000000053A"
-"00000003000000000000053B"
-"00000003000000000000053C"
-"00000003000000000000053D"
-"00000003000000000000053E"
-"00000003000000000000053F"
-"000000030000000000000540"
-"000000030000000000000541"
-"000000030000000000000542"
-"000000030000000000000543"
-"000000030000000000000544"
-"000000030000000000000545"
-"000000030000000000000546"
-"000000030000000000000547"
-"000000030000000000000548"
-"000000030000000000000549"
-"00000003000000000000054A"
-"00000003000000000000054B"
-"00000003000000000000054C"
-"00000003000000000000054D"
-"00000003000000000000054E"
-"00000003000000000000054F"
-"000000030000000000000550"
-"000000030000000000000551"
-"000000030000000000000552"
-"000000030000000000000553"
-"000000030000000000000554"
-"000000030000000000000555"
-"000000030000000000000556"
-"000000030000000000000557"
-"000000030000000000000558"
-"000000030000000000000559"
-"00000003000000000000055A"
-"00000003000000000000055B"
-"00000003000000000000055C"
-"00000003000000000000055D"
-"00000003000000000000055E"
-"00000003000000000000055F"
-"000000030000000000000560"
-"000000030000000000000561"
-"000000030000000000000562"
-"000000030000000000000563"
-"000000030000000000000564"
-"000000030000000000000565"
-"000000030000000000000566"
-"000000030000000000000567"
-"000000030000000000000568"
-"000000030000000000000569"
-"00000003000000000000056A"
-"00000003000000000000056B"
-"00000003000000000000056C"
-"00000003000000000000056D"
-"00000003000000000000056E"
-"00000003000000000000056F"
-"000000030000000000000570"
-"000000030000000000000571"
-"000000030000000000000572"
-"000000030000000000000573"
-"000000030000000000000574"
-"000000030000000000000575"
-"000000030000000000000576"
-"000000030000000000000577"
-"000000030000000000000578"
-"000000030000000000000579"
-"00000003000000000000057A"
-"00000003000000000000057B"
-"00000003000000000000057C"
-"00000003000000000000057D"
-"00000003000000000000057E"
-"00000003000000000000057F"
-"000000030000000000000580"
-"000000030000000000000581"
-"000000030000000000000582"
-"000000030000000000000583"
-"000000030000000000000584"
-"000000030000000000000585"
-"000000030000000000000586"
-"000000030000000000000587"
-"000000030000000000000588"
-"000000030000000000000589"
-"00000003000000000000058A"
-"00000003000000000000058B"
-"00000003000000000000058C"
-"00000003000000000000058D"
-"00000003000000000000058E"
-"00000003000000000000058F"
-"000000030000000000000590"
-"000000030000000000000591"
-"000000030000000000000592"
-"000000030000000000000593"
-"000000030000000000000594"
-"000000030000000000000595"
-"000000030000000000000596"
-"000000030000000000000597"
-"000000030000000000000598"
-"000000030000000000000599"
-"00000003000000000000059A"
-"00000003000000000000059B"
-"00000003000000000000059C"
-"00000003000000000000059D"
-"00000003000000000000059E"
-"00000003000000000000059F"
-"0000000300000000000005A0"
-"0000000300000000000005A1"
-"0000000300000000000005A2"
-"0000000300000000000005A3"
-"0000000300000000000005A4"
-"0000000300000000000005A5"
-"0000000300000000000005A6"
-"0000000300000000000005A7"
-"0000000300000000000005A8"
-"0000000300000000000005A9"
-"0000000300000000000005AA"
-"0000000300000000000005AB"
-"0000000300000000000005AC"
-"0000000300000000000005AD"
-"0000000300000000000005AE"
-"0000000300000000000005AF"
-"0000000300000000000005B0"
-"0000000300000000000005B1"
-"0000000300000000000005B2"
-"0000000300000000000005B3"
-"0000000300000000000005B4"
-"0000000300000000000005B5"
-"0000000300000000000005B6"
-"0000000300000000000005B7"
-"0000000300000000000005B8"
-"0000000300000000000005B9"
-"0000000300000000000005BA"
-"0000000300000000000005BB"
-"0000000300000000000005BC"
-"0000000300000000000005BD"
-"0000000300000000000005BE"
-"0000000300000000000005BF"
-"0000000300000000000005C0"
-"0000000300000000000005C1"
-"0000000300000000000005C2"
-"0000000300000000000005C3"
-"0000000300000000000005C4"
-"0000000300000000000005C5"
-"0000000300000000000005C6"
-"0000000300000000000005C7"
-"0000000300000000000005C8"
-"0000000300000000000005C9"
-"0000000300000000000005CA"
-"0000000300000000000005CB"
-"0000000300000000000005CC"
-"0000000300000000000005CD"
-"0000000300000000000005CE"
-"0000000300000000000005CF"
-"0000000300000000000005D0"
-"0000000300000000000005D1"
-"0000000300000000000005D2"
-"0000000300000000000005D3"
-"0000000300000000000005D4"
-"0000000300000000000005D5"
-"0000000300000000000005D6"
-"0000000300000000000005D7"
-"0000000300000000000005D8"
-"0000000300000000000005D9"
-"0000000300000000000005DA"
-"0000000300000000000005DB"
-"0000000300000000000005DC"
-"0000000300000000000005DD"
-"0000000300000000000005DE"
-"0000000300000000000005DF"
-"0000000300000000000005E0"
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/external-dataset/common/custom-buffer-size/external_dataset.001.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/external-dataset/common/custom-buffer-size/external_dataset.001.adm
new file mode 100644
index 0000000..187a8cb
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/external-dataset/common/custom-buffer-size/external_dataset.001.adm
@@ -0,0 +1 @@
+{ "count": 100 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/external-dataset/common/custom-buffer-size/external_dataset.002.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/external-dataset/common/custom-buffer-size/external_dataset.002.adm
new file mode 100644
index 0000000..187a8cb
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/external-dataset/common/custom-buffer-size/external_dataset.002.adm
@@ -0,0 +1 @@
+{ "count": 100 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/external-dataset/common/custom-buffer-size/external_dataset.003.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/external-dataset/common/custom-buffer-size/external_dataset.003.adm
new file mode 100644
index 0000000..5db606c
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/external-dataset/common/custom-buffer-size/external_dataset.003.adm
@@ -0,0 +1 @@
+{ "count": 25 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/external-dataset/common/custom-buffer-size/external_dataset.004.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/external-dataset/common/custom-buffer-size/external_dataset.004.adm
new file mode 100644
index 0000000..7660e7e
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/external-dataset/common/custom-buffer-size/external_dataset.004.adm
@@ -0,0 +1,25 @@
+{ "id": 1, "year": null, "quarter": null, "review": "good", "array": [ 1, 2, 3 ] }
+{ "id": 1, "year": null, "quarter": null, "review": "good", "array": [ 1, 2, 3 ] }
+{ "id": 1, "year": null, "quarter": null, "review": "good", "array": [ 1, 2, 3 ] }
+{ "id": 1, "year": null, "quarter": null, "review": "good", "array": [ 1, 2, 3 ] }
+{ "id": 1, "year": null, "quarter": null, "review": "good", "array": [ 1, 2, 3 ] }
+{ "id": 2, "year": null, "quarter": null, "review": "good", "array": [ 1, [ 1, 2 ], [ 1 ] ] }
+{ "id": 2, "year": null, "quarter": null, "review": "good", "array": [ 1, [ 1, 2 ], [ 1 ] ] }
+{ "id": 2, "year": null, "quarter": null, "review": "good", "array": [ 1, [ 1, 2 ], [ 1 ] ] }
+{ "id": 2, "year": null, "quarter": null, "review": "good", "array": [ 1, [ 1, 2 ], [ 1 ] ] }
+{ "id": 2, "year": null, "quarter": null, "review": "good", "array": [ 1, [ 1, 2 ], [ 1 ] ] }
+{ "id": 3, "year": 2018, "quarter": null, "review": "good", "array": [ 1, 2, 3 ] }
+{ "id": 3, "year": 2018, "quarter": null, "review": "good", "array": [ 1, 2, 3 ] }
+{ "id": 3, "year": 2018, "quarter": null, "review": "good", "array": [ 1, 2, 3 ] }
+{ "id": 3, "year": 2018, "quarter": null, "review": "good", "array": [ 1, 2, 3 ] }
+{ "id": 3, "year": 2018, "quarter": null, "review": "good", "array": [ 1, 2, 3 ] }
+{ "id": 4, "year": 2018, "quarter": null, "review": "bad", "array": [ 1, 2, 3 ] }
+{ "id": 4, "year": 2018, "quarter": null, "review": "bad", "array": [ 1, 2, 3 ] }
+{ "id": 4, "year": 2018, "quarter": null, "review": "bad", "array": [ 1, 2, 3 ] }
+{ "id": 4, "year": 2018, "quarter": null, "review": "bad", "array": [ 1, 2, 3 ] }
+{ "id": 4, "year": 2018, "quarter": null, "review": "bad", "array": [ 1, 2, 3 ] }
+{ "id": 5, "year": 2018, "quarter": 1, "review": "good", "array": [ 1, 2, 3 ] }
+{ "id": 5, "year": 2018, "quarter": 1, "review": "good", "array": [ 1, 2, 3 ] }
+{ "id": 5, "year": 2018, "quarter": 1, "review": "good", "array": [ 1, 2, 3 ] }
+{ "id": 5, "year": 2018, "quarter": 1, "review": "good", "array": [ 1, 2, 3 ] }
+{ "id": 5, "year": 2018, "quarter": 1, "review": "good", "array": [ 1, 2, 3 ] }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/external-dataset/common/custom-buffer-size/external_dataset.005.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/external-dataset/common/custom-buffer-size/external_dataset.005.adm
new file mode 100644
index 0000000..5db606c
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/external-dataset/common/custom-buffer-size/external_dataset.005.adm
@@ -0,0 +1 @@
+{ "count": 25 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/external-dataset/common/custom-buffer-size/external_dataset.006.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/external-dataset/common/custom-buffer-size/external_dataset.006.adm
new file mode 100644
index 0000000..7643986
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/external-dataset/common/custom-buffer-size/external_dataset.006.adm
@@ -0,0 +1,25 @@
+{ "id": 1, "year": null, "quarter": null, "review": "good", "array": [ 1, 2, 3 ], "nested": { "id": 1 } }
+{ "id": 1, "year": null, "quarter": null, "review": "good", "array": [ 1, 2, 3 ], "nested": { "id": 1 } }
+{ "id": 1, "year": null, "quarter": null, "review": "good", "array": [ 1, 2, 3 ], "nested": { "id": 1 } }
+{ "id": 1, "year": null, "quarter": null, "review": "good", "array": [ 1, 2, 3 ], "nested": { "id": 1 } }
+{ "id": 1, "year": null, "quarter": null, "review": "good", "array": [ 1, 2, 3 ], "nested": { "id": 1 } }
+{ "id": 2, "year": null, "quarter": null, "review": "good", "array": [ 1, [ 1, 2 ], [ 1 ] ], "nested": { "id": 1 }, "nested2": [ { "id": 1 } ] }
+{ "id": 2, "year": null, "quarter": null, "review": "good", "array": [ 1, [ 1, 2 ], [ 1 ] ], "nested": { "id": 1 }, "nested2": [ { "id": 1 } ] }
+{ "id": 2, "year": null, "quarter": null, "review": "good", "array": [ 1, [ 1, 2 ], [ 1 ] ], "nested": { "id": 1 }, "nested2": [ { "id": 1 } ] }
+{ "id": 2, "year": null, "quarter": null, "review": "good", "array": [ 1, [ 1, 2 ], [ 1 ] ], "nested": { "id": 1 }, "nested2": [ { "id": 1 } ] }
+{ "id": 2, "year": null, "quarter": null, "review": "good", "array": [ 1, [ 1, 2 ], [ 1 ] ], "nested": { "id": 1 }, "nested2": [ { "id": 1 } ] }
+{ "id": 3, "year": 2018, "quarter": null, "review": "good", "array": [ 1, 2, 3, { "nested": { "array": [ { "nested": { "array": [ 1, 2 ] } } ] } } ] }
+{ "id": 3, "year": 2018, "quarter": null, "review": "good", "array": [ 1, 2, 3, { "nested": { "array": [ { "nested": { "array": [ 1, 2 ] } } ] } } ] }
+{ "id": 3, "year": 2018, "quarter": null, "review": "good", "array": [ 1, 2, 3, { "nested": { "array": [ { "nested": { "array": [ 1, 2 ] } } ] } } ] }
+{ "id": 3, "year": 2018, "quarter": null, "review": "good", "array": [ 1, 2, 3, { "nested": { "array": [ { "nested": { "array": [ 1, 2 ] } } ] } } ] }
+{ "id": 3, "year": 2018, "quarter": null, "review": "good", "array": [ 1, 2, 3, { "nested": { "array": [ { "nested": { "array": [ 1, 2 ] } } ] } } ] }
+{ "id": 4, "year": 2018, "quarter": null, "review": "bad", "array": [ 1, 2, 3, { "nested1": { "id": 1, "nested2": { "id": 2, "nested3": [ { "nested4": null } ] } } } ] }
+{ "id": 4, "year": 2018, "quarter": null, "review": "bad", "array": [ 1, 2, 3, { "nested1": { "id": 1, "nested2": { "id": 2, "nested3": [ { "nested4": null } ] } } } ] }
+{ "id": 4, "year": 2018, "quarter": null, "review": "bad", "array": [ 1, 2, 3, { "nested1": { "id": 1, "nested2": { "id": 2, "nested3": [ { "nested4": null } ] } } } ] }
+{ "id": 4, "year": 2018, "quarter": null, "review": "bad", "array": [ 1, 2, 3, { "nested1": { "id": 1, "nested2": { "id": 2, "nested3": [ { "nested4": null } ] } } } ] }
+{ "id": 4, "year": 2018, "quarter": null, "review": "bad", "array": [ 1, 2, 3, { "nested1": { "id": 1, "nested2": { "id": 2, "nested3": [ { "nested4": null } ] } } } ] }
+{ "id": 5, "year": 2018, "quarter": 1, "review": "good", "array": [ 1, 2, 3, { "nested": { "array": [ 1, 2 ] } } ] }
+{ "id": 5, "year": 2018, "quarter": 1, "review": "good", "array": [ 1, 2, 3, { "nested": { "array": [ 1, 2 ] } } ] }
+{ "id": 5, "year": 2018, "quarter": 1, "review": "good", "array": [ 1, 2, 3, { "nested": { "array": [ 1, 2 ] } } ] }
+{ "id": 5, "year": 2018, "quarter": 1, "review": "good", "array": [ 1, 2, 3, { "nested": { "array": [ 1, 2 ] } } ] }
+{ "id": 5, "year": 2018, "quarter": 1, "review": "good", "array": [ 1, 2, 3, { "nested": { "array": [ 1, 2 ] } } ] }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/external-library/py_function_error/py_function_error.3.json b/asterixdb/asterix-app/src/test/resources/runtimets/results/external-library/py_function_error/py_function_error.3.json
new file mode 100644
index 0000000..58de662
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/external-library/py_function_error/py_function_error.3.json
@@ -0,0 +1 @@
+"BAR=BAZ"
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/external-library/py_function_error/py_function_error.4.json b/asterixdb/asterix-app/src/test/resources/runtimets/results/external-library/py_function_error/py_function_error.4.json
new file mode 100644
index 0000000..f73df98
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/external-library/py_function_error/py_function_error.4.json
@@ -0,0 +1 @@
+"BAZ"
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/leftouterjoin/query-ASTERIXDB-2857/query-ASTERIXDB-2857.3.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/leftouterjoin/query-ASTERIXDB-2857/query-ASTERIXDB-2857.3.adm
new file mode 100644
index 0000000..1a31db8
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/leftouterjoin/query-ASTERIXDB-2857/query-ASTERIXDB-2857.3.adm
@@ -0,0 +1,2 @@
+{ "t0_unique1": 1891, "t1_unique1": 1891, "t2_unique1": 1891 }
+{ "t0_unique1": 8800, "t1_unique1": 8800, "t2_unique1": 8800 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/multipart-dataverse/special_chars_2/special_chars_2.2.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/multipart-dataverse/special_chars_2/special_chars_2.2.adm
index 9abda4f..7edd3eb 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/multipart-dataverse/special_chars_2/special_chars_2.2.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/multipart-dataverse/special_chars_2/special_chars_2.2.adm
@@ -1,6 +1,6 @@
 { "CanonicalName": "A", "DisplayName": "A", "NameParts": [ "A" ] }
-{ "CanonicalName": "B.C", "DisplayName": "B.C", "NameParts": [ "B", "C" ] }
-{ "CanonicalName": "C@.D@.E", "DisplayName": "`C.D.E`", "NameParts": [ "C.D.E" ] }
+{ "CanonicalName": "B/C", "DisplayName": "B.C", "NameParts": [ "B", "C" ] }
+{ "CanonicalName": "C.D.E", "DisplayName": "`C.D.E`", "NameParts": [ "C.D.E" ] }
 { "CanonicalName": "Default", "DisplayName": "Default", "NameParts": [ "Default" ] }
 { "CanonicalName": "Metadata", "DisplayName": "Metadata", "NameParts": [ "Metadata" ] }
-{ "CanonicalName": "a-A.b_B.c$C.z@.Z", "DisplayName": "`a-A`.b_B.c$C.`z.Z`", "NameParts": [ "a-A", "b_B", "c$C", "z.Z" ] }
\ No newline at end of file
+{ "CanonicalName": "a-A/b_B/c$C/z.Z", "DisplayName": "`a-A`.b_B.c$C.`z.Z`", "NameParts": [ "a-A", "b_B", "c$C", "z.Z" ] }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/subquery/in_let/in_let.8.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/subquery/in_let/in_let.8.adm
new file mode 100644
index 0000000..f63d51b
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/subquery/in_let/in_let.8.adm
@@ -0,0 +1,2 @@
+{ "cid": "c1", "pid": "p2", "ts": 2000 }
+{ "cid": "c2", "pid": "p2", "ts": 2100 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/synonym/synonym-03/synonym-03.2.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/synonym/synonym-03/synonym-03.2.adm
new file mode 100644
index 0000000..32200e3
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/synonym/synonym-03/synonym-03.2.adm
@@ -0,0 +1,2 @@
+{ "DataverseName": "test2", "SynonymName": "md_syn_1", "ObjectDataverseName": "Metadata", "ObjectName": "Synonym" }
+{ "DataverseName": "test2", "SynonymName": "md_syn_2", "ObjectDataverseName": "test2", "ObjectName": "md_syn_1" }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_it_python.xml b/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_it_python.xml
index 4e1d5b2..35bec85 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_it_python.xml
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_it_python.xml
@@ -57,7 +57,7 @@
     result[0].append(self.next_tuple(*arg, key=self.mid))
   File "entrypoint.py", line 99, in next_tuple
     return self.wrapped_fns[key](*args)
-  File "site-packages/roundtrip.py", line 28, in warning
+  File "site-packages/roundtrip.py", line 29, in warning
     raise ArithmeticError("oof")
 ArithmeticError: oof
  (in line 28, at column 1)</expected-warn>
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml b/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml
index 6492ef9..6e212b1 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml
@@ -4855,7 +4855,7 @@
     <test-case FilePath="dml">
       <compilation-unit name="upsert-dataset-with-meta">
         <output-dir compare="Text">upsert-dataset-with-meta</output-dir>
-        <expected-error>upsert into dataset is not supported on Datasets with Meta records</expected-error>
+        <expected-error>upsert into dataset is not supported on datasets with meta record</expected-error>
       </compilation-unit>
     </test-case>
     <test-case FilePath="dml">
@@ -4881,13 +4881,13 @@
     <test-case FilePath="dml">
       <compilation-unit name="delete-dataset-with-meta">
         <output-dir compare="Text">delete-dataset-with-meta</output-dir>
-        <expected-error>delete from dataset is not supported on Datasets with Meta records</expected-error>
+        <expected-error>delete from dataset is not supported on datasets with meta records</expected-error>
       </compilation-unit>
     </test-case>
     <test-case FilePath="dml">
       <compilation-unit name="insert-dataset-with-meta">
         <output-dir compare="Text">insert-dataset-with-meta</output-dir>
-        <expected-error>insert into dataset is not supported on Datasets with Meta records</expected-error>
+        <expected-error>insert into dataset is not supported on datasets with meta records</expected-error>
       </compilation-unit>
     </test-case>
     <test-case FilePath="dml">
@@ -6697,7 +6697,7 @@
         <output-dir compare="Text">partition-by-nonexistent-field</output-dir>
         <expected-error>Field "id" is not found</expected-error>
         <expected-error>Cannot find dataset with name testds in dataverse test</expected-error>
-        <expected-error>Cannot find dataset testds in dataverse test nor an alias with name testds!</expected-error>
+        <expected-error>Cannot find dataset testds in dataverse test nor an alias with name testds</expected-error>
       </compilation-unit>
     </test-case>
     <test-case FilePath="misc">
@@ -10890,6 +10890,11 @@
         <expected-error>ASX1063: Cannot find dataverse with name UNKNOWN_DATAVERSE</expected-error>
       </compilation-unit>
     </test-case>
+    <test-case FilePath="synonym">
+      <compilation-unit name="synonym-03">
+        <output-dir compare="Text">synonym-03</output-dir>
+      </compilation-unit>
+    </test-case>
   </test-group>
   <test-group name="tokenizers">
     <test-case FilePath="tokenizers">
@@ -12378,26 +12383,26 @@
     <test-case FilePath="user-defined-functions">
       <compilation-unit name="bad-function-ddl-1">
         <output-dir compare="Text">bad-function-ddl-1</output-dir>
-        <expected-error>Cannot find dataset TweetMessages in dataverse experiments nor an alias with name TweetMessages!</expected-error>
-        <expected-error>Cannot find dataset TweetMessages2 in dataverse experiments2 nor an alias with name TweetMessages2!</expected-error>
+        <expected-error>Cannot find dataset TweetMessages in dataverse experiments nor an alias with name TweetMessages</expected-error>
+        <expected-error>Cannot find dataset TweetMessages2 in dataverse experiments2 nor an alias with name TweetMessages2</expected-error>
       </compilation-unit>
     </test-case>
     <test-case FilePath="user-defined-functions">
       <compilation-unit name="bad-function-ddl-2">
         <output-dir compare="Text">bad-function-ddl-2</output-dir>
-        <expected-error>Cannot find dataset TweetMessages in dataverse experiments2 nor an alias with name TweetMessages!</expected-error>
+        <expected-error>Cannot find dataset TweetMessages in dataverse experiments2 nor an alias with name TweetMessages</expected-error>
       </compilation-unit>
     </test-case>
     <test-case FilePath="user-defined-functions">
       <compilation-unit name="bad-function-ddl-3">
         <output-dir compare="Text">bad-function-ddl-3</output-dir>
-        <expected-error>Cannot find dataset TweetMessages in dataverse experiments nor an alias with name TweetMessages!</expected-error>
+        <expected-error>Cannot find dataset TweetMessages in dataverse experiments nor an alias with name TweetMessages</expected-error>
       </compilation-unit>
     </test-case>
     <test-case FilePath="user-defined-functions">
       <compilation-unit name="bad-function-ddl-4">
         <output-dir compare="Text">bad-function-ddl-4</output-dir>
-        <expected-error>Cannot find dataset TweetMessages in dataverse experients nor an alias with name TweetMessages!</expected-error>
+        <expected-error>Cannot find dataset TweetMessages in dataverse experients nor an alias with name TweetMessages</expected-error>
       </compilation-unit>
     </test-case>
     <test-case FilePath="user-defined-functions">
@@ -12416,13 +12421,13 @@
     <test-case FilePath="user-defined-functions">
       <compilation-unit name="bad-function-ddl-7">
         <output-dir compare="Text">bad-function-ddl-7</output-dir>
-        <expected-error>Cannot find dataset TweetMessaes in dataverse experiments nor an alias with name TweetMessaes!</expected-error>
+        <expected-error>Cannot find dataset TweetMessaes in dataverse experiments nor an alias with name TweetMessaes</expected-error>
       </compilation-unit>
     </test-case>
     <test-case FilePath="user-defined-functions">
       <compilation-unit name="bad-function-ddl-8">
         <output-dir compare="Text">bad-function-ddl-8</output-dir>
-        <expected-error>Cannot find dataset TweetMessaes in dataverse experiments nor an alias with name TweetMessaes!</expected-error>
+        <expected-error>Cannot find dataset TweetMessaes in dataverse experiments nor an alias with name TweetMessaes</expected-error>
       </compilation-unit>
     </test-case>
     <test-case FilePath="user-defined-functions">
@@ -12910,7 +12915,7 @@
     <test-case FilePath="load">
       <compilation-unit name="dataset-with-meta">
         <output-dir compare="Text">dataset-with-meta</output-dir>
-        <expected-error>ASX1079: Compilation error: DatasetWithMeta: load dataset is not supported on Datasets with Meta records (in line 27, at column 1)</expected-error>
+        <expected-error>ASX1079: Compilation error: DatasetWithMeta: load dataset is not supported on datasets with meta records (in line 27, at column 1)</expected-error>
       </compilation-unit>
     </test-case>
     <test-case FilePath="load">
@@ -13278,7 +13283,7 @@
     <test-case FilePath="meta">
       <compilation-unit name="query_dataset_with_meta_failure">
         <output-dir compare="Text">query_dataset_with_meta_failure</output-dir>
-        <expected-error>ASX1079: Compilation error: Cannot resolve ambiguous meta function call. There are more than one dataset choice! (in line 24, at column 7)</expected-error>
+        <expected-error>ASX1079: Compilation error: Cannot resolve ambiguous meta function call. There are more than one dataset choice (in line 24, at column 7)</expected-error>
       </compilation-unit>
     </test-case>
   </test-group>
@@ -13393,6 +13398,11 @@
       </compilation-unit>
     </test-case>
     <test-case FilePath="leftouterjoin">
+      <compilation-unit name="query-ASTERIXDB-2857">
+        <output-dir compare="Text">query-ASTERIXDB-2857</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="leftouterjoin">
       <compilation-unit name="right_branch_opt_1">
         <output-dir compare="Text">right_branch_opt_1</output-dir>
       </compilation-unit>
@@ -14091,11 +14101,6 @@
         <output-dir compare="Text">length</output-dir>
       </compilation-unit>
     </test-case>
-    <test-case FilePath="binary">
-      <compilation-unit name="query_id">
-        <output-dir compare="Text">query_id</output-dir>
-      </compilation-unit>
-    </test-case>
   </test-group>
   <test-group name="unnest">
     <test-case FilePath="unnest">
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/binary/query_id/query_id.3.query.sqlpp b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/api/IIdentifierMapper.java
similarity index 84%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/binary/query_id/query_id.3.query.sqlpp
copy to asterixdb/asterix-common/src/main/java/org/apache/asterix/common/api/IIdentifierMapper.java
index 056d96e..8687239 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/binary/query_id/query_id.3.query.sqlpp
+++ b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/api/IIdentifierMapper.java
@@ -17,8 +17,11 @@
  * under the License.
  */
 
-use tpch;
+package org.apache.asterix.common.api;
 
-select distinct value print_binary(id, "hex") from LineItem
-let id = create_query_uid()
-order by id;
\ No newline at end of file
+@FunctionalInterface
+public interface IIdentifierMapper {
+
+    String map(String identifier);
+
+}
diff --git a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/config/CompilerProperties.java b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/config/CompilerProperties.java
index 8064c05..5538a0a 100644
--- a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/config/CompilerProperties.java
+++ b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/config/CompilerProperties.java
@@ -55,6 +55,10 @@
                 LONG_BYTE_UNIT,
                 StorageUtil.getLongSizeInBytes(32L, MEGABYTE),
                 "The memory budget (in bytes) for an inverted-index-search operator instance in a partition"),
+        COMPILER_EXTERNALSCANMEMORY(
+                INTEGER_BYTE_UNIT,
+                StorageUtil.getIntSizeInBytes(8, KILOBYTE),
+                "The memory budget (in bytes) for an external scan operator instance in a partition"),
         COMPILER_FRAMESIZE(
                 INTEGER_BYTE_UNIT,
                 StorageUtil.getIntSizeInBytes(32, KILOBYTE),
@@ -83,7 +87,7 @@
         COMPILER_EXTERNAL_FIELD_PUSHDOWN(
                 BOOLEAN,
                 AlgebricksConfig.EXTERNAL_FIELD_PUSHDOWN_DEFAULT,
-                "Enable pushdown of field accesses to the external dataset data-scan operator"),
+                "Enable pushdown of field accesses to the external data-scan operator"),
         COMPILER_SUBPLAN_MERGE(
                 BOOLEAN,
                 AlgebricksConfig.SUBPLAN_MERGE_DEFAULT,
@@ -130,6 +134,11 @@
         public Object defaultValue() {
             return defaultValue;
         }
+
+        @Override
+        public boolean hidden() {
+            return this == COMPILER_EXTERNALSCANMEMORY;
+        }
     }
 
     public static final String COMPILER_SORTMEMORY_KEY = Option.COMPILER_SORTMEMORY.ini();
@@ -162,6 +171,8 @@
 
     public static final String COMPILER_ARRAYINDEX_KEY = Option.COMPILER_ARRAYINDEX.ini();
 
+    public static final String COMPILER_EXTERNALSCANMEMORY_KEY = Option.COMPILER_EXTERNALSCANMEMORY.ini();
+
     public static final int COMPILER_PARALLELISM_AS_STORAGE = 0;
 
     public CompilerProperties(PropertiesAccessor accessor) {
@@ -231,4 +242,8 @@
     public boolean isArrayIndex() {
         return accessor.getBoolean(Option.COMPILER_ARRAYINDEX);
     }
+
+    public int getExternalScanMemorySize() {
+        return accessor.getInt(Option.COMPILER_EXTERNALSCANMEMORY);
+    }
 }
diff --git a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/config/ExternalProperties.java b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/config/ExternalProperties.java
index 9bef65d..46258bf 100644
--- a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/config/ExternalProperties.java
+++ b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/config/ExternalProperties.java
@@ -50,7 +50,8 @@
                 POSITIVE_INTEGER_BYTE_UNIT,
                 StorageUtil.getIntSizeInBytes(200, StorageUtil.StorageUnit.MEGABYTE),
                 "The maximum accepted web request size in bytes"),
-        REQUESTS_ARCHIVE_SIZE(NONNEGATIVE_INTEGER, 50, "The maximum number of archived requests to maintain");
+        REQUESTS_ARCHIVE_SIZE(NONNEGATIVE_INTEGER, 50, "The maximum number of archived requests to maintain"),
+        LIBRARY_DEPLOY_TIMEOUT(POSITIVE_INTEGER, 1800, "Timeout to upload a UDF in seconds");
 
         private final IOptionType type;
         private final Object defaultValue;
@@ -76,6 +77,7 @@
                 case LOG_LEVEL:
                 case MAX_WAIT_ACTIVE_CLUSTER:
                 case MAX_WEB_REQUEST_SIZE:
+                case LIBRARY_DEPLOY_TIMEOUT:
                     return Section.COMMON;
                 case CC_JAVA_OPTS:
                 case NC_JAVA_OPTS:
@@ -149,4 +151,8 @@
         return accessor.getInt(Option.REQUESTS_ARCHIVE_SIZE);
     }
 
+    public int getLibraryDeployTimeout() {
+        return accessor.getInt(Option.LIBRARY_DEPLOY_TIMEOUT);
+    }
+
 }
diff --git a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/config/OptimizationConfUtil.java b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/config/OptimizationConfUtil.java
index 81974fa..d498d69 100644
--- a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/config/OptimizationConfUtil.java
+++ b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/config/OptimizationConfUtil.java
@@ -74,6 +74,9 @@
                 CompilerProperties.COMPILER_MIN_MEMORY_ALLOCATION_KEY, compilerProperties.getMinMemoryAllocation());
         boolean arrayIndex = getBoolean(querySpecificConfig, CompilerProperties.COMPILER_ARRAYINDEX_KEY,
                 compilerProperties.isArrayIndex());
+        int externalScanBufferSize = getExternalScanBufferSize(
+                (String) querySpecificConfig.get(CompilerProperties.COMPILER_EXTERNALSCANMEMORY_KEY),
+                compilerProperties.getExternalScanMemorySize(), sourceLoc);
 
         PhysicalOptimizationConfig physOptConf = new PhysicalOptimizationConfig();
         physOptConf.setFrameSize(frameSize);
@@ -91,9 +94,21 @@
         physOptConf.setSubplanNestedPushdown(subplanNestedPushdown);
         physOptConf.setMinMemoryAllocation(minMemoryAllocation);
         physOptConf.setArrayIndexEnabled(arrayIndex);
+        physOptConf.setExternalScanBufferSize(externalScanBufferSize);
         return physOptConf;
     }
 
+    private static int getExternalScanBufferSize(String externalScanMemorySizeParameter,
+            int compilerExternalScanMemorySize, SourceLocation sourceLoc) throws AsterixException {
+        IOptionType<Integer> intByteParser = OptionTypes.INTEGER_BYTE_UNIT;
+        try {
+            return externalScanMemorySizeParameter != null ? intByteParser.parse(externalScanMemorySizeParameter)
+                    : compilerExternalScanMemorySize;
+        } catch (IllegalArgumentException e) {
+            throw AsterixException.create(ErrorCode.COMPILATION_ERROR, sourceLoc, e.getMessage());
+        }
+    }
+
     public static int getSortNumFrames(CompilerProperties compilerProperties, Map<String, Object> querySpecificConfig,
             SourceLocation sourceLoc) throws AlgebricksException {
         return getFrameLimit(CompilerProperties.COMPILER_SORTMEMORY_KEY,
diff --git a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/config/StorageProperties.java b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/config/StorageProperties.java
index fc33b1a..12c9c68 100644
--- a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/config/StorageProperties.java
+++ b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/config/StorageProperties.java
@@ -18,8 +18,8 @@
  */
 package org.apache.asterix.common.config;
 
+import static org.apache.hyracks.control.common.config.OptionTypes.BOOLEAN;
 import static org.apache.hyracks.control.common.config.OptionTypes.DOUBLE;
-import static org.apache.hyracks.control.common.config.OptionTypes.INTEGER;
 import static org.apache.hyracks.control.common.config.OptionTypes.INTEGER_BYTE_UNIT;
 import static org.apache.hyracks.control.common.config.OptionTypes.LONG_BYTE_UNIT;
 import static org.apache.hyracks.control.common.config.OptionTypes.NONNEGATIVE_INTEGER;
@@ -28,6 +28,7 @@
 import static org.apache.hyracks.util.StorageUtil.StorageUnit.KILOBYTE;
 import static org.apache.hyracks.util.StorageUtil.StorageUnit.MEGABYTE;
 
+import java.util.concurrent.TimeUnit;
 import java.util.function.Function;
 
 import org.apache.asterix.common.metadata.MetadataIndexImmutableProperties;
@@ -49,16 +50,18 @@
         STORAGE_MEMORYCOMPONENT_PAGESIZE(INTEGER_BYTE_UNIT, StorageUtil.getIntSizeInBytes(128, KILOBYTE)),
         STORAGE_MEMORYCOMPONENT_NUMCOMPONENTS(POSITIVE_INTEGER, 2),
         STORAGE_MEMORYCOMPONENT_FLUSH_THRESHOLD(DOUBLE, 0.9d),
-        STORAGE_MEMORYCOMPONENT_MAX_CONCURRENT_FLUSHES(INTEGER, 0),
+        STORAGE_MEMORYCOMPONENT_MAX_SCHEDULED_FLUSHES(NONNEGATIVE_INTEGER, 0),
         STORAGE_FILTERED_MEMORYCOMPONENT_MAX_SIZE(LONG_BYTE_UNIT, 0L),
         STORAGE_LSM_BLOOMFILTER_FALSEPOSITIVERATE(DOUBLE, 0.01d),
         STORAGE_COMPRESSION_BLOCK(STRING, "snappy"),
         STORAGE_DISK_FORCE_BYTES(LONG_BYTE_UNIT, StorageUtil.getLongSizeInBytes(16, MEGABYTE)),
         STORAGE_IO_SCHEDULER(STRING, "greedy"),
         STORAGE_WRITE_RATE_LIMIT(LONG_BYTE_UNIT, 0l),
-        STORAGE_MAX_RUNNING_FLUSHES_PER_PARTITION(NONNEGATIVE_INTEGER, 2),
+        STORAGE_MAX_CONCURRENT_FLUSHES_PER_PARTITION(NONNEGATIVE_INTEGER, 2),
         STORAGE_MAX_SCHEDULED_MERGES_PER_PARTITION(NONNEGATIVE_INTEGER, 8),
-        STORAGE_MAX_RUNNING_MERGES_PER_PARTITION(NONNEGATIVE_INTEGER, 2);
+        STORAGE_MAX_CONCURRENT_MERGES_PER_PARTITION(NONNEGATIVE_INTEGER, 2),
+        STORAGE_GLOBAL_CLEANUP(BOOLEAN, true),
+        STORAGE_GLOBAL_CLEANUP_TIMEOUT(POSITIVE_INTEGER, (int) TimeUnit.MINUTES.toSeconds(10));
 
         private final IOptionType interpreter;
         private final Object defaultValue;
@@ -73,6 +76,8 @@
             switch (this) {
                 case STORAGE_COMPRESSION_BLOCK:
                 case STORAGE_LSM_BLOOMFILTER_FALSEPOSITIVERATE:
+                case STORAGE_GLOBAL_CLEANUP:
+                case STORAGE_GLOBAL_CLEANUP_TIMEOUT:
                     return Section.COMMON;
                 default:
                     return Section.NC;
@@ -96,8 +101,8 @@
                     return "The page size in bytes for pages allocated to memory components";
                 case STORAGE_MEMORYCOMPONENT_NUMCOMPONENTS:
                     return "The number of memory components to be used per lsm index";
-                case STORAGE_MEMORYCOMPONENT_MAX_CONCURRENT_FLUSHES:
-                    return "The maximum number of concurrent flush operations. 0 means that the value will be "
+                case STORAGE_MEMORYCOMPONENT_MAX_SCHEDULED_FLUSHES:
+                    return "The maximum number of scheduled flush operations. 0 means that the value will be "
                             + "calculated as the number of partitions";
                 case STORAGE_MEMORYCOMPONENT_FLUSH_THRESHOLD:
                     return "The memory usage threshold when memory components should be flushed";
@@ -114,12 +119,16 @@
                     return "The number of bytes before each disk force (fsync)";
                 case STORAGE_IO_SCHEDULER:
                     return "The I/O scheduler for LSM flush and merge operations";
-                case STORAGE_MAX_RUNNING_FLUSHES_PER_PARTITION:
-                    return "The maximum number of running flushes per partition (0 means unlimited)";
+                case STORAGE_MAX_CONCURRENT_FLUSHES_PER_PARTITION:
+                    return "The maximum number of concurrently executed flushes per partition (0 means unlimited)";
                 case STORAGE_MAX_SCHEDULED_MERGES_PER_PARTITION:
                     return "The maximum number of scheduled merges per partition (0 means unlimited)";
-                case STORAGE_MAX_RUNNING_MERGES_PER_PARTITION:
-                    return "The maximum number of running merges per partition (0 means unlimited)";
+                case STORAGE_MAX_CONCURRENT_MERGES_PER_PARTITION:
+                    return "The maximum number of concurrently executed merges per partition (0 means unlimited)";
+                case STORAGE_GLOBAL_CLEANUP:
+                    return "Indicates whether or not global storage cleanup is performed";
+                case STORAGE_GLOBAL_CLEANUP_TIMEOUT:
+                    return "The maximum time to wait for nodes to respond to global storage cleanup requests";
                 default:
                     throw new IllegalStateException("NYI: " + this);
             }
@@ -139,6 +148,11 @@
         public String usageDefaultOverride(IApplicationConfig accessor, Function<IOption, String> optionPrinter) {
             return null;
         }
+
+        @Override
+        public boolean hidden() {
+            return this == STORAGE_GLOBAL_CLEANUP;
+        }
     }
 
     public static final long MAX_HEAP_BYTES = Runtime.getRuntime().maxMemory();
@@ -189,8 +203,8 @@
         return (int) (getBufferCacheSize() / (getBufferCachePageSize() + IBufferCache.RESERVED_HEADER_BYTES));
     }
 
-    public int getMaxConcurrentFlushes() {
-        return accessor.getInt(Option.STORAGE_MEMORYCOMPONENT_MAX_CONCURRENT_FLUSHES);
+    public int getMaxScheduledFlushes() {
+        return accessor.getInt(Option.STORAGE_MEMORYCOMPONENT_MAX_SCHEDULED_FLUSHES);
     }
 
     public long getJobExecutionMemoryBudget() {
@@ -213,8 +227,8 @@
         return accessor.getString(Option.STORAGE_IO_SCHEDULER);
     }
 
-    public int getMaxRunningFlushes(int numPartitions) {
-        int value = accessor.getInt(Option.STORAGE_MAX_RUNNING_FLUSHES_PER_PARTITION);
+    public int geMaxConcurrentFlushes(int numPartitions) {
+        int value = accessor.getInt(Option.STORAGE_MAX_CONCURRENT_FLUSHES_PER_PARTITION);
         return value != 0 ? value * numPartitions : Integer.MAX_VALUE;
     }
 
@@ -223,11 +237,19 @@
         return value != 0 ? value * numPartitions : Integer.MAX_VALUE;
     }
 
-    public int getMaxRunningMerges(int numPartitions) {
-        int value = accessor.getInt(Option.STORAGE_MAX_RUNNING_MERGES_PER_PARTITION);
+    public int getMaxConcurrentMerges(int numPartitions) {
+        int value = accessor.getInt(Option.STORAGE_MAX_CONCURRENT_MERGES_PER_PARTITION);
         return value != 0 ? value * numPartitions : Integer.MAX_VALUE;
     }
 
+    public boolean isStorageGlobalCleanup() {
+        return accessor.getBoolean(Option.STORAGE_GLOBAL_CLEANUP);
+    }
+
+    public int getStorageGlobalCleanupTimeout() {
+        return accessor.getInt(Option.STORAGE_GLOBAL_CLEANUP_TIMEOUT);
+    }
+
     protected int getMetadataDatasets() {
         return MetadataIndexImmutableProperties.METADATA_DATASETS_COUNT;
     }
diff --git a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/config/TransactionProperties.java b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/config/TransactionProperties.java
index 050a493..d67e9a6 100644
--- a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/config/TransactionProperties.java
+++ b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/config/TransactionProperties.java
@@ -18,6 +18,7 @@
  */
 package org.apache.asterix.common.config;
 
+import static org.apache.asterix.common.utils.IdentifierUtil.dataset;
 import static org.apache.hyracks.control.common.config.OptionTypes.BOOLEAN;
 import static org.apache.hyracks.control.common.config.OptionTypes.INTEGER_BYTE_UNIT;
 import static org.apache.hyracks.control.common.config.OptionTypes.LONG_BYTE_UNIT;
@@ -41,7 +42,7 @@
         TXN_DATASET_CHECKPOINT_INTERVAL(
                 POSITIVE_INTEGER,
                 (int) TimeUnit.MINUTES.toSeconds(60),
-                "The interval (in seconds) after which a dataset is considered idle and persisted to disk"),
+                "The interval (in seconds) after which a " + dataset() + " is considered idle and persisted to disk"),
         TXN_LOG_BUFFER_NUMPAGES(POSITIVE_INTEGER, 8, "The number of pages in the transaction log tail"),
         TXN_LOG_BUFFER_PAGESIZE(
                 INTEGER_BYTE_UNIT,
@@ -65,7 +66,7 @@
         TXN_LOCK_ESCALATIONTHRESHOLD(
                 NONNEGATIVE_INTEGER,
                 1000,
-                "The maximum number of entity locks to obtain before upgrading to a dataset lock"),
+                "The maximum number of entity locks to obtain before upgrading to a " + dataset() + " lock"),
         TXN_LOCK_SHRINKTIMER(
                 POSITIVE_INTEGER,
                 5000,
diff --git a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/exceptions/WarningUtil.java b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/exceptions/WarningUtil.java
index 9dffa94..7b5e4a0 100644
--- a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/exceptions/WarningUtil.java
+++ b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/exceptions/WarningUtil.java
@@ -28,7 +28,9 @@
     private WarningUtil() {
     }
 
-    /** Merges the warnings from the collection argument into the warning collector argument. */
+    /**
+     * Merges the warnings from the collection argument into the warning collector argument.
+     */
     public static void mergeWarnings(Collection<Warning> warnings, IWarningCollector warningsCollector) {
         for (Warning warning : warnings) {
             if (warningsCollector.shouldWarn()) {
diff --git a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/metadata/DataverseName.java b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/metadata/DataverseName.java
index b8124a2..f943dea 100644
--- a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/metadata/DataverseName.java
+++ b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/metadata/DataverseName.java
@@ -36,11 +36,10 @@
  * <p>
  * Each dataverse name can be encoded into a single string (called a canonical form) by
  * {@link #getCanonicalForm()} and decoded back from it with {@link #createFromCanonicalForm(String)}.
- * The canonical form encoding concatenates name parts together with {@link #CANONICAL_FORM_SEPARATOR_CHAR '.'}
- * character. The {@link #CANONICAL_FORM_ESCAPE_CHAR '@'} character is used to escape
- * {@link #CANONICAL_FORM_SEPARATOR_CHAR '.'} and itself in each name part prior to concatenation.
+ * The canonical form encoding concatenates name parts together with {@link #CANONICAL_FORM_SEPARATOR_CHAR '/'}
+ * character.
  * <p>
- * E.g. the canonical form for a dataverse name {@code ["a", "b", "c"]} is {@code "a.b.c"}
+ * E.g. the canonical form for a dataverse name {@code ["a", "b", "c"]} is {@code "a/b/c"}
  * <p>
  * {@link #toString()} returns a display form which is suitable for error messages,
  * and is a valid SQL++ multi-part identifier parsable by {@code IParser#parseMultipartIdentifier()}
@@ -59,11 +58,9 @@
  */
 public final class DataverseName implements Serializable, Comparable<DataverseName> {
 
-    private static final long serialVersionUID = 1L;
+    private static final long serialVersionUID = 2L;
 
-    public static final char CANONICAL_FORM_SEPARATOR_CHAR = '.';
-
-    private static final char CANONICAL_FORM_ESCAPE_CHAR = '@';
+    public static final char CANONICAL_FORM_SEPARATOR_CHAR = '/';
 
     public static final char DISPLAY_FORM_SEPARATOR_CHAR = '.';
 
@@ -72,7 +69,7 @@
     private static final char DISPLAY_FORM_ESCAPE_CHAR = '\\';
 
     private static final char[] CANONICAL_FORM_SEPARATOR_AND_ESCAPE_CHARS =
-            new char[] { CANONICAL_FORM_SEPARATOR_CHAR, CANONICAL_FORM_ESCAPE_CHAR };
+            new char[] { CANONICAL_FORM_SEPARATOR_CHAR };
 
     private final boolean isMultiPart;
 
@@ -282,13 +279,7 @@
     }
 
     private static void encodePartIntoCanonicalForm(String part, StringBuilder out) {
-        for (int i = 0, ln = part.length(); i < ln; i++) {
-            char c = part.charAt(i);
-            if (c == CANONICAL_FORM_SEPARATOR_CHAR || c == CANONICAL_FORM_ESCAPE_CHAR) {
-                out.append(CANONICAL_FORM_ESCAPE_CHAR);
-            }
-            out.append(c);
-        }
+        out.append(part);
     }
 
     private static <T> void decodeCanonicalForm(String canonicalForm, BiConsumer<CharSequence, T> partConsumer,
@@ -297,18 +288,11 @@
         StringBuilder sb = new StringBuilder(ln);
         for (int i = 0; i < ln; i++) {
             char c = canonicalForm.charAt(i);
-            switch (c) {
-                case CANONICAL_FORM_SEPARATOR_CHAR:
-                    partConsumer.accept(sb, partConsumerArg);
-                    sb.setLength(0);
-                    break;
-                case CANONICAL_FORM_ESCAPE_CHAR:
-                    i++;
-                    c = canonicalForm.charAt(i);
-                    // fall through to 'default'
-                default:
-                    sb.append(c);
-                    break;
+            if (c == CANONICAL_FORM_SEPARATOR_CHAR) {
+                partConsumer.accept(sb, partConsumerArg);
+                sb.setLength(0);
+            } else {
+                sb.append(c);
             }
         }
         if (sb.length() > 0) {
@@ -318,41 +302,11 @@
 
     // optimization for a single part name
     private static String decodeSinglePartNameFromCanonicalForm(String canonicalForm) {
-        if (canonicalForm.indexOf(CANONICAL_FORM_ESCAPE_CHAR) < 0) {
-            // no escaping was done
-            return canonicalForm;
-        }
-
-        StringBuilder singlePart = new StringBuilder(canonicalForm.length());
-        for (int i = 0, ln = canonicalForm.length(); i < ln; i++) {
-            char c = canonicalForm.charAt(i);
-            switch (c) {
-                case CANONICAL_FORM_SEPARATOR_CHAR:
-                    throw new IllegalStateException(canonicalForm); // should never happen
-                case CANONICAL_FORM_ESCAPE_CHAR:
-                    i++;
-                    c = canonicalForm.charAt(i);
-                    // fall through to 'default'
-                default:
-                    singlePart.append(c);
-                    break;
-            }
-        }
-        return singlePart.toString();
+        return canonicalForm;
     }
 
     private static boolean isMultiPartCanonicalForm(String canonicalForm) {
-        for (int i = 0, ln = canonicalForm.length(); i < ln; i++) {
-            char c = canonicalForm.charAt(i);
-            switch (c) {
-                case CANONICAL_FORM_SEPARATOR_CHAR:
-                    return true;
-                case CANONICAL_FORM_ESCAPE_CHAR:
-                    i++;
-                    break;
-            }
-        }
-        return false;
+        return canonicalForm.indexOf(CANONICAL_FORM_SEPARATOR_CHAR) != -1;
     }
 
     private static void addPartToCollection(CharSequence part, Collection<? super String> out) {
diff --git a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/utils/IdentifierMappingUtil.java b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/utils/IdentifierMappingUtil.java
new file mode 100644
index 0000000..c52f27a
--- /dev/null
+++ b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/utils/IdentifierMappingUtil.java
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.
+ */
+
+package org.apache.asterix.common.utils;
+
+import org.apache.asterix.common.api.IIdentifierMapper;
+
+public class IdentifierMappingUtil {
+
+    private static final IIdentifierMapper DEFAULT_MAPPER = identifier -> identifier;
+
+    private static IIdentifierMapper mapper = DEFAULT_MAPPER;
+
+    private IdentifierMappingUtil() {
+    }
+
+    public static void setMapper(IIdentifierMapper mapper) {
+        IdentifierMappingUtil.mapper = mapper;
+    }
+
+    public static String map(String key) {
+        return mapper.map(key);
+    }
+
+}
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/binary/query_id/query_id.2.update.sqlpp b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/utils/IdentifierUtil.java
similarity index 67%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/binary/query_id/query_id.2.update.sqlpp
copy to asterixdb/asterix-common/src/main/java/org/apache/asterix/common/utils/IdentifierUtil.java
index 5812379..ebdd740 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/binary/query_id/query_id.2.update.sqlpp
+++ b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/utils/IdentifierUtil.java
@@ -17,8 +17,18 @@
  * under the License.
  */
 
-use tpch;
+package org.apache.asterix.common.utils;
 
-load dataset LineItem
-using localfs
-(("path"="asterix_nc1://data/tpch0.001/lineitem.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+public class IdentifierUtil {
+
+    public static final String DATASET = "dataset";
+    public static final String DATAVERSE = "dataverse";
+
+    public static String dataset() {
+        return IdentifierMappingUtil.map(DATASET);
+    }
+
+    public static String dataverse() {
+        return IdentifierMappingUtil.map(DATAVERSE);
+    }
+}
diff --git a/asterixdb/asterix-common/src/main/resources/asx_errormsg/en.properties b/asterixdb/asterix-common/src/main/resources/asx_errormsg/en.properties
index de21959..7dc2c56 100644
--- a/asterixdb/asterix-common/src/main/resources/asx_errormsg/en.properties
+++ b/asterixdb/asterix-common/src/main/resources/asx_errormsg/en.properties
@@ -163,8 +163,8 @@
 1073 = Cannot resolve alias reference for undefined identifier %1$s
 1074 = Cannot resolve ambiguous alias reference for identifier %1$s
 1075 = Inside limit clauses, it is disallowed to reference a variable having the same name as any variable bound in the same scope as the limit clause.
-1076 = Cannot find dataset %1$s because there is no dataverse declared, nor an alias with name %1$s!
-1077 = Cannot find dataset %1$s in dataverse %2$s nor an alias with name %1$s!
+1076 = Cannot find dataset %1$s because there is no dataverse declared, nor an alias with name %1$s
+1077 = Cannot find dataset %1$s in dataverse %2$s nor an alias with name %1$s
 1078 = Unexpected operator %1$s in an OperatorExpr starting with %2$s
 1079 = Compilation error: %1$s
 1080 = Cannot find node group with name %1$s
diff --git a/asterixdb/asterix-common/src/test/java/org/apache/asterix/common/metadata/DataverseNameTest.java b/asterixdb/asterix-common/src/test/java/org/apache/asterix/common/metadata/DataverseNameTest.java
index 2f0dff5..75b3989 100644
--- a/asterixdb/asterix-common/src/test/java/org/apache/asterix/common/metadata/DataverseNameTest.java
+++ b/asterixdb/asterix-common/src/test/java/org/apache/asterix/common/metadata/DataverseNameTest.java
@@ -51,9 +51,7 @@
 
     private static final List<String> TEST_BUILTIN_DATAVERSE_INVALID_NAME_PARAMS = Arrays.asList(
             // separator character is not allowed
-            "a.b",
-            // escape character is not allowed
-            "c@d");
+            "a/b");
 
     private static final List<Triple<String, String, String>> TEST_SINGLE_PART_NAME_PARAMS = Arrays.asList(
             // <1-part-name, canonical-form, display-form>
@@ -63,30 +61,30 @@
             // letters and digits
             new Triple<>("aA09", "aA09", "aA09"),
             // with canonical form escape character
-            new Triple<>("a@b", "a@@b", "`a@b`"),
+            new Triple<>("a@b", "a@b", "`a@b`"),
             // with canonical form separator character
-            new Triple<>("a.b", "a@.b", "`a.b`"),
+            new Triple<>("a.b", "a.b", "`a.b`"),
             // with canonical form escape and separator characters
-            new Triple<>("a@.b", "a@@@.b", "`a@.b`"),
+            new Triple<>("a@.b", "a@.b", "`a@.b`"),
             // with display form escape character
             new Triple<>("a\\b", "a\\b", "`a\\\\b`"));
 
     private static final List<Triple<List<String>, String, String>> TEST_MULTI_PART_NAME_PARAMS = Arrays.asList(
             // <multi-part-name, canonical-form, display-form>
-            new Triple<>(Arrays.asList("aa", "bb", "cc"), "aa.bb.cc", "aa.bb.cc"),
+            new Triple<>(Arrays.asList("aa", "bb", "cc"), "aa/bb/cc", "aa.bb.cc"),
             // mixed case letters, digits
-            new Triple<>(Arrays.asList("az", "AZ", "a09Z"), "az.AZ.a09Z", "az.AZ.a09Z"),
+            new Triple<>(Arrays.asList("az", "AZ", "a09Z"), "az/AZ/a09Z", "az.AZ.a09Z"),
             // with canonical form escape character
-            new Triple<>(Arrays.asList("a@a@", "@b@b", "@c@c"), "a@@a@@.@@b@@b.@@c@@c", "`a@a@`.`@b@b`.`@c@c`"),
+            new Triple<>(Arrays.asList("a@a@", "@b@b", "@c@c"), "a@a@/@b@b/@c@c", "`a@a@`.`@b@b`.`@c@c`"),
             // with canonical form separator character
-            new Triple<>(Arrays.asList("a.a.", ".b.b.", ".c.c"), "a@.a@..@.b@.b@..@.c@.c", "`a.a.`.`.b.b.`.`.c.c`"),
+            new Triple<>(Arrays.asList("a.a.", ".b.b.", ".c.c"), "a.a./.b.b./.c.c", "`a.a.`.`.b.b.`.`.c.c`"),
             // with canonical form escape and separator characters
-            new Triple<>(Arrays.asList("a@a.", "@b.b@", ".c@c"), "a@@a@..@@b@.b@@.@.c@@c", "`a@a.`.`@b.b@`.`.c@c`"),
+            new Triple<>(Arrays.asList("a@a.", "@b.b@", ".c@c"), "a@a./@b.b@/.c@c", "`a@a.`.`@b.b@`.`.c@c`"),
             // with canonical form escape and separator characters repeated
-            new Triple<>(Arrays.asList("a@@a..", "@@b..b@@", "..c@@c"), "a@@@@a@.@..@@@@b@.@.b@@@@.@.@.c@@@@c",
+            new Triple<>(Arrays.asList("a@@a..", "@@b..b@@", "..c@@c"), "a@@a../@@b..b@@/..c@@c",
                     "`a@@a..`.`@@b..b@@`.`..c@@c`"),
             // with display form escape character
-            new Triple<>(Arrays.asList("a\\b", "c\\d"), "a\\b.c\\d", "`a\\\\b`.`c\\\\d`"));
+            new Triple<>(Arrays.asList("a\\b", "c\\d"), "a\\b/c\\d", "`a\\\\b`.`c\\\\d`"));
 
     @Test
     public void testBuiltinDataverseName() throws Exception {
@@ -220,7 +218,6 @@
         testRuntimeException(() -> DataverseName.createBuiltinDataverseName(null), NullPointerException.class);
         testRuntimeException(() -> DataverseName.createFromCanonicalForm(null), NullPointerException.class);
         testRuntimeException(() -> DataverseName.create(Collections.singletonList(null)), NullPointerException.class);
-        testRuntimeException(() -> DataverseName.create(Arrays.asList(null, null)), NullPointerException.class);
         // 3. IndexOutOfBoundsException
         testRuntimeException(() -> DataverseName.create(Collections.emptyList(), 0, 1),
                 IndexOutOfBoundsException.class);
diff --git a/asterixdb/asterix-doc/src/main/markdown/sqlpp/5_error.md b/asterixdb/asterix-doc/src/main/markdown/sqlpp/5_error.md
index ea4c6a15..502647e 100644
--- a/asterixdb/asterix-doc/src/main/markdown/sqlpp/5_error.md
+++ b/asterixdb/asterix-doc/src/main/markdown/sqlpp/5_error.md
@@ -71,7 +71,7 @@
 If we have a typo as above in "customers" that misses the dataset name's ending "s",
 we will get an identifier resolution error as follows:
 
-    ERROR: Code: 1 "ASX1077: Cannot find dataset customer in dataverse Commerce nor an alias with name customer! (in line 2, at column 7)"
+    ERROR: Code: 1 "ASX1077: Cannot find dataset customer in dataverse Commerce nor an alias with name customer (in line 2, at column 7)"
 
 ##### Example
 (Q4.4)
diff --git a/asterixdb/asterix-doc/src/main/markdown/sqlpp/7_ddl_dml.md b/asterixdb/asterix-doc/src/main/markdown/sqlpp/7_ddl_dml.md
index b2b893b..1569d69 100644
--- a/asterixdb/asterix-doc/src/main/markdown/sqlpp/7_ddl_dml.md
+++ b/asterixdb/asterix-doc/src/main/markdown/sqlpp/7_ddl_dml.md
@@ -452,8 +452,9 @@
 ![](../images/diagrams/CreateSynonym.png)
 
 The `CREATE SYNONYM` statement creates a synonym for a given dataset.
-This synonym may be used used instead of the dataset name in `SELECT`, `INSERT`, `UPSERT`, `DELETE`, and `LOAD` statements.
+This synonym may be used instead of the dataset name in `SELECT`, `INSERT`, `UPSERT`, `DELETE`, and `LOAD` statements.
 The target dataset does not need to exist when the synonym is created.
+A synonym may be created for another synonym.
 
 ##### Example
 
diff --git a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/api/IRecordReader.java b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/api/IRecordReader.java
index cb97526..0e6ddb2 100644
--- a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/api/IRecordReader.java
+++ b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/api/IRecordReader.java
@@ -23,6 +23,7 @@
 import java.util.function.LongSupplier;
 import java.util.function.Supplier;
 
+import org.apache.asterix.active.message.ActiveManagerMessage;
 import org.apache.asterix.external.dataflow.AbstractFeedDataFlowController;
 import org.apache.asterix.external.util.ExternalDataConstants;
 import org.apache.asterix.external.util.FeedLogManager;
@@ -95,4 +96,8 @@
     default LongSupplier getLineNumber() {
         return ExternalDataConstants.NO_LINES;
     }
+
+    default void handleGenericEvent(ActiveManagerMessage event) {
+        throw new IllegalStateException("unexpected generic event " + event);
+    }
 }
diff --git a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/dataflow/AbstractFeedDataFlowController.java b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/dataflow/AbstractFeedDataFlowController.java
index b58e604..94d9e6e 100644
--- a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/dataflow/AbstractFeedDataFlowController.java
+++ b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/dataflow/AbstractFeedDataFlowController.java
@@ -21,6 +21,7 @@
 import java.io.Closeable;
 import java.io.IOException;
 
+import org.apache.asterix.active.message.ActiveManagerMessage;
 import org.apache.asterix.external.api.IDataFlowController;
 import org.apache.asterix.external.util.FeedLogManager;
 import org.apache.hyracks.api.context.IHyracksTaskContext;
@@ -57,4 +58,8 @@
             feedLogManager.close();
         }
     }
+
+    public void handleGenericEvent(ActiveManagerMessage event) {
+        throw new IllegalStateException("unexpected generic event " + event);
+    }
 }
diff --git a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/dataflow/FeedRecordDataFlowController.java b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/dataflow/FeedRecordDataFlowController.java
index 56257a8..8cec5de 100644
--- a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/dataflow/FeedRecordDataFlowController.java
+++ b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/dataflow/FeedRecordDataFlowController.java
@@ -21,6 +21,7 @@
 import java.io.IOException;
 import java.util.concurrent.atomic.AtomicBoolean;
 
+import org.apache.asterix.active.message.ActiveManagerMessage;
 import org.apache.asterix.common.exceptions.ErrorCode;
 import org.apache.asterix.common.exceptions.RuntimeDataException;
 import org.apache.asterix.external.api.IRawRecord;
@@ -280,4 +281,9 @@
                 .append("}");
         return str.toString();
     }
+
+    @Override
+    public void handleGenericEvent(ActiveManagerMessage event) {
+        recordReader.handleGenericEvent(event);
+    }
 }
diff --git a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/dataset/adapter/FeedAdapter.java b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/dataset/adapter/FeedAdapter.java
index 54e633a..fc9b727 100644
--- a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/dataset/adapter/FeedAdapter.java
+++ b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/dataset/adapter/FeedAdapter.java
@@ -21,6 +21,7 @@
 import java.io.Closeable;
 import java.io.IOException;
 
+import org.apache.asterix.active.message.ActiveManagerMessage;
 import org.apache.asterix.common.external.IDataSourceAdapter;
 import org.apache.asterix.external.dataflow.AbstractFeedDataFlowController;
 import org.apache.hyracks.api.comm.IFrameWriter;
@@ -69,4 +70,8 @@
     public void close() throws IOException {
         controller.close();
     }
+
+    public void handleGenericEvent(ActiveManagerMessage event) {
+        controller.handleGenericEvent(event);
+    }
 }
diff --git a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/input/record/reader/abstracts/AbstractExternalInputStream.java b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/input/record/reader/abstracts/AbstractExternalInputStream.java
index 898f828..b37bce7 100644
--- a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/input/record/reader/abstracts/AbstractExternalInputStream.java
+++ b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/input/record/reader/abstracts/AbstractExternalInputStream.java
@@ -52,9 +52,6 @@
 
         // Finished reading all the files
         if (nextFileIndex >= filePaths.size()) {
-            if (in != null) {
-                CleanupUtils.close(in, null);
-            }
             return false;
         }
 
diff --git a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/input/record/reader/abstracts/AbstractExternalInputStreamFactory.java b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/input/record/reader/abstracts/AbstractExternalInputStreamFactory.java
index ca55b6f..2a063bf 100644
--- a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/input/record/reader/abstracts/AbstractExternalInputStreamFactory.java
+++ b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/input/record/reader/abstracts/AbstractExternalInputStreamFactory.java
@@ -30,6 +30,7 @@
 import java.util.regex.Pattern;
 import java.util.regex.PatternSyntaxException;
 
+import org.apache.asterix.common.dataflow.ICcApplicationContext;
 import org.apache.asterix.common.exceptions.CompilationException;
 import org.apache.asterix.common.exceptions.ErrorCode;
 import org.apache.asterix.external.api.AsterixInputStream;
@@ -69,29 +70,16 @@
         return partitionConstraint;
     }
 
+    protected int getPartitionsCount() {
+        return getPartitionConstraint().getLocations().length;
+    }
+
     @Override
-    public abstract void configure(IServiceContext ctx, Map<String, String> configuration,
-            IWarningCollector warningCollector) throws AlgebricksException;
-
-    /**
-     * Finds the smallest workload and returns it
-     *
-     * @return the smallest workload
-     */
-    protected PartitionWorkLoadBasedOnSize getSmallestWorkLoad() {
-        PartitionWorkLoadBasedOnSize smallest = partitionWorkLoadsBasedOnSize.get(0);
-        for (PartitionWorkLoadBasedOnSize partition : partitionWorkLoadsBasedOnSize) {
-            // If the current total size is 0, add the file directly as this is a first time partition
-            if (partition.getTotalSize() == 0) {
-                smallest = partition;
-                break;
-            }
-            if (partition.getTotalSize() < smallest.getTotalSize()) {
-                smallest = partition;
-            }
-        }
-
-        return smallest;
+    public void configure(IServiceContext ctx, Map<String, String> configuration, IWarningCollector warningCollector)
+            throws AlgebricksException {
+        this.configuration = configuration;
+        this.partitionConstraint =
+                ((ICcApplicationContext) ctx.getApplicationContext()).getClusterStateManager().getClusterLocations();
     }
 
     protected IncludeExcludeMatcher getIncludeExcludeMatchers() throws CompilationException {
diff --git a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/input/record/reader/aws/AwsS3InputStream.java b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/input/record/reader/aws/AwsS3InputStream.java
index e3e53d5..5eb8475 100644
--- a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/input/record/reader/aws/AwsS3InputStream.java
+++ b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/input/record/reader/aws/AwsS3InputStream.java
@@ -23,6 +23,7 @@
 import java.io.IOException;
 import java.util.List;
 import java.util.Map;
+import java.util.concurrent.TimeUnit;
 import java.util.zip.GZIPInputStream;
 
 import org.apache.asterix.common.exceptions.CompilationException;
@@ -31,50 +32,105 @@
 import org.apache.asterix.external.input.record.reader.abstracts.AbstractExternalInputStream;
 import org.apache.asterix.external.util.ExternalDataConstants;
 import org.apache.asterix.external.util.ExternalDataUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.api.util.CleanupUtils;
 import org.apache.hyracks.util.LogRedactionUtil;
 
 import software.amazon.awssdk.core.exception.SdkException;
 import software.amazon.awssdk.services.s3.S3Client;
 import software.amazon.awssdk.services.s3.model.GetObjectRequest;
 import software.amazon.awssdk.services.s3.model.NoSuchKeyException;
+import software.amazon.awssdk.services.s3.model.S3Exception;
 
 public class AwsS3InputStream extends AbstractExternalInputStream {
 
+    // Configuration
+    private final String bucket;
     private final S3Client s3Client;
+    private static final int MAX_RETRIES = 5; // We will retry 5 times in case of internal error from AWS S3 service
 
     public AwsS3InputStream(Map<String, String> configuration, List<String> filePaths) throws HyracksDataException {
         super(configuration, filePaths);
         this.s3Client = buildAwsS3Client(configuration);
+        this.bucket = configuration.get(ExternalDataConstants.CONTAINER_NAME_FIELD_NAME);
     }
 
     @Override
     protected boolean getInputStream() throws IOException {
-        String bucket = configuration.get(AwsS3.CONTAINER_NAME_FIELD_NAME);
+        String fileName = filePaths.get(nextFileIndex);
         GetObjectRequest.Builder getObjectBuilder = GetObjectRequest.builder();
         GetObjectRequest getObjectRequest = getObjectBuilder.bucket(bucket).key(filePaths.get(nextFileIndex)).build();
-
         // Have a reference to the S3 stream to ensure that if GZipInputStream causes an IOException because of reading
         // the header, then the S3 stream gets closed in the close method
-        try {
-            in = s3Client.getObject(getObjectRequest);
-        } catch (NoSuchKeyException ex) {
-            LOGGER.debug(() -> "Key " + LogRedactionUtil.userData(getObjectRequest.key()) + " was not found in bucket "
-                    + getObjectRequest.bucket());
+        if (!doGetInputStream(getObjectRequest)) {
             return false;
-        } catch (SdkException ex) {
-            throw new RuntimeDataException(ErrorCode.EXTERNAL_SOURCE_ERROR, ex.getMessage());
         }
-
         // Use gzip stream if needed
-        String filename = filePaths.get(nextFileIndex).toLowerCase();
-        if (filename.endsWith(".gz") || filename.endsWith(".gzip")) {
-            in = new GZIPInputStream(s3Client.getObject(getObjectRequest), ExternalDataConstants.DEFAULT_BUFFER_SIZE);
+        if (StringUtils.endsWithIgnoreCase(fileName, ".gz") || StringUtils.endsWithIgnoreCase(fileName, ".gzip")) {
+            in = new GZIPInputStream(in, ExternalDataConstants.DEFAULT_BUFFER_SIZE);
         }
-
         return true;
     }
 
+    /**
+     * Get the input stream. If an error is encountered, depending on the error code, a retry might be favorable.
+     *
+     * @return true
+     */
+    private boolean doGetInputStream(GetObjectRequest request) throws RuntimeDataException {
+        int retries = 0;
+        while (retries < MAX_RETRIES) {
+            try {
+                in = s3Client.getObject(request);
+                break;
+            } catch (NoSuchKeyException ex) {
+                LOGGER.debug(() -> "Key " + LogRedactionUtil.userData(request.key()) + " was not found in bucket "
+                        + request.bucket());
+                return false;
+            } catch (S3Exception ex) {
+                if (!shouldRetry(ex.awsErrorDetails().errorCode(), retries++)) {
+                    throw new RuntimeDataException(ErrorCode.EXTERNAL_SOURCE_ERROR, ex.getMessage());
+                }
+                LOGGER.debug(() -> "S3 retryable error: " + LogRedactionUtil.userData(ex.getMessage()));
+
+                // Backoff for 1 sec for the first 2 retries, and 2 seconds from there onward
+                try {
+                    Thread.sleep(TimeUnit.SECONDS.toMillis(retries < 3 ? 1 : 2));
+                } catch (InterruptedException e) {
+                    Thread.currentThread().interrupt();
+                }
+            } catch (SdkException ex) {
+                throw new RuntimeDataException(ErrorCode.EXTERNAL_SOURCE_ERROR, ex.getMessage());
+            }
+        }
+        return true;
+    }
+
+    private boolean shouldRetry(String errorCode, int currentRetry) {
+        return currentRetry < MAX_RETRIES && AwsS3.isRetryableError(errorCode);
+    }
+
+    @Override
+    public void close() throws IOException {
+        if (in != null) {
+            CleanupUtils.close(in, null);
+        }
+        if (s3Client != null) {
+            CleanupUtils.close(s3Client, null);
+        }
+    }
+
+    @Override
+    public boolean stop() {
+        try {
+            close();
+        } catch (IOException e) {
+            // Ignore
+        }
+        return false;
+    }
+
     private S3Client buildAwsS3Client(Map<String, String> configuration) throws HyracksDataException {
         try {
             return ExternalDataUtils.AwsS3.buildAwsS3Client(configuration);
diff --git a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/input/record/reader/aws/AwsS3InputStreamFactory.java b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/input/record/reader/aws/AwsS3InputStreamFactory.java
index 5bab888..8197524 100644
--- a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/input/record/reader/aws/AwsS3InputStreamFactory.java
+++ b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/input/record/reader/aws/AwsS3InputStreamFactory.java
@@ -18,19 +18,19 @@
  */
 package org.apache.asterix.external.input.record.reader.aws;
 
-import static org.apache.asterix.external.util.ExternalDataConstants.AwsS3;
-
 import java.util.ArrayList;
+import java.util.Comparator;
 import java.util.List;
 import java.util.Map;
+import java.util.PriorityQueue;
 import java.util.function.BiPredicate;
 import java.util.regex.Matcher;
 
-import org.apache.asterix.common.dataflow.ICcApplicationContext;
 import org.apache.asterix.common.exceptions.CompilationException;
 import org.apache.asterix.common.exceptions.ErrorCode;
 import org.apache.asterix.external.api.AsterixInputStream;
 import org.apache.asterix.external.input.record.reader.abstracts.AbstractExternalInputStreamFactory;
+import org.apache.asterix.external.util.ExternalDataConstants;
 import org.apache.asterix.external.util.ExternalDataUtils;
 import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
 import org.apache.hyracks.api.application.IServiceContext;
@@ -61,8 +61,7 @@
     @Override
     public void configure(IServiceContext ctx, Map<String, String> configuration, IWarningCollector warningCollector)
             throws AlgebricksException {
-        this.configuration = configuration;
-        ICcApplicationContext ccApplicationContext = (ICcApplicationContext) ctx.getApplicationContext();
+        super.configure(ctx, configuration, warningCollector);
 
         // Ensure the validity of include/exclude
         ExternalDataUtils.validateIncludeExclude(configuration);
@@ -70,7 +69,7 @@
 
         // Prepare to retrieve the objects
         List<S3Object> filesOnly;
-        String container = configuration.get(AwsS3.CONTAINER_NAME_FIELD_NAME);
+        String container = configuration.get(ExternalDataConstants.CONTAINER_NAME_FIELD_NAME);
         S3Client s3Client = ExternalDataUtils.AwsS3.buildAwsS3Client(configuration);
 
         try {
@@ -79,7 +78,7 @@
             // New API is not implemented, try falling back to old API
             try {
                 // For error code, see https://docs.aws.amazon.com/AmazonS3/latest/API/ErrorResponses.html
-                if (ex.awsErrorDetails().errorCode().equals("NotImplemented")) {
+                if (ex.awsErrorDetails().errorCode().equals(ExternalDataConstants.AwsS3.ERROR_METHOD_NOT_IMPLEMENTED)) {
                     filesOnly = oldApiListS3Objects(s3Client, container, includeExcludeMatcher);
                 } else {
                     throw ex;
@@ -101,12 +100,8 @@
             warningCollector.warn(warning);
         }
 
-        // Partition constraints
-        partitionConstraint = ccApplicationContext.getClusterStateManager().getClusterLocations();
-        int partitionsCount = partitionConstraint.getLocations().length;
-
         // Distribute work load amongst the partitions
-        distributeWorkLoad(filesOnly, partitionsCount);
+        distributeWorkLoad(filesOnly, getPartitionsCount());
     }
 
     /**
@@ -223,14 +218,19 @@
      * @param partitionsCount Partitions count
      */
     private void distributeWorkLoad(List<S3Object> fileObjects, int partitionsCount) {
+        PriorityQueue<PartitionWorkLoadBasedOnSize> workloadQueue = new PriorityQueue<>(partitionsCount,
+                Comparator.comparingLong(PartitionWorkLoadBasedOnSize::getTotalSize));
+
         // Prepare the workloads based on the number of partitions
         for (int i = 0; i < partitionsCount; i++) {
-            partitionWorkLoadsBasedOnSize.add(new PartitionWorkLoadBasedOnSize());
+            workloadQueue.add(new PartitionWorkLoadBasedOnSize());
         }
 
         for (S3Object object : fileObjects) {
-            PartitionWorkLoadBasedOnSize smallest = getSmallestWorkLoad();
-            smallest.addFilePath(object.key(), object.size());
+            PartitionWorkLoadBasedOnSize workload = workloadQueue.poll();
+            workload.addFilePath(object.key(), object.size());
+            workloadQueue.add(workload);
         }
+        partitionWorkLoadsBasedOnSize.addAll(workloadQueue);
     }
 }
diff --git a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/input/record/reader/azure/AzureBlobInputStream.java b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/input/record/reader/azure/AzureBlobInputStream.java
index 358c412..3fb3395 100644
--- a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/input/record/reader/azure/AzureBlobInputStream.java
+++ b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/input/record/reader/azure/AzureBlobInputStream.java
@@ -18,8 +18,6 @@
  */
 package org.apache.asterix.external.input.record.reader.azure;
 
-import static org.apache.asterix.external.util.ExternalDataConstants.AzureBlob;
-
 import java.io.IOException;
 import java.util.List;
 import java.util.Map;
@@ -43,15 +41,17 @@
 public class AzureBlobInputStream extends AbstractExternalInputStream {
 
     private final BlobServiceClient client;
+    private final String container;
 
     public AzureBlobInputStream(Map<String, String> configuration, List<String> filePaths) throws HyracksDataException {
         super(configuration, filePaths);
         this.client = buildAzureClient(configuration);
+        this.container = configuration.get(ExternalDataConstants.CONTAINER_NAME_FIELD_NAME);
     }
 
     @Override
     protected boolean getInputStream() throws IOException {
-        String container = configuration.get(AzureBlob.CONTAINER_NAME_FIELD_NAME);
+        String fileName = filePaths.get(nextFileIndex);
         BlobContainerClient blobContainerClient;
         BlobClient blob;
         try {
@@ -60,9 +60,9 @@
             in = blob.openInputStream();
 
             // Use gzip stream if needed
-            String filename = filePaths.get(nextFileIndex).toLowerCase();
-            if (filename.endsWith(".gz") || filename.endsWith(".gzip")) {
-                in = new GZIPInputStream(in = blob.openInputStream(), ExternalDataConstants.DEFAULT_BUFFER_SIZE);
+            String lowerCaseFileName = fileName.toLowerCase();
+            if (lowerCaseFileName.endsWith(".gz") || lowerCaseFileName.endsWith(".gzip")) {
+                in = new GZIPInputStream(in, ExternalDataConstants.DEFAULT_BUFFER_SIZE);
             }
         } catch (BlobStorageException ex) {
             if (ex.getErrorCode().equals(BlobErrorCode.BLOB_NOT_FOUND)) {
diff --git a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/input/record/reader/azure/AzureBlobInputStreamFactory.java b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/input/record/reader/azure/AzureBlobInputStreamFactory.java
index 167e22a..803694a 100644
--- a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/input/record/reader/azure/AzureBlobInputStreamFactory.java
+++ b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/input/record/reader/azure/AzureBlobInputStreamFactory.java
@@ -18,19 +18,19 @@
  */
 package org.apache.asterix.external.input.record.reader.azure;
 
-import static org.apache.asterix.external.util.ExternalDataConstants.*;
-
 import java.util.ArrayList;
+import java.util.Comparator;
 import java.util.List;
 import java.util.Map;
+import java.util.PriorityQueue;
 import java.util.function.BiPredicate;
 import java.util.regex.Matcher;
 
-import org.apache.asterix.common.dataflow.ICcApplicationContext;
 import org.apache.asterix.common.exceptions.CompilationException;
 import org.apache.asterix.common.exceptions.ErrorCode;
 import org.apache.asterix.external.api.AsterixInputStream;
 import org.apache.asterix.external.input.record.reader.abstracts.AbstractExternalInputStreamFactory;
+import org.apache.asterix.external.util.ExternalDataConstants;
 import org.apache.asterix.external.util.ExternalDataUtils;
 import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
 import org.apache.hyracks.api.application.IServiceContext;
@@ -56,10 +56,9 @@
     @Override
     public void configure(IServiceContext ctx, Map<String, String> configuration, IWarningCollector warningCollector)
             throws AlgebricksException {
-        this.configuration = configuration;
-        ICcApplicationContext ccApplicationContext = (ICcApplicationContext) ctx.getApplicationContext();
+        super.configure(ctx, configuration, warningCollector);
 
-        String container = configuration.get(AzureBlob.CONTAINER_NAME_FIELD_NAME);
+        String container = configuration.get(ExternalDataConstants.CONTAINER_NAME_FIELD_NAME);
 
         List<BlobItem> filesOnly = new ArrayList<>();
 
@@ -87,12 +86,8 @@
                 warningCollector.warn(warning);
             }
 
-            // Partition constraints
-            partitionConstraint = ccApplicationContext.getClusterStateManager().getClusterLocations();
-            int partitionsCount = partitionConstraint.getLocations().length;
-
             // Distribute work load amongst the partitions
-            distributeWorkLoad(filesOnly, partitionsCount);
+            distributeWorkLoad(filesOnly, getPartitionsCount());
         } catch (Exception ex) {
             throw new CompilationException(ErrorCode.EXTERNAL_SOURCE_ERROR, ex.getMessage());
         }
@@ -138,14 +133,19 @@
      * @param partitionsCount Partitions count
      */
     private void distributeWorkLoad(List<BlobItem> items, int partitionsCount) {
+        PriorityQueue<PartitionWorkLoadBasedOnSize> workloadQueue = new PriorityQueue<>(partitionsCount,
+                Comparator.comparingLong(PartitionWorkLoadBasedOnSize::getTotalSize));
+
         // Prepare the workloads based on the number of partitions
         for (int i = 0; i < partitionsCount; i++) {
-            partitionWorkLoadsBasedOnSize.add(new PartitionWorkLoadBasedOnSize());
+            workloadQueue.add(new PartitionWorkLoadBasedOnSize());
         }
 
-        for (BlobItem item : items) {
-            PartitionWorkLoadBasedOnSize smallest = getSmallestWorkLoad();
-            smallest.addFilePath(item.getName(), item.getProperties().getContentLength());
+        for (BlobItem object : items) {
+            PartitionWorkLoadBasedOnSize workload = workloadQueue.poll();
+            workload.addFilePath(object.getName(), object.getProperties().getContentLength());
+            workloadQueue.add(workload);
         }
+        partitionWorkLoadsBasedOnSize.addAll(workloadQueue);
     }
 }
diff --git a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/input/record/reader/stream/StreamRecordReader.java b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/input/record/reader/stream/StreamRecordReader.java
index cb16de5..1e003a1 100644
--- a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/input/record/reader/stream/StreamRecordReader.java
+++ b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/input/record/reader/stream/StreamRecordReader.java
@@ -33,7 +33,6 @@
 import org.apache.asterix.external.dataflow.AbstractFeedDataFlowController;
 import org.apache.asterix.external.input.record.CharArrayRecord;
 import org.apache.asterix.external.input.stream.AsterixInputStreamReader;
-import org.apache.asterix.external.util.ExternalDataConstants;
 import org.apache.asterix.external.util.ExternalDataUtils;
 import org.apache.asterix.external.util.FeedLogManager;
 import org.apache.hyracks.api.context.IHyracksTaskContext;
@@ -51,9 +50,10 @@
     private Supplier<String> previousDataSourceName = EMPTY_STRING;
 
     public void configure(AsterixInputStream inputStream, Map<String, String> config) {
-        this.reader = new AsterixInputStreamReader(inputStream);
+        int bufferSize = ExternalDataUtils.getOrDefaultBufferSize(config);
+        this.reader = new AsterixInputStreamReader(inputStream, bufferSize);
         record = new CharArrayRecord();
-        inputBuffer = new char[ExternalDataConstants.DEFAULT_BUFFER_SIZE];
+        inputBuffer = new char[bufferSize];
         if (!ExternalDataUtils.isTrue(config, KEY_REDACT_WARNINGS)) {
             this.dataSourceName = reader::getStreamName;
             this.previousDataSourceName = reader::getPreviousStreamName;
diff --git a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/input/stream/AsterixInputStreamReader.java b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/input/stream/AsterixInputStreamReader.java
index d2499f8..81da0b0 100644
--- a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/input/stream/AsterixInputStreamReader.java
+++ b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/input/stream/AsterixInputStreamReader.java
@@ -27,25 +27,24 @@
 
 import org.apache.asterix.external.api.AsterixInputStream;
 import org.apache.asterix.external.dataflow.AbstractFeedDataFlowController;
-import org.apache.asterix.external.util.ExternalDataConstants;
 import org.apache.asterix.external.util.FeedLogManager;
 import org.apache.hyracks.api.exceptions.HyracksDataException;
 
 public class AsterixInputStreamReader extends Reader {
     private final AsterixInputStream in;
     private final CharsetDecoder decoder;
-    private final byte[] bytes;
+    private byte[] bytes;
     protected final ByteBuffer byteBuffer;
     protected final CharBuffer charBuffer;
     protected boolean done = false;
     protected boolean remaining = false;
 
-    public AsterixInputStreamReader(AsterixInputStream in) {
+    public AsterixInputStreamReader(AsterixInputStream in, int bufferSize) {
         this.in = in;
         this.decoder = StandardCharsets.UTF_8.newDecoder();
-        bytes = new byte[ExternalDataConstants.DEFAULT_BUFFER_SIZE];
-        byteBuffer = ByteBuffer.wrap(bytes);
-        charBuffer = CharBuffer.allocate(ExternalDataConstants.DEFAULT_BUFFER_SIZE);
+        this.bytes = new byte[bufferSize];
+        this.byteBuffer = ByteBuffer.wrap(bytes);
+        this.charBuffer = CharBuffer.allocate(bufferSize);
         this.byteBuffer.flip();
     }
 
diff --git a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/input/stream/StandardUTF8ToModifiedUTF8DataOutput.java b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/input/stream/StandardUTF8ToModifiedUTF8DataOutput.java
index be0d286..adeb80e 100644
--- a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/input/stream/StandardUTF8ToModifiedUTF8DataOutput.java
+++ b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/input/stream/StandardUTF8ToModifiedUTF8DataOutput.java
@@ -141,7 +141,7 @@
         private final ByteArrayAccessibleInputStream inByte;
 
         public ResettableUTF8InputStreamReader(ByteArrayAccessibleInputStream inByte) {
-            super(new BasicInputStream(inByte));
+            super(new BasicInputStream(inByte), ExternalDataConstants.DEFAULT_BUFFER_SIZE);
             this.inByte = inByte;
         }
 
diff --git a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/library/PythonLibraryEvaluator.java b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/library/PythonLibraryEvaluator.java
index e2229ee..457b86a 100644
--- a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/library/PythonLibraryEvaluator.java
+++ b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/library/PythonLibraryEvaluator.java
@@ -27,6 +27,7 @@
 import java.nio.ByteBuffer;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 import java.util.concurrent.TimeUnit;
 
 import org.apache.asterix.common.exceptions.AsterixException;
@@ -65,18 +66,21 @@
     private IPCSystem ipcSys;
     private String sitePkgs;
     private List<String> pythonArgs;
+    private Map<String, String> pythonEnv;
     private TaskAttemptId task;
     private IWarningCollector warningCollector;
     private SourceLocation sourceLoc;
 
     public PythonLibraryEvaluator(JobId jobId, PythonLibraryEvaluatorId evaluatorId, ILibraryManager libMgr,
-            File pythonHome, String sitePkgs, List<String> pythonArgs, ExternalFunctionResultRouter router,
-            IPCSystem ipcSys, TaskAttemptId task, IWarningCollector warningCollector, SourceLocation sourceLoc) {
+            File pythonHome, String sitePkgs, List<String> pythonArgs, Map<String, String> pythonEnv,
+            ExternalFunctionResultRouter router, IPCSystem ipcSys, TaskAttemptId task,
+            IWarningCollector warningCollector, SourceLocation sourceLoc) {
         super(jobId, evaluatorId);
         this.libMgr = libMgr;
         this.pythonHome = pythonHome;
         this.sitePkgs = sitePkgs;
         this.pythonArgs = pythonArgs;
+        this.pythonEnv = pythonEnv;
         this.router = router;
         this.task = task;
         this.ipcSys = ipcSys;
@@ -98,8 +102,8 @@
         args.add(InetAddress.getLoopbackAddress().getHostAddress());
         args.add(Integer.toString(port));
         args.add(sitePkgs);
-
         ProcessBuilder pb = new ProcessBuilder(args.toArray(new String[0]));
+        pb.environment().putAll(pythonEnv);
         pb.directory(new File(wd));
         p = pb.start();
         proto = new PythonIPCProto(p.getOutputStream(), router, p);
@@ -199,14 +203,15 @@
 
     public static PythonLibraryEvaluator getInstance(IExternalFunctionInfo finfo, ILibraryManager libMgr,
             ExternalFunctionResultRouter router, IPCSystem ipcSys, File pythonHome, IHyracksTaskContext ctx,
-            String sitePkgs, List<String> pythonArgs, IWarningCollector warningCollector, SourceLocation sourceLoc)
-            throws IOException, AsterixException {
+            String sitePkgs, List<String> pythonArgs, Map<String, String> pythonEnv, IWarningCollector warningCollector,
+            SourceLocation sourceLoc) throws IOException, AsterixException {
         PythonLibraryEvaluatorId evaluatorId = new PythonLibraryEvaluatorId(finfo.getLibraryDataverseName(),
                 finfo.getLibraryName(), Thread.currentThread());
         PythonLibraryEvaluator evaluator = (PythonLibraryEvaluator) ctx.getStateObject(evaluatorId);
         if (evaluator == null) {
             evaluator = new PythonLibraryEvaluator(ctx.getJobletContext().getJobId(), evaluatorId, libMgr, pythonHome,
-                    sitePkgs, pythonArgs, router, ipcSys, ctx.getTaskAttemptId(), warningCollector, sourceLoc);
+                    sitePkgs, pythonArgs, pythonEnv, router, ipcSys, ctx.getTaskAttemptId(), warningCollector,
+                    sourceLoc);
             ctx.getJobletContext().registerDeallocatable(evaluator);
             evaluator.initialize();
             ctx.setStateObject(evaluator);
diff --git a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/library/PythonLibraryEvaluatorFactory.java b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/library/PythonLibraryEvaluatorFactory.java
index 86d51de..06c9bc9 100644
--- a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/library/PythonLibraryEvaluatorFactory.java
+++ b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/library/PythonLibraryEvaluatorFactory.java
@@ -23,8 +23,9 @@
 import java.io.File;
 import java.io.IOException;
 import java.util.ArrayList;
-import java.util.Arrays;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 import org.apache.asterix.common.api.INcApplicationContext;
 import org.apache.asterix.common.exceptions.AsterixException;
@@ -46,6 +47,7 @@
     private final ExternalFunctionResultRouter router;
     private final String sitePackagesPath;
     private final List<String> pythonArgs;
+    private final Map<String, String> pythonEnv;
 
     public PythonLibraryEvaluatorFactory(IHyracksTaskContext ctx) throws AsterixException {
         this.ctx = ctx;
@@ -67,17 +69,41 @@
                         + NCConfig.Option.PYTHON_CMD_AUTOLOCATE.ini() + " is false");
             }
         }
+        pythonEnv = new HashMap<>();
+        String[] envRaw = appCfg.getStringArray((NCConfig.Option.PYTHON_ENV));
+        if (envRaw != null) {
+            for (String rawEnvArg : envRaw) {
+                //TODO: i think equals is shared among all unixes and windows. but it needs verification
+                if (rawEnvArg.length() < 1) {
+                    continue;
+                }
+                String[] rawArgSplit = rawEnvArg.split("(?<!\\\\)=", 2);
+                if (rawArgSplit.length < 2) {
+                    throw AsterixException.create(ErrorCode.EXTERNAL_UDF_EXCEPTION,
+                            "Invalid environment variable format detected.");
+                }
+                pythonEnv.put(rawArgSplit[0], rawArgSplit[1]);
+            }
+        }
         pythonPath = new File(pythonPathCmd);
         List<String> sitePkgs = new ArrayList<>();
         sitePkgs.add(SITE_PACKAGES);
         String[] addlSitePackages = appCfg.getStringArray((NCConfig.Option.PYTHON_ADDITIONAL_PACKAGES));
-        sitePkgs.addAll(Arrays.asList(addlSitePackages));
+        for (String sitePkg : addlSitePackages) {
+            if (sitePkg.length() > 0) {
+                sitePkgs.add(sitePkg);
+            }
+        }
         if (appCfg.getBoolean(NCConfig.Option.PYTHON_USE_BUNDLED_MSGPACK)) {
             sitePkgs.add("ipc" + File.separator + SITE_PACKAGES + File.separator);
         }
         String[] pythonArgsRaw = appCfg.getStringArray(NCConfig.Option.PYTHON_ARGS);
         if (pythonArgsRaw != null) {
-            pythonArgs.addAll(Arrays.asList(pythonArgsRaw));
+            for (String arg : pythonArgsRaw) {
+                if (arg.length() > 0) {
+                    pythonArgs.add(arg);
+                }
+            }
         }
         StringBuilder sitePackagesPathBuilder = new StringBuilder();
         for (int i = 0; i < sitePkgs.size() - 1; i++) {
@@ -91,6 +117,6 @@
     public PythonLibraryEvaluator getEvaluator(IExternalFunctionInfo fnInfo, SourceLocation sourceLoc)
             throws IOException, AsterixException {
         return PythonLibraryEvaluator.getInstance(fnInfo, libraryManager, router, ipcSys, pythonPath, ctx,
-                sitePackagesPath, pythonArgs, ctx.getWarningCollector(), sourceLoc);
+                sitePackagesPath, pythonArgs, pythonEnv, ctx.getWarningCollector(), sourceLoc);
     }
 }
diff --git a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/util/ExternalDataConstants.java b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/util/ExternalDataConstants.java
index fd5b269..a0cf387 100644
--- a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/util/ExternalDataConstants.java
+++ b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/util/ExternalDataConstants.java
@@ -120,6 +120,7 @@
     public static final String KEY_NULL_STR = "null";
     public static final String KEY_REDACT_WARNINGS = "redact-warnings";
     public static final String KEY_REQUESTED_FIELDS = "requested-fields";
+    public static final String KEY_EXTERNAL_SCAN_BUFFER_SIZE = "external-scan-buffer-size";
 
     /**
      * Keys for adapter name
@@ -288,6 +289,7 @@
     public static final String INVALID_VAL = "invalid value";
 
     public static final String DEFINITION_FIELD_NAME = "definition";
+    public static final String CONTAINER_NAME_FIELD_NAME = "container";
 
     public static class AwsS3 {
         private AwsS3() {
@@ -298,8 +300,16 @@
         public static final String ACCESS_KEY_ID_FIELD_NAME = "accessKeyId";
         public static final String SECRET_ACCESS_KEY_FIELD_NAME = "secretAccessKey";
         public static final String SESSION_TOKEN_FIELD_NAME = "sessionToken";
-        public static final String CONTAINER_NAME_FIELD_NAME = "container";
         public static final String SERVICE_END_POINT_FIELD_NAME = "serviceEndpoint";
+
+        // AWS S3 specific error codes
+        public static final String ERROR_INTERNAL_ERROR = "InternalError";
+        public static final String ERROR_SLOW_DOWN = "SlowDown";
+        public static final String ERROR_METHOD_NOT_IMPLEMENTED = "NotImplemented";
+
+        public static boolean isRetryableError(String errorCode) {
+            return errorCode.equals(ERROR_INTERNAL_ERROR) || errorCode.equals(ERROR_SLOW_DOWN);
+        }
     }
 
     public static class AzureBlob {
@@ -307,8 +317,6 @@
             throw new AssertionError("do not instantiate");
         }
 
-        public static final String CONTAINER_NAME_FIELD_NAME = "container";
-        public static final String DEFINITION_FIELD_NAME = "definition";
         public static final String CONNECTION_STRING_FIELD_NAME = "connectionString";
         public static final String ACCOUNT_NAME_FIELD_NAME = "accountName";
         public static final String ACCOUNT_KEY_FIELD_NAME = "accountKey";
diff --git a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/util/ExternalDataUtils.java b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/util/ExternalDataUtils.java
index 3ac1116..4beb932 100644
--- a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/util/ExternalDataUtils.java
+++ b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/util/ExternalDataUtils.java
@@ -18,6 +18,7 @@
  */
 package org.apache.asterix.external.util;
 
+import static org.apache.asterix.external.util.ExternalDataConstants.AwsS3.ERROR_METHOD_NOT_IMPLEMENTED;
 import static org.apache.asterix.external.util.ExternalDataConstants.AzureBlob.ACCOUNT_KEY_FIELD_NAME;
 import static org.apache.asterix.external.util.ExternalDataConstants.AzureBlob.ACCOUNT_NAME_FIELD_NAME;
 import static org.apache.asterix.external.util.ExternalDataConstants.AzureBlob.BLOB_ENDPOINT_FIELD_NAME;
@@ -31,6 +32,7 @@
 import static org.apache.asterix.external.util.ExternalDataConstants.AzureBlob.SHARED_ACCESS_SIGNATURE_FIELD_NAME;
 import static org.apache.asterix.external.util.ExternalDataConstants.KEY_DELIMITER;
 import static org.apache.asterix.external.util.ExternalDataConstants.KEY_ESCAPE;
+import static org.apache.asterix.external.util.ExternalDataConstants.KEY_EXTERNAL_SCAN_BUFFER_SIZE;
 import static org.apache.asterix.external.util.ExternalDataConstants.KEY_QUOTE;
 import static org.apache.asterix.external.util.ExternalDataConstants.KEY_RECORD_END;
 import static org.apache.asterix.external.util.ExternalDataConstants.KEY_RECORD_START;
@@ -113,6 +115,11 @@
     private ExternalDataUtils() {
     }
 
+    public static int getOrDefaultBufferSize(Map<String, String> configuration) {
+        String bufferSize = configuration.get(KEY_EXTERNAL_SCAN_BUFFER_SIZE);
+        return bufferSize != null ? Integer.parseInt(bufferSize) : ExternalDataConstants.DEFAULT_BUFFER_SIZE;
+    }
+
     // Get a delimiter from the given configuration
     public static char validateGetDelimiter(Map<String, String> configuration) throws HyracksDataException {
         return validateCharOrDefault(configuration, KEY_DELIMITER, ExternalDataConstants.DEFAULT_DELIMITER.charAt(0));
@@ -776,7 +783,7 @@
             S3Client s3Client = buildAwsS3Client(configuration);;
             S3Response response;
             boolean useOldApi = false;
-            String container = configuration.get(ExternalDataConstants.AwsS3.CONTAINER_NAME_FIELD_NAME);
+            String container = configuration.get(ExternalDataConstants.CONTAINER_NAME_FIELD_NAME);
             String prefix = getPrefix(configuration);
 
             try {
@@ -785,7 +792,7 @@
                 // Method not implemented, try falling back to old API
                 try {
                     // For error code, see https://docs.aws.amazon.com/AmazonS3/latest/API/ErrorResponses.html
-                    if (ex.awsErrorDetails().errorCode().equals("NotImplemented")) {
+                    if (ex.awsErrorDetails().errorCode().equals(ERROR_METHOD_NOT_IMPLEMENTED)) {
                         useOldApi = true;
                         response = isBucketEmpty(s3Client, container, prefix, true);
                     } else {
@@ -943,7 +950,7 @@
             // Check if the bucket is present
             BlobServiceClient blobServiceClient;
             try {
-                String container = configuration.get(ExternalDataConstants.AwsS3.CONTAINER_NAME_FIELD_NAME);
+                String container = configuration.get(ExternalDataConstants.CONTAINER_NAME_FIELD_NAME);
                 blobServiceClient = buildAzureClient(configuration);
                 BlobContainerClient blobContainer = blobServiceClient.getBlobContainerClient(container);
 
diff --git a/asterixdb/asterix-external-data/src/test/java/org/apache/asterix/external/input/record/reader/awss3/AwsS3Test.java b/asterixdb/asterix-external-data/src/test/java/org/apache/asterix/external/input/record/reader/awss3/AwsS3Test.java
new file mode 100644
index 0000000..90ea04b
--- /dev/null
+++ b/asterixdb/asterix-external-data/src/test/java/org/apache/asterix/external/input/record/reader/awss3/AwsS3Test.java
@@ -0,0 +1,145 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.
+ */
+package org.apache.asterix.external.input.record.reader.awss3;
+
+import static org.apache.asterix.external.util.ExternalDataConstants.AwsS3.ERROR_INTERNAL_ERROR;
+import static org.apache.asterix.external.util.ExternalDataConstants.AwsS3.ERROR_SLOW_DOWN;
+
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.asterix.external.input.record.reader.abstracts.AbstractExternalInputStreamFactory;
+import org.apache.asterix.external.input.record.reader.aws.AwsS3InputStream;
+import org.apache.asterix.external.input.record.reader.aws.AwsS3InputStreamFactory;
+import org.apache.hyracks.api.exceptions.IFormattedException;
+import org.junit.Assert;
+import org.junit.Test;
+import org.mockito.Mockito;
+
+import software.amazon.awssdk.awscore.exception.AwsErrorDetails;
+import software.amazon.awssdk.services.s3.S3Client;
+import software.amazon.awssdk.services.s3.model.GetObjectRequest;
+import software.amazon.awssdk.services.s3.model.S3Exception;
+import software.amazon.awssdk.services.s3.model.S3Object;
+
+public class AwsS3Test {
+
+    @SuppressWarnings("unchecked")
+    @Test
+    public void testWorkloadDistribution() throws Exception {
+        AwsS3InputStreamFactory factory = new AwsS3InputStreamFactory();
+
+        List<S3Object> s3Objects = new ArrayList<>();
+        final int partitionsCount = 3;
+
+        // Create S3 objects, 9 objects, on 3 partitions, they should be 600 total size on each partition
+        S3Object.Builder builder = S3Object.builder();
+        s3Objects.add(builder.key("1.json").size(100L).build());
+        s3Objects.add(builder.key("2.json").size(100L).build());
+        s3Objects.add(builder.key("3.json").size(100L).build());
+        s3Objects.add(builder.key("4.json").size(200L).build());
+        s3Objects.add(builder.key("5.json").size(200L).build());
+        s3Objects.add(builder.key("6.json").size(200L).build());
+        s3Objects.add(builder.key("7.json").size(300L).build());
+        s3Objects.add(builder.key("8.json").size(300L).build());
+        s3Objects.add(builder.key("9.json").size(300L).build());
+
+        // invoke the distributeWorkLoad method
+        Method distributeWorkloadMethod =
+                AwsS3InputStreamFactory.class.getDeclaredMethod("distributeWorkLoad", List.class, int.class);
+        distributeWorkloadMethod.setAccessible(true);
+        distributeWorkloadMethod.invoke(factory, s3Objects, partitionsCount);
+
+        // get the partitionWorkLoadsBasedOnSize field and verify the result
+        Field distributeWorkloadField =
+                AwsS3InputStreamFactory.class.getSuperclass().getDeclaredField("partitionWorkLoadsBasedOnSize");
+        distributeWorkloadField.setAccessible(true);
+        List<AbstractExternalInputStreamFactory.PartitionWorkLoadBasedOnSize> workloads =
+                (List<AbstractExternalInputStreamFactory.PartitionWorkLoadBasedOnSize>) distributeWorkloadField
+                        .get(factory);
+
+        for (AbstractExternalInputStreamFactory.PartitionWorkLoadBasedOnSize workload : workloads) {
+            Assert.assertEquals(workload.getTotalSize(), 600);
+        }
+    }
+
+    @Test
+    public void s3InternalError() throws Exception {
+        // S3Client mock
+        S3Client s3ClientMock = Mockito.mock(S3Client.class);
+
+        // Prepare S3Exception with internal error code
+        AwsErrorDetails errorDetails = AwsErrorDetails.builder().errorCode(ERROR_INTERNAL_ERROR)
+                .errorMessage("Internal Error from AWS").build();
+        S3Exception internalErrorEx = (S3Exception) S3Exception.builder().awsErrorDetails(errorDetails).build();
+        Mockito.when(s3ClientMock.getObject(GetObjectRequest.builder().build())).thenThrow(internalErrorEx);
+
+        // Set S3Client mock
+        AwsS3InputStream inputStreamMock = Mockito.mock(AwsS3InputStream.class);
+        Field s3ClientField = AwsS3InputStream.class.getDeclaredField("s3Client");
+        s3ClientField.setAccessible(true);
+        s3ClientField.set(inputStreamMock, s3ClientMock);
+
+        // doGetInputStream method
+        Method doGetInputStreamMethod =
+                AwsS3InputStream.class.getDeclaredMethod("doGetInputStream", GetObjectRequest.class);
+        doGetInputStreamMethod.setAccessible(true);
+
+        try {
+            doGetInputStreamMethod.invoke(inputStreamMock, GetObjectRequest.builder().build());
+        } catch (Exception ex) {
+            Assert.assertTrue("Not internal error", ex.getCause() instanceof IFormattedException
+                    && ex.getCause().toString().contains("ASX1108: External source error. Internal Error from AWS"));
+        }
+    }
+
+    @Test
+    public void s3SlowDown() throws Exception {
+        // S3Client mock
+        S3Client s3ClientMock = Mockito.mock(S3Client.class);
+
+        // Prepare S3Exception with slow down error code
+        AwsErrorDetails errorDetails =
+                AwsErrorDetails.builder().errorCode(ERROR_SLOW_DOWN).errorMessage("SlowDown Error from AWS").build();
+        S3Exception slowDownEx = (S3Exception) S3Exception.builder().awsErrorDetails(errorDetails).build();
+        Mockito.when(s3ClientMock.getObject(GetObjectRequest.builder().build())).thenThrow(slowDownEx);
+
+        // Set S3Client mock
+        AwsS3InputStream inputStreamMock = Mockito.mock(AwsS3InputStream.class);
+
+        // Set S3Client
+        Field s3ClientField = AwsS3InputStream.class.getDeclaredField("s3Client");
+        s3ClientField.setAccessible(true);
+        s3ClientField.set(inputStreamMock, s3ClientMock);
+
+        // doGetInputStream method
+        Method doGetInputStreamMethod =
+                AwsS3InputStream.class.getDeclaredMethod("doGetInputStream", GetObjectRequest.class);
+        doGetInputStreamMethod.setAccessible(true);
+
+        try {
+            doGetInputStreamMethod.invoke(inputStreamMock, GetObjectRequest.builder().build());
+        } catch (Exception ex) {
+            Assert.assertTrue("Not SlowDown error", ex.getCause() instanceof IFormattedException
+                    && ex.getCause().toString().contains("ASX1108: External source error. SlowDown Error from AWS"));
+        }
+    }
+}
diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/MetadataNode.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/MetadataNode.java
index 09709d08..c769960 100644
--- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/MetadataNode.java
+++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/MetadataNode.java
@@ -20,6 +20,7 @@
 package org.apache.asterix.metadata;
 
 import static org.apache.asterix.common.exceptions.ErrorCode.FULL_TEXT_DEFAULT_CONFIG_CANNOT_BE_DELETED_OR_CREATED;
+import static org.apache.asterix.common.utils.IdentifierUtil.dataset;
 
 import java.rmi.RemoteException;
 import java.util.ArrayList;
@@ -847,7 +848,7 @@
             }
             throw new AsterixException(
                     org.apache.asterix.common.exceptions.ErrorCode.CANNOT_DROP_OBJECT_DEPENDENT_EXISTS, "node group",
-                    nodeGroupName, "datasets",
+                    nodeGroupName, dataset() + "(s)",
                     datasets.stream().map(DatasetUtil::getFullyQualifiedDisplayName).collect(Collectors.joining(", ")));
         }
         try {
@@ -1128,7 +1129,7 @@
                 throw new AsterixException(
                         org.apache.asterix.common.exceptions.ErrorCode.CANNOT_DROP_DATAVERSE_DEPENDENT_EXISTS, "type",
                         TypeUtil.getFullyQualifiedDisplayName(set.getItemTypeDataverseName(), set.getItemTypeName()),
-                        "dataset", DatasetUtil.getFullyQualifiedDisplayName(set));
+                        dataset(), DatasetUtil.getFullyQualifiedDisplayName(set));
             }
             if (set.getMetaItemTypeDataverseName() != null
                     && set.getMetaItemTypeDataverseName().equals(dataverseName)) {
@@ -1136,7 +1137,7 @@
                         org.apache.asterix.common.exceptions.ErrorCode.CANNOT_DROP_DATAVERSE_DEPENDENT_EXISTS, "type",
                         TypeUtil.getFullyQualifiedDisplayName(set.getMetaItemTypeDataverseName(),
                                 set.getMetaItemTypeName()),
-                        "dataset", DatasetUtil.getFullyQualifiedDisplayName(set));
+                        dataset(), DatasetUtil.getFullyQualifiedDisplayName(set));
             }
         }
 
@@ -1156,9 +1157,8 @@
                         Function.FunctionDependencyKind functionDependencyKind = functionDependencyKinds[i];
                         throw new AsterixException(
                                 org.apache.asterix.common.exceptions.ErrorCode.CANNOT_DROP_DATAVERSE_DEPENDENT_EXISTS,
-                                functionDependencyKind.toString().toLowerCase(),
-                                functionDependencyKind.getDependencyDisplayName(dependency), "function",
-                                function.getSignature());
+                                functionDependencyKind, functionDependencyKind.getDependencyDisplayName(dependency),
+                                "function", function.getSignature());
                     }
                 }
             }
@@ -1321,7 +1321,7 @@
             if (set.getItemTypeName().equals(datatypeName) && set.getItemTypeDataverseName().equals(dataverseName)) {
                 throw new AsterixException(
                         org.apache.asterix.common.exceptions.ErrorCode.CANNOT_DROP_OBJECT_DEPENDENT_EXISTS, "type",
-                        TypeUtil.getFullyQualifiedDisplayName(dataverseName, datatypeName), "dataset",
+                        TypeUtil.getFullyQualifiedDisplayName(dataverseName, datatypeName), dataset(),
                         DatasetUtil.getFullyQualifiedDisplayName(set));
             }
         }
diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/declared/DatasetDataSource.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/declared/DatasetDataSource.java
index 29a66b9..17f91b4 100644
--- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/declared/DatasetDataSource.java
+++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/declared/DatasetDataSource.java
@@ -18,6 +18,8 @@
  */
 package org.apache.asterix.metadata.declared;
 
+import static org.apache.asterix.external.util.ExternalDataConstants.KEY_EXTERNAL_SCAN_BUFFER_SIZE;
+
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -44,6 +46,7 @@
 import org.apache.hyracks.algebricks.core.algebra.operators.logical.IOperatorSchema;
 import org.apache.hyracks.algebricks.core.algebra.properties.INodeDomain;
 import org.apache.hyracks.algebricks.core.jobgen.impl.JobGenContext;
+import org.apache.hyracks.algebricks.core.rewriter.base.PhysicalOptimizationConfig;
 import org.apache.hyracks.api.dataflow.IOperatorDescriptor;
 import org.apache.hyracks.api.job.JobSpecification;
 import org.apache.hyracks.storage.am.common.api.ITupleFilterFactory;
@@ -109,7 +112,10 @@
                         externalDataset.getItemTypeDataverseName(), itemTypeName).getDatatype();
 
                 ExternalDatasetDetails edd = (ExternalDatasetDetails) externalDataset.getDatasetDetails();
+                PhysicalOptimizationConfig physicalOptimizationConfig = context.getPhysicalOptimizationConfig();
+                int externalScanBufferSize = physicalOptimizationConfig.getExternalScanBufferSize();
                 Map<String, String> properties = addProjectionInfo(projectionInfo, edd.getProperties());
+                properties.put(KEY_EXTERNAL_SCAN_BUFFER_SIZE, String.valueOf(externalScanBufferSize));
                 ITypedAdapterFactory adapterFactory = metadataProvider.getConfiguredAdapterFactory(externalDataset,
                         edd.getAdapter(), properties, (ARecordType) itemType, null, context.getWarningCollector());
                 return metadataProvider.buildExternalDatasetDataScannerRuntime(jobSpec, itemType, adapterFactory,
diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/declared/MetadataManagerUtil.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/declared/MetadataManagerUtil.java
index dd8e44c..1376008 100644
--- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/declared/MetadataManagerUtil.java
+++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/declared/MetadataManagerUtil.java
@@ -18,6 +18,9 @@
  */
 package org.apache.asterix.metadata.declared;
 
+import static org.apache.asterix.common.utils.IdentifierUtil.dataset;
+import static org.apache.asterix.common.utils.IdentifierUtil.dataverse;
+
 import java.util.ArrayList;
 import java.util.List;
 
@@ -78,7 +81,7 @@
             return null;
         }
         if (dataverseName == null) {
-            throw new AlgebricksException("Cannot declare output-record-type with no dataverse!");
+            throw new AlgebricksException("Cannot declare output-record-type with no " + dataverse());
         }
         IAType type = findType(mdTxnCtx, dataverseName, outputRecordType);
         if (!(type instanceof ARecordType)) {
@@ -109,7 +112,8 @@
             String datasetName) throws AlgebricksException {
         Dataset dataset = findDataset(mdTxnCtx, dataverseName, datasetName);
         if (dataset == null) {
-            throw new AlgebricksException("Unknown dataset " + datasetName + " in dataverse " + dataverseName);
+            throw new AlgebricksException(
+                    "Unknown " + dataset() + " " + datasetName + " in " + dataverse() + " " + dataverseName);
         }
         return dataset;
     }
diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/declared/MetadataProvider.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/declared/MetadataProvider.java
index 9241458..497b15f 100644
--- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/declared/MetadataProvider.java
+++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/declared/MetadataProvider.java
@@ -18,6 +18,8 @@
  */
 package org.apache.asterix.metadata.declared;
 
+import static org.apache.asterix.common.utils.IdentifierUtil.dataset;
+import static org.apache.asterix.common.utils.IdentifierUtil.dataverse;
 import static org.apache.asterix.metadata.utils.MetadataConstants.METADATA_OBJECT_NAME_INVALID_CHARS;
 
 import java.io.File;
@@ -618,8 +620,8 @@
         Index secondaryIndex = MetadataManager.INSTANCE.getIndex(mdTxnCtx, dataset.getDataverseName(),
                 dataset.getDatasetName(), indexName);
         if (secondaryIndex == null) {
-            throw new AlgebricksException(
-                    "Code generation error: no index " + indexName + " for dataset " + dataset.getDatasetName());
+            throw new AlgebricksException("Code generation error: no index " + indexName + " for " + dataset() + " "
+                    + dataset.getDatasetName());
         }
         Index.ValueIndexDetails secondaryIndexDetails = (Index.ValueIndexDetails) secondaryIndex.getIndexDetails();
         RecordDescriptor outputRecDesc = JobGenHelper.mkRecordDescriptor(typeEnv, opSchema, context);
@@ -985,8 +987,8 @@
         String datasetName = dataSource.getId().getDatasourceName();
         Dataset dataset = findDataset(dataSource.getId().getDataverseName(), datasetName);
         if (dataset == null) {
-            throw new AlgebricksException(
-                    "Unknown dataset " + datasetName + " in dataverse " + dataSource.getId().getDataverseName());
+            throw new AlgebricksException("Unknown " + dataset() + " " + datasetName + " in " + dataverse() + " "
+                    + dataSource.getId().getDataverseName());
         }
         int numKeys = primaryKeys.size();
         int numFilterFields = DatasetUtil.getFilterField(dataset) == null ? 0 : 1;
@@ -1035,7 +1037,7 @@
             JobSpecification jobSpec, IAType itemType, ITypedAdapterFactory adapterFactory,
             ITupleFilterFactory tupleFilterFactory, long outputLimit) throws AlgebricksException {
         if (itemType.getTypeTag() != ATypeTag.OBJECT) {
-            throw new AlgebricksException("Can only scan datasets of records.");
+            throw new AlgebricksException("Can only scan " + dataset() + "s of records.");
         }
 
         ISerializerDeserializer<?> payloadSerde =
@@ -1090,7 +1092,7 @@
                         keyType = IndexingConstants.getFieldType(j);
                         break;
                     default:
-                        throw new AlgebricksException("Unknown Dataset Type");
+                        throw new CompilationException(ErrorCode.COMPILATION_UNKNOWN_DATASET_TYPE, dsType.toString());
                 }
             } catch (AsterixException e) {
                 throw new AlgebricksException(e);
@@ -1531,7 +1533,8 @@
 
         // Sanity checks.
         if (primaryKeys.size() > 1) {
-            throw new AlgebricksException("Cannot create inverted index on dataset with composite primary key.");
+            throw new AlgebricksException(
+                    "Cannot create inverted index on " + dataset() + "s with composite primary key.");
         }
         // The size of secondaryKeys can be two if it receives input from its
         // TokenizeOperator- [token, number of token]
diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/Function.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/Function.java
index 3cd4346..a9fa024 100644
--- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/Function.java
+++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/Function.java
@@ -18,6 +18,8 @@
  */
 package org.apache.asterix.metadata.entities;
 
+import static org.apache.asterix.common.utils.IdentifierUtil.dataset;
+
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
@@ -197,5 +199,10 @@
         public String getDependencyDisplayName(Triple<DataverseName, String, String> dependency) {
             return dependencyDisplayNameAccessor.apply(dependency);
         }
+
+        @Override
+        public String toString() {
+            return this == DATASET ? dataset() : name().toLowerCase();
+        }
     }
 }
diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/feeds/FeedMetadataUtil.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/feeds/FeedMetadataUtil.java
index d5e941f..92390a7 100644
--- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/feeds/FeedMetadataUtil.java
+++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/feeds/FeedMetadataUtil.java
@@ -18,6 +18,8 @@
  */
 package org.apache.asterix.metadata.feeds;
 
+import static org.apache.asterix.common.utils.IdentifierUtil.dataset;
+
 import java.rmi.RemoteException;
 import java.util.Map;
 
@@ -53,6 +55,7 @@
 import org.apache.asterix.metadata.utils.MetadataConstants;
 import org.apache.asterix.om.types.ARecordType;
 import org.apache.asterix.om.types.ATypeTag;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
 import org.apache.hyracks.algebricks.common.utils.Triple;
 import org.apache.hyracks.api.dataflow.value.ISerializerDeserializer;
@@ -73,12 +76,12 @@
             String datasetName) throws AlgebricksException {
         Dataset dataset = metadataProvider.findDataset(dataverseName, datasetName);
         if (dataset == null) {
-            throw new CompilationException("Unknown target dataset :" + datasetName);
+            throw new CompilationException("Unknown target " + dataset() + " :" + datasetName);
         }
 
         if (!dataset.getDatasetType().equals(DatasetType.INTERNAL)) {
-            throw new CompilationException("Statement not applicable. Dataset " + datasetName
-                    + " is not of required type " + DatasetType.INTERNAL);
+            throw new CompilationException("Statement not applicable. " + StringUtils.capitalize(dataset()) + " "
+                    + datasetName + " is not of required type " + DatasetType.INTERNAL);
         }
         return dataset;
     }
diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/DatasetUtil.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/DatasetUtil.java
index 4bcc5f0..4ef349b 100644
--- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/DatasetUtil.java
+++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/DatasetUtil.java
@@ -18,6 +18,9 @@
  */
 package org.apache.asterix.metadata.utils;
 
+import static org.apache.asterix.common.utils.IdentifierUtil.dataset;
+import static org.apache.asterix.common.utils.IdentifierUtil.dataverse;
+
 import java.io.DataOutput;
 import java.util.ArrayList;
 import java.util.Collections;
@@ -366,7 +369,8 @@
         DataverseName dataverseName = dataverse.getDataverseName();
         Dataset dataset = metadataProvider.findDataset(dataverseName, datasetName);
         if (dataset == null) {
-            throw new AsterixException("Could not find dataset " + datasetName + " in dataverse " + dataverseName);
+            throw new AsterixException(
+                    "Could not find " + dataset() + " " + datasetName + " in " + dataverse() + " " + dataverseName);
         }
         JobSpecification spec = RuntimeUtils.createJobSpecification(metadataProvider.getApplicationContext());
         Pair<IFileSplitProvider, AlgebricksPartitionConstraint> splitsAndConstraint =
diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/InvertedIndexResourceFactoryProvider.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/InvertedIndexResourceFactoryProvider.java
index b6510b9..d0b7c59 100644
--- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/InvertedIndexResourceFactoryProvider.java
+++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/InvertedIndexResourceFactoryProvider.java
@@ -18,6 +18,8 @@
  */
 package org.apache.asterix.metadata.utils;
 
+import static org.apache.asterix.common.utils.IdentifierUtil.dataset;
+
 import java.util.List;
 import java.util.Map;
 
@@ -77,7 +79,8 @@
                     index.getIndexType().name(), dataset.getDatasetType());
         }
         if (numPrimaryKeys > 1) {
-            throw new AsterixException("Cannot create inverted index on dataset with composite primary key.");
+            throw new AsterixException(
+                    "Cannot create inverted index on " + dataset() + "s with composite primary key.");
         }
         if (numSecondaryKeys > 1) {
             throw new AsterixException("Cannot create composite inverted index on multiple fields.");
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/functions/BuiltinFunctions.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/functions/BuiltinFunctions.java
index 63573a1..aac01f9 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/functions/BuiltinFunctions.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/functions/BuiltinFunctions.java
@@ -1657,7 +1657,7 @@
         addFunction(CREATE_RECTANGLE, ARectangleTypeComputer.INSTANCE, true);
         addFunction(CREATE_UUID, AUUIDTypeComputer.INSTANCE, false);
         addFunction(UUID, AUUIDTypeComputer.INSTANCE, false);
-        addFunction(CREATE_QUERY_UID, ABinaryTypeComputer.INSTANCE, false);
+        addPrivateFunction(CREATE_QUERY_UID, ABinaryTypeComputer.INSTANCE, false);
         addFunction(UUID_CONSTRUCTOR, AUUIDTypeComputer.INSTANCE, true);
         addFunction(RANDOM, ADoubleTypeComputer.INSTANCE, false);
         addFunction(RANDOM_WITH_SEED, NumericUnaryTypeComputer.INSTANCE_DOUBLE, false);
diff --git a/asterixdb/asterix-replication/src/main/java/org/apache/asterix/replication/management/NetworkingUtil.java b/asterixdb/asterix-replication/src/main/java/org/apache/asterix/replication/management/NetworkingUtil.java
index d572ba2..97dd049 100644
--- a/asterixdb/asterix-replication/src/main/java/org/apache/asterix/replication/management/NetworkingUtil.java
+++ b/asterixdb/asterix-replication/src/main/java/org/apache/asterix/replication/management/NetworkingUtil.java
@@ -34,9 +34,13 @@
 
 import org.apache.hyracks.api.comm.NetworkAddress;
 import org.apache.hyracks.api.network.ISocketChannel;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 public class NetworkingUtil {
 
+    private static final Logger LOGGER = LogManager.getLogger();
+
     private NetworkingUtil() {
         throw new AssertionError("This util class should not be initialized.");
     }
@@ -72,9 +76,15 @@
         long fileSize = fileChannel.size();
         long count = fileSize;
         long numTransferred = 0;
-        while ((numTransferred += fileChannel.transferFrom(socketChannel, pos, count)) < fileSize) {
-            pos += numTransferred;
-            count -= numTransferred;
+        try {
+            while ((numTransferred += fileChannel.transferFrom(socketChannel, pos, count)) < fileSize) {
+                pos += numTransferred;
+                count -= numTransferred;
+            }
+        } catch (Exception e) {
+            LOGGER.info("failed to download file; file size {}, pos {}, count {}, numTransferred {}", fileSize, pos,
+                    count, numTransferred);
+            throw e;
         }
     }
 
diff --git a/asterixdb/asterix-replication/src/main/java/org/apache/asterix/replication/messaging/ReplicateFileTask.java b/asterixdb/asterix-replication/src/main/java/org/apache/asterix/replication/messaging/ReplicateFileTask.java
index 35dbd49..5f7bee6 100644
--- a/asterixdb/asterix-replication/src/main/java/org/apache/asterix/replication/messaging/ReplicateFileTask.java
+++ b/asterixdb/asterix-replication/src/main/java/org/apache/asterix/replication/messaging/ReplicateFileTask.java
@@ -63,6 +63,7 @@
     @Override
     public void perform(INcApplicationContext appCtx, IReplicationWorker worker) {
         try {
+            LOGGER.info("attempting to replicate {}", this);
             final IIOManager ioManager = appCtx.getIoManager();
             // resolve path
             final FileReference localPath = ioManager.resolve(file);
@@ -127,4 +128,10 @@
         final boolean isMetadata = input.readBoolean();
         return new ReplicateFileTask(s, i, isMetadata);
     }
+
+    @Override
+    public String toString() {
+        return "ReplicateFileTask{" + "file='" + file + '\'' + ", size=" + size + ", indexMetadata=" + indexMetadata
+                + '}';
+    }
 }
diff --git a/asterixdb/asterix-replication/src/main/java/org/apache/asterix/replication/sync/FileSynchronizer.java b/asterixdb/asterix-replication/src/main/java/org/apache/asterix/replication/sync/FileSynchronizer.java
index f0a4229..7bb2858 100644
--- a/asterixdb/asterix-replication/src/main/java/org/apache/asterix/replication/sync/FileSynchronizer.java
+++ b/asterixdb/asterix-replication/src/main/java/org/apache/asterix/replication/sync/FileSynchronizer.java
@@ -32,9 +32,12 @@
 import org.apache.hyracks.api.io.FileReference;
 import org.apache.hyracks.api.io.IIOManager;
 import org.apache.hyracks.api.network.ISocketChannel;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 public class FileSynchronizer {
 
+    private static final Logger LOGGER = LogManager.getLogger();
     private final INcApplicationContext appCtx;
     private final PartitionReplica replica;
 
@@ -53,6 +56,7 @@
             final ISocketChannel channel = replica.getChannel();
             final FileReference filePath = ioManager.resolve(file);
             ReplicateFileTask task = new ReplicateFileTask(file, filePath.getFile().length(), metadata);
+            LOGGER.info("attempting to replicate {} to replica {}", task, replica);
             ReplicationProtocol.sendTo(replica, task);
             // send the file itself
             try (RandomAccessFile fromFile = new RandomAccessFile(filePath.getFile(), "r");
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/CreateQueryUIDDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/CreateQueryUIDDescriptor.java
index adb8874..86d0596 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/CreateQueryUIDDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/CreateQueryUIDDescriptor.java
@@ -19,15 +19,14 @@
 package org.apache.asterix.runtime.evaluators.functions;
 
 import org.apache.asterix.om.functions.BuiltinFunctions;
-import org.apache.asterix.om.functions.IFunctionDescriptor;
 import org.apache.asterix.om.functions.IFunctionDescriptorFactory;
 import org.apache.asterix.om.types.ATypeTag;
-import org.apache.asterix.runtime.evaluators.base.AbstractScalarFunctionDynamicDescriptor;
+import org.apache.asterix.runtime.runningaggregates.base.AbstractRunningAggregateFunctionDynamicDescriptor;
 import org.apache.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
 import org.apache.hyracks.algebricks.runtime.base.IEvaluatorContext;
-import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluator;
+import org.apache.hyracks.algebricks.runtime.base.IRunningAggregateEvaluator;
+import org.apache.hyracks.algebricks.runtime.base.IRunningAggregateEvaluatorFactory;
 import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
-import org.apache.hyracks.api.exceptions.HyracksDataException;
 import org.apache.hyracks.data.std.api.IPointable;
 import org.apache.hyracks.data.std.primitive.IntegerPointable;
 import org.apache.hyracks.dataflow.common.data.accessors.IFrameTupleReference;
@@ -35,31 +34,26 @@
 /**
  * Create global unique id within a query.
  */
-public class CreateQueryUIDDescriptor extends AbstractScalarFunctionDynamicDescriptor {
+public class CreateQueryUIDDescriptor extends AbstractRunningAggregateFunctionDynamicDescriptor {
 
     private static final long serialVersionUID = 1L;
 
-    public static final IFunctionDescriptorFactory FACTORY = new IFunctionDescriptorFactory() {
-        @Override
-        public IFunctionDescriptor createFunctionDescriptor() {
-            return new CreateQueryUIDDescriptor();
-        }
-    };
+    public static final IFunctionDescriptorFactory FACTORY = CreateQueryUIDDescriptor::new;
 
     @Override
-    public IScalarEvaluatorFactory createEvaluatorFactory(IScalarEvaluatorFactory[] args) {
-        return new IScalarEvaluatorFactory() {
+    public IRunningAggregateEvaluatorFactory createRunningAggregateEvaluatorFactory(IScalarEvaluatorFactory[] args) {
+        return new IRunningAggregateEvaluatorFactory() {
             private static final long serialVersionUID = 1L;
             private static final int BINARY_LENGTH = 14;
             private static final int PAYLOAD_START = 2;
 
             @Override
-            public IScalarEvaluator createScalarEvaluator(IEvaluatorContext ctx) throws HyracksDataException {
+            public IRunningAggregateEvaluator createRunningAggregateEvaluator(IEvaluatorContext ctx) {
                 // Format: |TypeTag | PayloadLength | Payload |
                 // TypeTag: 1 byte
                 // PayloadLength: 1 byte
                 // Payload: 12 bytes:  |partition-id (4 bytes) | local-id (8 bytes) |
-                byte[] uidBytes = new byte[BINARY_LENGTH];
+                final byte[] uidBytes = new byte[BINARY_LENGTH];
                 // Writes the type tag.
                 uidBytes[0] = ATypeTag.SERIALIZED_BINARY_TYPE_TAG;
                 // Writes the payload size.
@@ -68,10 +62,13 @@
                 IntegerPointable.setInteger(uidBytes, PAYLOAD_START,
                         ctx.getTaskContext().getTaskAttemptId().getTaskId().getPartition());
 
-                return new IScalarEvaluator() {
+                return new IRunningAggregateEvaluator() {
+                    @Override
+                    public void init() {
+                    }
 
                     @Override
-                    public void evaluate(IFrameTupleReference tuple, IPointable result) throws HyracksDataException {
+                    public void step(IFrameTupleReference tuple, IPointable result) {
                         // Increments the Unique ID value.
                         for (int i = BINARY_LENGTH - 1; i >= PAYLOAD_START; i--) {
                             if (++uidBytes[i] != 0) {
@@ -89,5 +86,4 @@
     public FunctionIdentifier getIdentifier() {
         return BuiltinFunctions.CREATE_QUERY_UID;
     }
-
 }
diff --git a/asterixdb/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/service/transaction/TransactionManager.java b/asterixdb/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/service/transaction/TransactionManager.java
index c218dec..ee65962 100644
--- a/asterixdb/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/service/transaction/TransactionManager.java
+++ b/asterixdb/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/service/transaction/TransactionManager.java
@@ -18,6 +18,8 @@
  */
 package org.apache.asterix.transaction.management.service.transaction;
 
+import static org.apache.asterix.transaction.management.service.transaction.TransactionManagementConstants.LogManagerConstants.TERMINAL_LSN;
+
 import java.io.IOException;
 import java.io.OutputStream;
 import java.util.Map;
@@ -101,10 +103,12 @@
         final ITransactionContext txnCtx = getTransactionContext(txnId);
         try {
             if (txnCtx.isWriteTxn()) {
-                LogRecord logRecord = new LogRecord();
-                TransactionUtil.formJobTerminateLogRecord(txnCtx, logRecord, false);
-                txnSubsystem.getLogManager().log(logRecord);
-                txnSubsystem.getCheckpointManager().secure(txnId);
+                if (txnCtx.getFirstLSN() != TERMINAL_LSN) {
+                    LogRecord logRecord = new LogRecord();
+                    TransactionUtil.formJobTerminateLogRecord(txnCtx, logRecord, false);
+                    txnSubsystem.getLogManager().log(logRecord);
+                    txnSubsystem.getCheckpointManager().secure(txnId);
+                }
                 txnSubsystem.getRecoveryManager().rollbackTransaction(txnCtx);
                 txnCtx.setTxnState(ITransactionManager.ABORTED);
             }
diff --git a/asterixdb/pom.xml b/asterixdb/pom.xml
index f89f0ac..6067ef9 100644
--- a/asterixdb/pom.xml
+++ b/asterixdb/pom.xml
@@ -1390,7 +1390,7 @@
       <dependency>
         <groupId>it.unimi.dsi</groupId>
         <artifactId>fastutil</artifactId>
-        <version>8.3.0</version>
+        <version>8.5.4</version>
       </dependency>
       <dependency>
         <groupId>com.sun.xml.bind</groupId>
diff --git a/asterixdb/src/main/appended-resources/supplemental-models.xml b/asterixdb/src/main/appended-resources/supplemental-models.xml
index bcdda15..7f3b7ec 100644
--- a/asterixdb/src/main/appended-resources/supplemental-models.xml
+++ b/asterixdb/src/main/appended-resources/supplemental-models.xml
@@ -250,11 +250,33 @@
       <artifactId>fastutil</artifactId>
       <properties>
         <!-- fastutil is ALv2, and does not contain any embedded LICENSE or NOTICE file -->
-        <!-- see https://github.com/vigna/fastutil/blob/8.1.1/LICENSE-2.0 -->
-        <!-- see https://github.com/vigna/fastutil/blob/8.2.2/LICENSE-2.0 -->
-        <!-- see https://github.com/vigna/fastutil/blob/8.3.0/LICENSE-2.0 -->
-        <license.ignoreMissingEmbeddedLicense>8.1.1,8.2.2,8.3.0</license.ignoreMissingEmbeddedLicense>
-        <license.ignoreMissingEmbeddedNotice>8.1.1,8.2.2,8.3.0</license.ignoreMissingEmbeddedNotice>
+        <!-- see https://github.com/vigna/fastutil/blob/8.5.4/LICENSE-2.0 -->
+        <license.ignoreMissingEmbeddedLicense>8.5.4</license.ignoreMissingEmbeddedLicense>
+        <license.ignoreMissingEmbeddedNotice>8.5.4</license.ignoreMissingEmbeddedNotice>
+      </properties>
+    </project>
+  </supplement>
+  <supplement>
+    <project>
+      <groupId>it.unimi.dsi</groupId>
+      <artifactId>fastutil-core</artifactId>
+      <properties>
+        <!-- fastutil is ALv2, and does not contain any embedded LICENSE or NOTICE file -->
+        <!-- see https://github.com/vigna/fastutil/blob/8.5.4/LICENSE-2.0 -->
+        <license.ignoreMissingEmbeddedLicense>8.5.4</license.ignoreMissingEmbeddedLicense>
+        <license.ignoreMissingEmbeddedNotice>8.5.4</license.ignoreMissingEmbeddedNotice>
+      </properties>
+    </project>
+  </supplement>
+  <supplement>
+    <project>
+      <groupId>it.unimi.dsi</groupId>
+      <artifactId>fastutil-extra</artifactId>
+      <properties>
+        <!-- fastutil is ALv2, and does not contain any embedded LICENSE or NOTICE file -->
+        <!-- see https://github.com/vigna/fastutil/blob/8.5.4/LICENSE-2.0 -->
+        <license.ignoreMissingEmbeddedLicense>8.5.4</license.ignoreMissingEmbeddedLicense>
+        <license.ignoreMissingEmbeddedNotice>8.5.4</license.ignoreMissingEmbeddedNotice>
       </properties>
     </project>
   </supplement>
diff --git a/hyracks-fullstack/algebricks/algebricks-common/src/main/java/org/apache/hyracks/algebricks/common/exceptions/AlgebricksException.java b/hyracks-fullstack/algebricks/algebricks-common/src/main/java/org/apache/hyracks/algebricks/common/exceptions/AlgebricksException.java
index 4b8179c..0b7af91 100644
--- a/hyracks-fullstack/algebricks/algebricks-common/src/main/java/org/apache/hyracks/algebricks/common/exceptions/AlgebricksException.java
+++ b/hyracks-fullstack/algebricks/algebricks-common/src/main/java/org/apache/hyracks/algebricks/common/exceptions/AlgebricksException.java
@@ -113,6 +113,7 @@
         return errorCode;
     }
 
+    @Override
     public Serializable[] getParams() {
         return params;
     }
@@ -121,6 +122,7 @@
         return nodeId;
     }
 
+    @Override
     public SourceLocation getSourceLocation() {
         return sourceLoc;
     }
diff --git a/hyracks-fullstack/algebricks/algebricks-compiler/src/main/java/org/apache/hyracks/algebricks/compiler/api/HeuristicCompilerFactoryBuilder.java b/hyracks-fullstack/algebricks/algebricks-compiler/src/main/java/org/apache/hyracks/algebricks/compiler/api/HeuristicCompilerFactoryBuilder.java
index 49be31c..c6a79a5 100644
--- a/hyracks-fullstack/algebricks/algebricks-compiler/src/main/java/org/apache/hyracks/algebricks/compiler/api/HeuristicCompilerFactoryBuilder.java
+++ b/hyracks-fullstack/algebricks/algebricks-compiler/src/main/java/org/apache/hyracks/algebricks/compiler/api/HeuristicCompilerFactoryBuilder.java
@@ -106,8 +106,7 @@
                                 expressionRuntimeProvider, expressionTypeComputer, oc, expressionEvalSizeComputer,
                                 partialAggregationTypeComputer, predEvaluatorFactoryProvider,
                                 physicalOptimizationConfig.getFrameSize(), clusterLocations, warningCollector,
-                                maxWarnings);
-
+                                maxWarnings, physicalOptimizationConfig);
                         PlanCompiler pc = new PlanCompiler(context);
                         return pc.compilePlan(plan, jobEventListenerFactory);
                     }
diff --git a/hyracks-fullstack/algebricks/algebricks-core/pom.xml b/hyracks-fullstack/algebricks/algebricks-core/pom.xml
index b6c19f0..f58a7f6 100644
--- a/hyracks-fullstack/algebricks/algebricks-core/pom.xml
+++ b/hyracks-fullstack/algebricks/algebricks-core/pom.xml
@@ -104,7 +104,7 @@
     </dependency>
     <dependency>
       <groupId>it.unimi.dsi</groupId>
-      <artifactId>fastutil</artifactId>
+      <artifactId>fastutil-core</artifactId>
     </dependency>
     <dependency>
       <groupId>junit</groupId>
diff --git a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/RunningAggregateOperator.java b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/RunningAggregateOperator.java
index 313fc30..56040dc 100644
--- a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/RunningAggregateOperator.java
+++ b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/RunningAggregateOperator.java
@@ -36,6 +36,11 @@
         super(variables, expressions);
     }
 
+    public RunningAggregateOperator(LogicalVariable var, Mutable<ILogicalExpression> expr) {
+        this.variables.add(var);
+        this.expressions.add(expr);
+    }
+
     @Override
     public LogicalOperatorTag getOperatorTag() {
         return LogicalOperatorTag.RUNNINGAGGREGATE;
diff --git a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/util/OperatorManipulationUtil.java b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/util/OperatorManipulationUtil.java
index aa2ecdc..0df9851 100644
--- a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/util/OperatorManipulationUtil.java
+++ b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/util/OperatorManipulationUtil.java
@@ -487,11 +487,16 @@
     public static List<Mutable<ILogicalExpression>> createVariableReferences(Collection<LogicalVariable> varList,
             SourceLocation sourceLoc) {
         List<Mutable<ILogicalExpression>> varRefs = new ArrayList<>(varList.size());
+        createVariableReferences(varList, sourceLoc, varRefs);
+        return varRefs;
+    }
+
+    public static void createVariableReferences(Collection<LogicalVariable> varList, SourceLocation sourceLoc,
+            List<Mutable<ILogicalExpression>> outVarRefList) {
         for (LogicalVariable var : varList) {
             VariableReferenceExpression varRef = new VariableReferenceExpression(var);
             varRef.setSourceLocation(sourceLoc);
-            varRefs.add(new MutableObject<>(varRef));
+            outVarRefList.add(new MutableObject<>(varRef));
         }
-        return varRefs;
     }
 }
diff --git a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/config/AlgebricksConfig.java b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/config/AlgebricksConfig.java
index 944ddf7..20632f1 100644
--- a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/config/AlgebricksConfig.java
+++ b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/config/AlgebricksConfig.java
@@ -18,6 +18,7 @@
  */
 package org.apache.hyracks.algebricks.core.config;
 
+import org.apache.hyracks.util.StorageUtil;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 
@@ -34,4 +35,6 @@
     public static final boolean SUBPLAN_NESTEDPUSHDOWN_DEFAULT = true;
     public static final boolean MIN_MEMORY_ALLOCATION_DEFAULT = true;
     public static final boolean ARRAY_INDEX_DEFAULT = false;
+    public static final int EXTERNAL_SCAN_BUFFER_SIZE =
+            StorageUtil.getIntSizeInBytes(8, StorageUtil.StorageUnit.KILOBYTE);
 }
diff --git a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/jobgen/impl/JobGenContext.java b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/jobgen/impl/JobGenContext.java
index 41cde2e..2ca4a36 100644
--- a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/jobgen/impl/JobGenContext.java
+++ b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/jobgen/impl/JobGenContext.java
@@ -34,6 +34,7 @@
 import org.apache.hyracks.algebricks.core.algebra.metadata.IMetadataProvider;
 import org.apache.hyracks.algebricks.core.algebra.operators.logical.IOperatorSchema;
 import org.apache.hyracks.algebricks.core.algebra.typing.ITypingContext;
+import org.apache.hyracks.algebricks.core.rewriter.base.PhysicalOptimizationConfig;
 import org.apache.hyracks.algebricks.data.IBinaryBooleanInspectorFactory;
 import org.apache.hyracks.algebricks.data.IBinaryComparatorFactoryProvider;
 import org.apache.hyracks.algebricks.data.IBinaryHashFunctionFactoryProvider;
@@ -70,6 +71,7 @@
     private final IPartialAggregationTypeComputer partialAggregationTypeComputer;
     private final IPredicateEvaluatorFactoryProvider predEvaluatorFactoryProvider;
     private final int frameSize;
+    private final PhysicalOptimizationConfig physicalOptimizationConfig;
     private AlgebricksAbsolutePartitionConstraint clusterLocations;
     private int varCounter;
     private final ITypingContext typingContext;
@@ -90,7 +92,7 @@
             IPartialAggregationTypeComputer partialAggregationTypeComputer,
             IPredicateEvaluatorFactoryProvider predEvaluatorFactoryProvider, int frameSize,
             AlgebricksAbsolutePartitionConstraint clusterLocations, IWarningCollector warningCollector,
-            long maxWarnings) {
+            long maxWarnings, PhysicalOptimizationConfig physicalOptimizationConfig) {
         this.outerFlowSchema = outerFlowSchema;
         this.metadataProvider = metadataProvider;
         this.appContext = appContext;
@@ -113,6 +115,7 @@
         this.partialAggregationTypeComputer = partialAggregationTypeComputer;
         this.predEvaluatorFactoryProvider = predEvaluatorFactoryProvider;
         this.frameSize = frameSize;
+        this.physicalOptimizationConfig = physicalOptimizationConfig;
         this.varCounter = 0;
         this.warningCollector = warningCollector;
         this.maxWarnings = maxWarnings;
@@ -227,4 +230,8 @@
     public long getMaxWarnings() {
         return maxWarnings;
     }
+
+    public PhysicalOptimizationConfig getPhysicalOptimizationConfig() {
+        return physicalOptimizationConfig;
+    }
 }
diff --git a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/rewriter/base/PhysicalOptimizationConfig.java b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/rewriter/base/PhysicalOptimizationConfig.java
index f18cad2..62bf671 100644
--- a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/rewriter/base/PhysicalOptimizationConfig.java
+++ b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/rewriter/base/PhysicalOptimizationConfig.java
@@ -46,6 +46,7 @@
     private static final String SUBPLAN_NESTEDPUSHDOWN = "SUBPLAN_NESTEDPUSHDOWN";
     private static final String MIN_MEMORY_ALLOCATION = "MIN_MEMORY_ALLOCATION";
     private static final String ARRAY_INDEX = "ARRAY_INDEX";
+    private static final String EXTERNAL_SCAN_BUFFER_SIZE = "EXTERNAL_SCAN_BUFFER_SIZE";
 
     private final Properties properties = new Properties();
 
@@ -235,6 +236,14 @@
         setBoolean(ARRAY_INDEX, arrayIndex);
     }
 
+    public int getExternalScanBufferSize() {
+        return getInt(EXTERNAL_SCAN_BUFFER_SIZE, AlgebricksConfig.EXTERNAL_SCAN_BUFFER_SIZE);
+    }
+
+    public void setExternalScanBufferSize(int bufferSize) {
+        setInt(EXTERNAL_SCAN_BUFFER_SIZE, bufferSize);
+    }
+
     private void setInt(String property, int value) {
         properties.setProperty(property, Integer.toString(value));
     }
diff --git a/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/RemoveUnusedAssignAndAggregateRule.java b/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/RemoveUnusedAssignAndAggregateRule.java
index a563f46..956f0b7 100644
--- a/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/RemoveUnusedAssignAndAggregateRule.java
+++ b/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/RemoveUnusedAssignAndAggregateRule.java
@@ -43,6 +43,7 @@
 import org.apache.hyracks.algebricks.core.algebra.operators.logical.AggregateOperator;
 import org.apache.hyracks.algebricks.core.algebra.operators.logical.AssignOperator;
 import org.apache.hyracks.algebricks.core.algebra.operators.logical.GroupByOperator;
+import org.apache.hyracks.algebricks.core.algebra.operators.logical.RunningAggregateOperator;
 import org.apache.hyracks.algebricks.core.algebra.operators.logical.UnionAllOperator;
 import org.apache.hyracks.algebricks.core.algebra.operators.logical.UnnestOperator;
 import org.apache.hyracks.algebricks.core.algebra.operators.logical.WindowOperator;
@@ -50,7 +51,7 @@
 import org.apache.hyracks.algebricks.core.rewriter.base.IAlgebraicRewriteRule;
 
 /**
- * Removes unused variables from Assign, Unnest, Aggregate, UnionAll, and Group-by operators.
+ * Removes unused variables from Assign, Unnest, Aggregate, RunningAggregate, UnionAll, and Group-by operators.
  */
 public class RemoveUnusedAssignAndAggregateRule implements IAlgebraicRewriteRule {
 
@@ -223,6 +224,13 @@
                     isTransformed = true;
                 }
                 return agg.getVariables().size();
+            case RUNNINGAGGREGATE:
+                RunningAggregateOperator ragg = (RunningAggregateOperator) op;
+                if (removeUnusedVarsAndExprs(toRemove, ragg.getVariables(), ragg.getExpressions())) {
+                    context.computeAndSetTypeEnvironmentForOperator(ragg);
+                    isTransformed = true;
+                }
+                return ragg.getVariables().size();
             case UNNEST:
                 UnnestOperator uOp = (UnnestOperator) op;
                 LogicalVariable pVar = uOp.getPositionalVariable();
@@ -354,6 +362,11 @@
                 assignVarsSetInThisOp.addAll(agg.getVariables());
                 targetOpFound = true;
                 break;
+            case RUNNINGAGGREGATE:
+                RunningAggregateOperator ragg = (RunningAggregateOperator) op;
+                assignVarsSetInThisOp.addAll(ragg.getVariables());
+                targetOpFound = true;
+                break;
             case UNNEST:
                 UnnestOperator uOp = (UnnestOperator) op;
                 LogicalVariable pVar = uOp.getPositionalVariable();
diff --git a/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/exceptions/HyracksException.java b/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/exceptions/HyracksException.java
index 0769e18..977e5d2 100644
--- a/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/exceptions/HyracksException.java
+++ b/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/exceptions/HyracksException.java
@@ -130,6 +130,7 @@
         return errorCode;
     }
 
+    @Override
     public Serializable[] getParams() {
         return params;
     }
@@ -138,6 +139,7 @@
         return nodeId;
     }
 
+    @Override
     public SourceLocation getSourceLocation() {
         return sourceLoc;
     }
diff --git a/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/exceptions/IFormattedException.java b/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/exceptions/IFormattedException.java
index 33b3995..b9d2deb 100644
--- a/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/exceptions/IFormattedException.java
+++ b/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/exceptions/IFormattedException.java
@@ -18,6 +18,7 @@
  */
 package org.apache.hyracks.api.exceptions;
 
+import java.io.Serializable;
 import java.util.Objects;
 import java.util.Optional;
 import java.util.stream.Stream;
@@ -58,6 +59,16 @@
     Optional<IError> getError();
 
     /**
+     * @return the source location
+     */
+    SourceLocation getSourceLocation();
+
+    /**
+     * @return the parameters to use when formatting
+     */
+    Serializable[] getParams();
+
+    /**
      * Indicates whether this exception matches the supplied error code
      */
     default boolean matches(IError candidate) {
diff --git a/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/exceptions/Warning.java b/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/exceptions/Warning.java
index ec8f8e9..5f01559 100644
--- a/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/exceptions/Warning.java
+++ b/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/exceptions/Warning.java
@@ -24,26 +24,29 @@
 import java.io.Serializable;
 import java.util.Objects;
 
+import org.apache.commons.lang3.SerializationUtils;
 import org.apache.hyracks.api.util.ErrorMessageUtil;
 
 public class Warning implements Serializable {
 
-    private static final long serialVersionUID = 1L;
+    private static final long serialVersionUID = 2L;
     private final String component;
     private final SourceLocation srcLocation;
     private final int code;
     private final String message;
+    private final Serializable[] params;
 
-    private Warning(String component, SourceLocation srcLocation, int code, String message) {
+    private Warning(String component, SourceLocation srcLocation, int code, String message, Serializable... params) {
         this.component = component;
         this.srcLocation = srcLocation;
         this.code = code;
         this.message = message;
+        this.params = params;
     }
 
     public static Warning of(SourceLocation srcLocation, IError code, Serializable... params) {
         return new Warning(code.component(), srcLocation, code.intValue(), ErrorMessageUtil
-                .formatMessage(code.component(), code.intValue(), code.errorMessage(), srcLocation, params));
+                .formatMessage(code.component(), code.intValue(), code.errorMessage(), srcLocation, params), params);
     }
 
     public String getComponent() {
@@ -84,13 +87,25 @@
         output.writeInt(code);
         output.writeUTF(message);
         SourceLocation.writeFields(srcLocation, output);
+        writeParams(output, params);
+    }
+
+    private static void writeParams(DataOutput output, Serializable[] params) throws IOException {
+        byte[] serialize = SerializationUtils.serialize(params);
+        output.writeInt(serialize.length);
+        output.write(serialize);
     }
 
     public static Warning create(DataInput input) throws IOException {
         String comp = input.readUTF();
         int code = input.readInt();
         String msg = input.readUTF();
-        return new Warning(comp, SourceLocation.create(input), code, msg);
+        SourceLocation sourceLocation = SourceLocation.create(input);
+        int paramsLen = input.readInt();
+        byte[] paramsBytes = new byte[paramsLen];
+        input.readFully(paramsBytes, 0, paramsBytes.length);
+        Serializable[] params = SerializationUtils.deserialize(paramsBytes);
+        return new Warning(comp, sourceLocation, code, msg, params);
     }
 
     @Override
@@ -98,4 +113,8 @@
         return "Warning{" + "component='" + component + '\'' + ", srcLocation=" + srcLocation + ", code=" + code
                 + ", message='" + message + '\'' + '}';
     }
+
+    public Serializable[] getParams() {
+        return params;
+    }
 }
diff --git a/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/util/InvokeUtil.java b/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/util/InvokeUtil.java
index 6ecb677..0b1c5a6 100644
--- a/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/util/InvokeUtil.java
+++ b/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/util/InvokeUtil.java
@@ -278,7 +278,7 @@
                 failure = th;
                 try {
                     long delayMs = delay.calculate(attempt);
-                    if (!policy.retry(th) || span.remaining(TimeUnit.MILLISECONDS) < delayMs) {
+                    if (!policy.retry(th) || span.elapsed() || span.remaining(TimeUnit.MILLISECONDS) < delayMs) {
                         onFailure.attemptFailed(action, attempt, true, span, failure);
                         throw HyracksDataException.create(failure);
                     } else {
diff --git a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-common/src/main/java/org/apache/hyracks/control/common/controllers/NCConfig.java b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-common/src/main/java/org/apache/hyracks/control/common/controllers/NCConfig.java
index 22b240a..01cb9bf 100644
--- a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-common/src/main/java/org/apache/hyracks/control/common/controllers/NCConfig.java
+++ b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-common/src/main/java/org/apache/hyracks/control/common/controllers/NCConfig.java
@@ -98,6 +98,7 @@
         PYTHON_ADDITIONAL_PACKAGES(STRING_ARRAY, new String[0]),
         PYTHON_USE_BUNDLED_MSGPACK(BOOLEAN, true),
         PYTHON_ARGS(STRING_ARRAY, (String[]) null),
+        PYTHON_ENV(STRING_ARRAY, (String[]) null),
         CREDENTIAL_FILE(
                 OptionTypes.STRING,
                 (Function<IApplicationConfig, String>) appConfig -> FileUtil
@@ -245,6 +246,8 @@
                     return "Python args to pass to Python interpreter";
                 case PYTHON_CMD_AUTOLOCATE:
                     return "Whether or not to attempt to automatically set PYTHON_CMD to a usable interpreter";
+                case PYTHON_ENV:
+                    return "List of environment variables to set when invoking the Python interpreter for Python UDFs. E.g. FOO=1";
                 case CREDENTIAL_FILE:
                     return "Path to HTTP basic credentials";
                 default:
@@ -621,4 +624,5 @@
     public String getCredentialFilePath() {
         return getAppConfig().getString(Option.CREDENTIAL_FILE);
     }
+
 }
diff --git a/hyracks-fullstack/hyracks/hyracks-data/hyracks-data-std/pom.xml b/hyracks-fullstack/hyracks/hyracks-data/hyracks-data-std/pom.xml
index a11d8de..fb143d9 100644
--- a/hyracks-fullstack/hyracks/hyracks-data/hyracks-data-std/pom.xml
+++ b/hyracks-fullstack/hyracks/hyracks-data/hyracks-data-std/pom.xml
@@ -54,7 +54,7 @@
     </dependency>
     <dependency>
       <groupId>it.unimi.dsi</groupId>
-      <artifactId>fastutil</artifactId>
+      <artifactId>fastutil-core</artifactId>
     </dependency>
   </dependencies>
 </project>
diff --git a/hyracks-fullstack/hyracks/hyracks-dataflow-common/src/main/java/org/apache/hyracks/dataflow/common/io/RunFileWriter.java b/hyracks-fullstack/hyracks/hyracks-dataflow-common/src/main/java/org/apache/hyracks/dataflow/common/io/RunFileWriter.java
index dabdd4f..c370b58 100644
--- a/hyracks-fullstack/hyracks/hyracks-dataflow-common/src/main/java/org/apache/hyracks/dataflow/common/io/RunFileWriter.java
+++ b/hyracks-fullstack/hyracks/hyracks-dataflow-common/src/main/java/org/apache/hyracks/dataflow/common/io/RunFileWriter.java
@@ -75,9 +75,15 @@
     }
 
     public void erase() throws HyracksDataException {
-        close();
-        file.delete();
+        try {
+            close();
+        } finally {
+            eraseClosed();
+        }
+    }
 
+    public void eraseClosed() {
+        file.delete();
         // Make sure we never access the file if it is deleted.
         file = null;
         handle = null;
diff --git a/hyracks-fullstack/hyracks/hyracks-dataflow-std/src/main/java/org/apache/hyracks/dataflow/std/join/NestedLoopJoin.java b/hyracks-fullstack/hyracks/hyracks-dataflow-std/src/main/java/org/apache/hyracks/dataflow/std/join/NestedLoopJoin.java
index a5ad500..03ff72f 100644
--- a/hyracks-fullstack/hyracks/hyracks-dataflow-std/src/main/java/org/apache/hyracks/dataflow/std/join/NestedLoopJoin.java
+++ b/hyracks-fullstack/hyracks/hyracks-dataflow-std/src/main/java/org/apache/hyracks/dataflow/std/join/NestedLoopJoin.java
@@ -20,6 +20,7 @@
 
 import java.io.DataOutput;
 import java.nio.ByteBuffer;
+import java.util.BitSet;
 
 import org.apache.hyracks.api.comm.IFrame;
 import org.apache.hyracks.api.comm.IFrameWriter;
@@ -28,6 +29,7 @@
 import org.apache.hyracks.api.dataflow.value.IMissingWriter;
 import org.apache.hyracks.api.dataflow.value.IPredicateEvaluator;
 import org.apache.hyracks.api.dataflow.value.ITuplePairComparator;
+import org.apache.hyracks.api.exceptions.ErrorCode;
 import org.apache.hyracks.api.exceptions.HyracksDataException;
 import org.apache.hyracks.api.io.FileReference;
 import org.apache.hyracks.dataflow.common.comm.io.ArrayTupleBuilder;
@@ -43,6 +45,14 @@
 import org.apache.hyracks.dataflow.std.buffermanager.VariableFramePool;
 
 public class NestedLoopJoin {
+    // Note: Min memory budget should be less than {@code AbstractJoinPOperator.MIN_FRAME_LIMIT_FOR_JOIN}
+    // Inner join: 1 frame for the outer input side, 1 frame for the inner input side, 1 frame for the output
+    private static final int MIN_FRAME_BUDGET_INNER_JOIN = 3;
+    // Outer join extra: Add 1 frame for the {@code outerMatchLOJ} bitset
+    private static final int MIN_FRAME_BUDGET_OUTER_JOIN = MIN_FRAME_BUDGET_INNER_JOIN + 1;
+    // Outer join needs 1 bit per each tuple in the outer side buffer
+    private static final int ESTIMATE_AVG_TUPLE_SIZE = 128;
+
     private final FrameTupleAccessor accessorInner;
     private final FrameTupleAccessor accessorOuter;
     private final FrameTupleAppender appender;
@@ -54,30 +64,45 @@
     private final boolean isLeftOuter;
     private final ArrayTupleBuilder missingTupleBuilder;
     private final IPredicateEvaluator predEvaluator;
-    private boolean isReversed; //Added for handling correct calling for predicate-evaluator upon recursive calls (in OptimizedHybridHashJoin) that cause role-reversal
+    // Added for handling correct calling for predicate-evaluator upon recursive calls
+    // (in OptimizedHybridHashJoin) that cause role-reversal
+    private final boolean isReversed;
     private final BufferInfo tempInfo = new BufferInfo(null, -1, -1);
+    private final BitSet outerMatchLOJ;
 
     public NestedLoopJoin(IHyracksJobletContext jobletContext, FrameTupleAccessor accessorOuter,
-            FrameTupleAccessor accessorInner, int memSize, IPredicateEvaluator predEval, boolean isLeftOuter,
+            FrameTupleAccessor accessorInner, int memBudgetInFrames, IPredicateEvaluator predEval, boolean isLeftOuter,
             IMissingWriter[] missingWriters) throws HyracksDataException {
+        this(jobletContext, accessorOuter, accessorInner, memBudgetInFrames, predEval, isLeftOuter, missingWriters,
+                false);
+    }
+
+    public NestedLoopJoin(IHyracksJobletContext jobletContext, FrameTupleAccessor accessorOuter,
+            FrameTupleAccessor accessorInner, int memBudgetInFrames, IPredicateEvaluator predEval, boolean isLeftOuter,
+            IMissingWriter[] missingWriters, boolean isReversed) throws HyracksDataException {
         this.accessorInner = accessorInner;
         this.accessorOuter = accessorOuter;
         this.appender = new FrameTupleAppender();
         this.outBuffer = new VSizeFrame(jobletContext);
         this.innerBuffer = new VSizeFrame(jobletContext);
         this.appender.reset(outBuffer, true);
-        if (memSize < 3) {
-            throw new HyracksDataException("Not enough memory is available for Nested Loop Join");
+
+        int minMemBudgetInFrames = isLeftOuter ? MIN_FRAME_BUDGET_OUTER_JOIN : MIN_FRAME_BUDGET_INNER_JOIN;
+        if (memBudgetInFrames < minMemBudgetInFrames) {
+            throw new HyracksDataException(ErrorCode.INSUFFICIENT_MEMORY);
         }
+        int outerBufferMngrMemBudgetInFrames = memBudgetInFrames - minMemBudgetInFrames + 1;
+        int outerBufferMngrMemBudgetInBytes = jobletContext.getInitialFrameSize() * outerBufferMngrMemBudgetInFrames;
         this.outerBufferMngr = new VariableFrameMemoryManager(
-                new VariableFramePool(jobletContext, jobletContext.getInitialFrameSize() * (memSize - 2)),
-                FrameFreeSlotPolicyFactory.createFreeSlotPolicy(EnumFreeSlotPolicy.LAST_FIT, memSize - 2));
+                new VariableFramePool(jobletContext, outerBufferMngrMemBudgetInBytes), FrameFreeSlotPolicyFactory
+                        .createFreeSlotPolicy(EnumFreeSlotPolicy.LAST_FIT, outerBufferMngrMemBudgetInFrames));
 
         this.predEvaluator = predEval;
-        this.isReversed = false;
-
         this.isLeftOuter = isLeftOuter;
         if (isLeftOuter) {
+            if (isReversed) {
+                throw new HyracksDataException(ErrorCode.ILLEGAL_STATE, "Outer join cannot reverse roles");
+            }
             int innerFieldCount = this.accessorInner.getFieldCount();
             missingTupleBuilder = new ArrayTupleBuilder(innerFieldCount);
             DataOutput out = missingTupleBuilder.getDataOutput();
@@ -85,9 +110,14 @@
                 missingWriters[i].writeMissing(out);
                 missingTupleBuilder.addFieldEndOffset();
             }
+            // Outer join needs 1 bit per each tuple in the outer side buffer
+            int outerMatchLOJCardinalityEstimate = outerBufferMngrMemBudgetInBytes / ESTIMATE_AVG_TUPLE_SIZE;
+            outerMatchLOJ = new BitSet(Math.max(outerMatchLOJCardinalityEstimate, 1));
         } else {
             missingTupleBuilder = null;
+            outerMatchLOJ = null;
         }
+        this.isReversed = isReversed;
 
         FileReference file =
                 jobletContext.createManagedWorkspaceFile(this.getClass().getSimpleName() + this.toString());
@@ -117,23 +147,7 @@
             return;
         }
         if (outerBufferMngr.insertFrame(outerBuffer) < 0) {
-            RunFileReader runFileReader = runFileWriter.createReader();
-            try {
-                runFileReader.open();
-                if (runFileReader.nextFrame(innerBuffer)) {
-                    do {
-                        for (int i = 0; i < outerBufferMngr.getNumFrames(); i++) {
-                            blockJoin(outerBufferMngr.getFrame(i, tempInfo), innerBuffer.getBuffer(), writer);
-                        }
-                    } while (runFileReader.nextFrame(innerBuffer));
-                } else if (isLeftOuter) {
-                    for (int i = 0; i < outerBufferMngr.getNumFrames(); i++) {
-                        appendMissing(outerBufferMngr.getFrame(i, tempInfo), writer);
-                    }
-                }
-            } finally {
-                runFileReader.close();
-            }
+            multiBlockJoin(writer);
             outerBufferMngr.reset();
             if (outerBufferMngr.insertFrame(outerBuffer) < 0) {
                 throw new HyracksDataException("The given outer frame of size:" + outerBuffer.capacity()
@@ -142,16 +156,51 @@
         }
     }
 
-    private void blockJoin(BufferInfo outerBufferInfo, ByteBuffer innerBuffer, IFrameWriter writer)
-            throws HyracksDataException {
-        accessorOuter.reset(outerBufferInfo.getBuffer(), outerBufferInfo.getStartOffset(), outerBufferInfo.getLength());
-        accessorInner.reset(innerBuffer);
-        int tupleCount0 = accessorOuter.getTupleCount();
-        int tupleCount1 = accessorInner.getTupleCount();
+    private void multiBlockJoin(IFrameWriter writer) throws HyracksDataException {
+        int outerBufferFrameCount = outerBufferMngr.getNumFrames();
+        if (outerBufferFrameCount == 0) {
+            return;
+        }
+        RunFileReader runFileReader = runFileWriter.createReader();
+        try {
+            runFileReader.open();
+            if (isLeftOuter) {
+                outerMatchLOJ.clear();
+            }
+            while (runFileReader.nextFrame(innerBuffer)) {
+                int outerTupleRunningCount = 0;
+                for (int i = 0; i < outerBufferFrameCount; i++) {
+                    BufferInfo outerBufferInfo = outerBufferMngr.getFrame(i, tempInfo);
+                    accessorOuter.reset(outerBufferInfo.getBuffer(), outerBufferInfo.getStartOffset(),
+                            outerBufferInfo.getLength());
+                    int outerTupleCount = accessorOuter.getTupleCount();
+                    accessorInner.reset(innerBuffer.getBuffer());
+                    blockJoin(outerTupleRunningCount, writer);
+                    outerTupleRunningCount += outerTupleCount;
+                }
+            }
+            if (isLeftOuter) {
+                int outerTupleRunningCount = 0;
+                for (int i = 0; i < outerBufferFrameCount; i++) {
+                    BufferInfo outerBufferInfo = outerBufferMngr.getFrame(i, tempInfo);
+                    accessorOuter.reset(outerBufferInfo.getBuffer(), outerBufferInfo.getStartOffset(),
+                            outerBufferInfo.getLength());
+                    int outerFrameTupleCount = accessorOuter.getTupleCount();
+                    appendMissing(outerTupleRunningCount, outerFrameTupleCount, writer);
+                    outerTupleRunningCount += outerFrameTupleCount;
+                }
+            }
+        } finally {
+            runFileReader.close();
+        }
+    }
 
-        for (int i = 0; i < tupleCount0; ++i) {
+    private void blockJoin(int outerTupleStartPos, IFrameWriter writer) throws HyracksDataException {
+        int outerTupleCount = accessorOuter.getTupleCount();
+        int innerTupleCount = accessorInner.getTupleCount();
+        for (int i = 0; i < outerTupleCount; ++i) {
             boolean matchFound = false;
-            for (int j = 0; j < tupleCount1; ++j) {
+            for (int j = 0; j < innerTupleCount; ++j) {
                 int c = tpComparator.compare(accessorOuter, i, accessorInner, j);
                 boolean prdEval = evaluatePredicate(i, j);
                 if (c == 0 && prdEval) {
@@ -159,13 +208,8 @@
                     appendToResults(i, j, writer);
                 }
             }
-
-            if (!matchFound && isLeftOuter) {
-                final int[] ntFieldEndOffsets = missingTupleBuilder.getFieldEndOffsets();
-                final byte[] ntByteArray = missingTupleBuilder.getByteArray();
-                final int ntSize = missingTupleBuilder.getSize();
-                FrameUtils.appendConcatToWriter(writer, appender, accessorOuter, i, ntFieldEndOffsets, ntByteArray, 0,
-                        ntSize);
+            if (isLeftOuter && matchFound) {
+                outerMatchLOJ.set(outerTupleStartPos + i);
             }
         }
     }
@@ -191,15 +235,18 @@
         FrameUtils.appendConcatToWriter(writer, appender, accessor1, tupleId1, accessor2, tupleId2);
     }
 
-    private void appendMissing(BufferInfo outerBufferInfo, IFrameWriter writer) throws HyracksDataException {
-        accessorOuter.reset(outerBufferInfo.getBuffer(), outerBufferInfo.getStartOffset(), outerBufferInfo.getLength());
-        int tupleCount = accessorOuter.getTupleCount();
-        for (int i = 0; i < tupleCount; ++i) {
-            final int[] ntFieldEndOffsets = missingTupleBuilder.getFieldEndOffsets();
-            final byte[] ntByteArray = missingTupleBuilder.getByteArray();
-            final int ntSize = missingTupleBuilder.getSize();
-            FrameUtils.appendConcatToWriter(writer, appender, accessorOuter, i, ntFieldEndOffsets, ntByteArray, 0,
-                    ntSize);
+    private void appendMissing(int outerFrameMngrStartPos, int outerFrameTupleCount, IFrameWriter writer)
+            throws HyracksDataException {
+        int limit = outerFrameMngrStartPos + outerFrameTupleCount;
+        for (int outerTuplePos =
+                outerMatchLOJ.nextClearBit(outerFrameMngrStartPos); outerTuplePos < limit; outerTuplePos =
+                        outerMatchLOJ.nextClearBit(outerTuplePos + 1)) {
+            int[] ntFieldEndOffsets = missingTupleBuilder.getFieldEndOffsets();
+            byte[] ntByteArray = missingTupleBuilder.getByteArray();
+            int ntSize = missingTupleBuilder.getSize();
+            int outerAccessorTupleIndex = outerTuplePos - outerFrameMngrStartPos;
+            FrameUtils.appendConcatToWriter(writer, appender, accessorOuter, outerAccessorTupleIndex, ntFieldEndOffsets,
+                    ntByteArray, 0, ntSize);
         }
     }
 
@@ -210,22 +257,10 @@
     }
 
     public void completeJoin(IFrameWriter writer) throws HyracksDataException {
-        RunFileReader runFileReader = runFileWriter.createDeleteOnCloseReader();
         try {
-            runFileReader.open();
-            if (runFileReader.nextFrame(innerBuffer)) {
-                do {
-                    for (int i = 0; i < outerBufferMngr.getNumFrames(); i++) {
-                        blockJoin(outerBufferMngr.getFrame(i, tempInfo), innerBuffer.getBuffer(), writer);
-                    }
-                } while (runFileReader.nextFrame(innerBuffer));
-            } else if (isLeftOuter) {
-                for (int i = 0; i < outerBufferMngr.getNumFrames(); i++) {
-                    appendMissing(outerBufferMngr.getFrame(i, tempInfo), writer);
-                }
-            }
+            multiBlockJoin(writer);
         } finally {
-            runFileReader.close();
+            runFileWriter.eraseClosed();
         }
         appender.write(writer, true);
     }
@@ -233,8 +268,4 @@
     public void releaseMemory() throws HyracksDataException {
         outerBufferMngr.reset();
     }
-
-    public void setIsReversed(boolean b) {
-        this.isReversed = b;
-    }
 }
diff --git a/hyracks-fullstack/hyracks/hyracks-dataflow-std/src/main/java/org/apache/hyracks/dataflow/std/join/OptimizedHybridHashJoinOperatorDescriptor.java b/hyracks-fullstack/hyracks/hyracks-dataflow-std/src/main/java/org/apache/hyracks/dataflow/std/join/OptimizedHybridHashJoinOperatorDescriptor.java
index c142113..bb79981 100644
--- a/hyracks-fullstack/hyracks/hyracks-dataflow-std/src/main/java/org/apache/hyracks/dataflow/std/join/OptimizedHybridHashJoinOperatorDescriptor.java
+++ b/hyracks-fullstack/hyracks/hyracks-dataflow-std/src/main/java/org/apache/hyracks/dataflow/std/join/OptimizedHybridHashJoinOperatorDescriptor.java
@@ -802,11 +802,10 @@
                     // The nested loop join result is outer + inner. All the other operator is probe + build.
                     // Hence the reverse relation is different.
                     boolean isReversed = outerRd == buildRd && innerRd == probeRd;
-                    assert isLeftOuter ? !isReversed : true : "LeftOut Join can not reverse roles";
                     ITuplePairComparator nljComptorOuterInner = isReversed ? buildComp : probComp;
                     NestedLoopJoin nlj = new NestedLoopJoin(jobletCtx, new FrameTupleAccessor(outerRd),
-                            new FrameTupleAccessor(innerRd), memorySize, predEvaluator, isLeftOuter, nonMatchWriter);
-                    nlj.setIsReversed(isReversed);
+                            new FrameTupleAccessor(innerRd), memorySize, predEvaluator, isLeftOuter, nonMatchWriter,
+                            isReversed);
                     nlj.setComparator(nljComptorOuterInner);
 
                     IFrame cacheBuff = new VSizeFrame(jobletCtx);
diff --git a/hyracks-fullstack/hyracks/hyracks-http/src/main/java/org/apache/hyracks/http/server/AbstractServlet.java b/hyracks-fullstack/hyracks/hyracks-http/src/main/java/org/apache/hyracks/http/server/AbstractServlet.java
index fa64003..514a7dd 100644
--- a/hyracks-fullstack/hyracks/hyracks-http/src/main/java/org/apache/hyracks/http/server/AbstractServlet.java
+++ b/hyracks-fullstack/hyracks/hyracks-http/src/main/java/org/apache/hyracks/http/server/AbstractServlet.java
@@ -22,8 +22,6 @@
 import static com.fasterxml.jackson.databind.SerializationFeature.ORDER_MAP_ENTRIES_BY_KEYS;
 
 import java.io.IOException;
-import java.io.UnsupportedEncodingException;
-import java.net.URLDecoder;
 import java.nio.charset.StandardCharsets;
 import java.util.Arrays;
 import java.util.concurrent.ConcurrentMap;
@@ -177,12 +175,7 @@
     public String localPath(IServletRequest request) {
         final String uri = request.getHttpRequest().uri();
         int queryStart = uri.indexOf('?');
-        String localPath = queryStart == -1 ? uri.substring(trim(uri)) : uri.substring(trim(uri), queryStart);
-        try {
-            return URLDecoder.decode(localPath, StandardCharsets.UTF_8.name());
-        } catch (UnsupportedEncodingException e) {
-            throw new IllegalArgumentException(e);
-        }
+        return queryStart == -1 ? uri.substring(trim(uri)) : uri.substring(trim(uri), queryStart);
     }
 
     public String servletPath(IServletRequest request) {
diff --git a/hyracks-fullstack/hyracks/hyracks-util/pom.xml b/hyracks-fullstack/hyracks/hyracks-util/pom.xml
index 4993443..a03e884 100644
--- a/hyracks-fullstack/hyracks/hyracks-util/pom.xml
+++ b/hyracks-fullstack/hyracks/hyracks-util/pom.xml
@@ -101,7 +101,7 @@
     </dependency>
     <dependency>
       <groupId>it.unimi.dsi</groupId>
-      <artifactId>fastutil</artifactId>
+      <artifactId>fastutil-core</artifactId>
     </dependency>
   </dependencies>
 
diff --git a/hyracks-fullstack/pom.xml b/hyracks-fullstack/pom.xml
index 0fb88ed..27f9ab1 100644
--- a/hyracks-fullstack/pom.xml
+++ b/hyracks-fullstack/pom.xml
@@ -307,8 +307,8 @@
       </dependency>
       <dependency>
         <groupId>it.unimi.dsi</groupId>
-        <artifactId>fastutil</artifactId>
-        <version>8.3.0</version>
+        <artifactId>fastutil-core</artifactId>
+        <version>8.5.4</version>
       </dependency>
       <dependency>
         <groupId>org.apache.logging.log4j</groupId>